diff --git a/make.mk b/make.mk index 21ccc0f..a58aba3 100644 --- a/make.mk +++ b/make.mk @@ -40,7 +40,6 @@ INCLUDES += \ -I../../watch-library/hal/utils/include/ \ -I../../watch-library/hal/utils/src/ \ -I../../watch-library/hpl/ \ - -I../../watch-library/hpl/adc/ \ -I../../watch-library/hpl/core/ \ -I../../watch-library/hpl/dmac/ \ -I../../watch-library/hpl/eic/ \ @@ -54,8 +53,6 @@ INCLUDES += \ -I../../watch-library/hpl/sercom/ \ -I../../watch-library/hpl/slcd/ \ -I../../watch-library/hpl/systick/ \ - -I../../watch-library/hpl/tcc/ \ - -I../../watch-library/hpl/tc/ \ -I../../watch-library/hri/ \ -I../../watch-library/config/ \ -I../../watch-library/hw/ \ @@ -75,7 +72,6 @@ SRCS += \ ../../watch-library/startup_saml22.c \ ../../watch-library/hw/driver_init.c \ ../../watch-library/watch/watch.c \ - ../../watch-library/hal/src/hal_adc_sync.c \ ../../watch-library/hal/src/hal_atomic.c \ ../../watch-library/hal/src/hal_calendar.c \ ../../watch-library/hal/src/hal_delay.c \ @@ -84,14 +80,12 @@ SRCS += \ ../../watch-library/hal/src/hal_i2c_m_sync.c \ ../../watch-library/hal/src/hal_init.c \ ../../watch-library/hal/src/hal_io.c \ - ../../watch-library/hal/src/hal_pwm.c \ ../../watch-library/hal/src/hal_slcd_sync.c \ ../../watch-library/hal/src/hal_sleep.c \ ../../watch-library/hal/utils/src/utils_assert.c \ ../../watch-library/hal/utils/src/utils_event.c \ ../../watch-library/hal/utils/src/utils_list.c \ ../../watch-library/hal/utils/src/utils_syscalls.c \ - ../../watch-library/hpl/adc/hpl_adc.c \ ../../watch-library/hpl/core/hpl_core_m0plus_base.c \ ../../watch-library/hpl/core/hpl_init.c \ ../../watch-library/hpl/dmac/hpl_dmac.c \ @@ -105,8 +99,6 @@ SRCS += \ ../../watch-library/hpl/sercom/hpl_sercom.c \ ../../watch-library/hpl/slcd/hpl_slcd.c \ ../../watch-library/hpl/systick/hpl_systick.c \ - ../../watch-library/hpl/tcc/hpl_tcc.c \ - ../../watch-library/hpl/tc/hpl_tc.c DEFINES += \ -D__SAML22J18A__ \ diff --git a/watch-library/config/hpl_adc_config.h b/watch-library/config/hpl_adc_config.h deleted file mode 100644 index e15dc52..0000000 --- a/watch-library/config/hpl_adc_config.h +++ /dev/null @@ -1,305 +0,0 @@ -/* Auto-generated config file hpl_adc_config.h */ -#ifndef HPL_ADC_CONFIG_H -#define HPL_ADC_CONFIG_H - -// <<< Use Configuration Wizard in Context Menu >>> - -#ifndef CONF_ADC_0_ENABLE -#define CONF_ADC_0_ENABLE 1 -#endif - -// Basic Configuration - -// Conversion Result Resolution -// <0x0=>12-bit -// <0x1=>16-bit (averaging must be enabled) -// <0x2=>10-bit -// <0x3=>8-bit -// Defines the bit resolution for the ADC sample values (RESSEL) -// adc_resolution -#ifndef CONF_ADC_0_RESSEL -#define CONF_ADC_0_RESSEL 0x0 -#endif - -// Reference Selection -// <0x0=>Internal bandgap reference -// <0x1=>1/1.6 VDDANA -// <0x2=>1/2 VDDANA (only for VDDANA > 2.0V) -// <0x3=>External reference A -// <0x4=>External reference B -// <0x5=>VDDANA -// Select the reference for the ADC (REFSEL) -// adc_reference -#ifndef CONF_ADC_0_REFSEL -#define CONF_ADC_0_REFSEL 0x0 -#endif - -// Prescaler configuration -// <0x0=>Peripheral clock divided by 2 -// <0x1=>Peripheral clock divided by 4 -// <0x2=>Peripheral clock divided by 8 -// <0x3=>Peripheral clock divided by 16 -// <0x4=>Peripheral clock divided by 32 -// <0x5=>Peripheral clock divided by 64 -// <0x6=>Peripheral clock divided by 128 -// <0x7=>Peripheral clock divided by 256 -// These bits define the ADC clock relative to the peripheral clock (PRESCALER) -// adc_prescaler -#ifndef CONF_ADC_0_PRESCALER -#define CONF_ADC_0_PRESCALER 0x0 -#endif - -// Free Running Mode -// When enabled, the ADC is in free running mode and a new conversion will be initiated when a previous conversion completes. (FREERUN) -// adc_freerunning_mode -#ifndef CONF_ADC_0_FREERUN -#define CONF_ADC_0_FREERUN 0 -#endif - -// Differential Mode -// In differential mode, the voltage difference between the MUXPOS and MUXNEG inputs will be converted by the ADC. (DIFFMODE) -// adc_differential_mode -#ifndef CONF_ADC_0_DIFFMODE -#define CONF_ADC_0_DIFFMODE 0 -#endif - -// Positive Mux Input Selection -// <0x00=>ADC AIN0 pin -// <0x01=>ADC AIN1 pin -// <0x02=>ADC AIN2 pin -// <0x03=>ADC AIN3 pin -// <0x04=>ADC AIN4 pin -// <0x05=>ADC AIN5 pin -// <0x06=>ADC AIN6 pin -// <0x07=>ADC AIN7 pin -// <0x08=>ADC AIN8 pin -// <0x09=>ADC AIN9 pin -// <0x0A=>ADC AIN10 pin -// <0x0B=>ADC AIN11 pin -// <0x0C=>ADC AIN12 pin -// <0x0D=>ADC AIN13 pin -// <0x0E=>ADC AIN14 pin -// <0x0F=>ADC AIN15 pin -// <0x10=>ADC AIN16 pin -// <0x11=>ADC AIN17 pin -// <0x12=>ADC AIN18 pin -// <0x13=>ADC AIN19 pin -// <0x18=>Temperature reference -// <0x19=>Bandgap voltage -// <0x1A=>1/4 scaled core supply -// <0x1B=>1/4 scaled I/O supply -// <0x1D=>1/4 Scaled VBAT Supply -// <0x1E=>CTAT Output -// These bits define the Mux selection for the positive ADC input. (MUXPOS) -// adc_pinmux_positive -#ifndef CONF_ADC_0_MUXPOS -#define CONF_ADC_0_MUXPOS 0x0 -#endif - -// Negative Mux Input Selection -// <0x00=>ADC AIN0 pin -// <0x01=>ADC AIN1 pin -// <0x02=>ADC AIN2 pin -// <0x03=>ADC AIN3 pin -// <0x04=>ADC AIN4 pin -// <0x05=>ADC AIN5 pin -// <0x06=>ADC AIN6 pin -// <0x07=>ADC AIN7 pin -// <0x18=>Internal ground -// These bits define the Mux selection for the negative ADC input. (MUXNEG) -// adc_pinmux_negative -#ifndef CONF_ADC_0_MUXNEG -#define CONF_ADC_0_MUXNEG 0x0 -#endif - -// - -// Advanced Configuration -// adc_advanced_settings -#ifndef CONF_ADC_0_ADVANCED -#define CONF_ADC_0_ADVANCED 0 -#endif - -// Run in standby -// Indicates whether the ADC will continue running in standby sleep mode or not (RUNSTDBY) -// adc_arch_runstdby -#ifndef CONF_ADC_0_RUNSTDBY -#define CONF_ADC_0_RUNSTDBY 0 -#endif - -// Debug Run -// If enabled, the ADC is running if the CPU is halted by an external debugger. (DBGRUN) -// adc_arch_dbgrun -#ifndef CONF_ADC_0_DBGRUN -#define CONF_ADC_0_DBGRUN 0 -#endif - -// On Demand Control -// Will keep the ADC peripheral running if requested by other peripherals (ONDEMAND) -// adc_arch_ondemand -#ifndef CONF_ADC_0_ONDEMAND -#define CONF_ADC_0_ONDEMAND 0 -#endif - -// Left-Adjusted Result -// When enabled, the ADC conversion result is left-adjusted in the RESULT register. The high byte of the 12-bit result will be present in the upper part of the result register. (LEFTADJ) -// adc_arch_leftadj -#ifndef CONF_ADC_0_LEFTADJ -#define CONF_ADC_0_LEFTADJ 0 -#endif - -// Reference Buffer Offset Compensation Enable -// The accuracy of the gain stage can be increased by enabling the reference buffer offset compensation. This will decrease the input impedance and thus increase the start-up time of the reference. (REFCOMP) -// adc_arch_refcomp -#ifndef CONF_ADC_0_REFCOMP -#define CONF_ADC_0_REFCOMP 0 -#endif - -// Comparator Offset Compensation Enable -// This bit indicates whether the Comparator Offset Compensation is enabled or not (OFFCOMP) -// adc_arch_offcomp -#ifndef CONF_ADC_0_OFFCOMP -#define CONF_ADC_0_OFFCOMP 0 -#endif - -// Digital Correction Logic Enabled -// When enabled, the ADC conversion result in the RESULT register is then corrected for gain and offset based on the values in the GAINCAL and OFFSETCAL registers. (CORREN) -// adc_arch_corren -#ifndef CONF_ADC_0_CORREN -#define CONF_ADC_0_CORREN 0 -#endif - -// Offset Correction Value <0-4095> -// If the digital correction logic is enabled (CTRLB.CORREN = 1), these bits define how the ADC conversion result is compensated for offset error before being written to the Result register. (OFFSETCORR) -// adc_arch_offsetcorr -#ifndef CONF_ADC_0_OFFSETCORR -#define CONF_ADC_0_OFFSETCORR 0 -#endif - -// Gain Correction Value <0-4095> -// If the digital correction logic is enabled (CTRLB.CORREN = 1), these bits define how the ADC conversion result is compensated for gain error before being written to the result register. (GAINCORR) -// adc_arch_gaincorr -#ifndef CONF_ADC_0_GAINCORR -#define CONF_ADC_0_GAINCORR 0 -#endif - -// Adjusting Result / Division Coefficient <0-7> -// These bits define the division coefficient in 2n steps. (ADJRES) -// adc_arch_adjres -#ifndef CONF_ADC_0_ADJRES -#define CONF_ADC_0_ADJRES 0x0 -#endif - -// Number of Samples to be Collected -// <0x0=>1 sample -// <0x1=>2 samples -// <0x2=>4 samples -// <0x3=>8 samples -// <0x4=>16 samples -// <0x5=>32 samples -// <0x6=>64 samples -// <0x7=>128 samples -// <0x8=>256 samples -// <0x9=>512 samples -// <0xA=>1024 samples -// Define how many samples should be added together.The result will be available in the Result register (SAMPLENUM) -// adc_arch_samplenum -#ifndef CONF_ADC_0_SAMPLENUM -#define CONF_ADC_0_SAMPLENUM 0x0 -#endif - -// Sampling Time Length <0-63> -// These bits control the ADC sampling time in number of CLK_ADC cycles, depending of the prescaler value, thus controlling the ADC input impedance. (SAMPLEN) -// adc_arch_samplen -#ifndef CONF_ADC_0_SAMPLEN -#define CONF_ADC_0_SAMPLEN 0 -#endif - -// Window Monitor Mode -// <0x0=>No window mode -// <0x1=>Mode 1: RESULT above lower threshold -// <0x2=>Mode 2: RESULT beneath upper threshold -// <0x3=>Mode 3: RESULT inside lower and upper threshold -// <0x4=>Mode 4: RESULT outside lower and upper threshold -// These bits enable and define the window monitor mode. (WINMODE) -// adc_arch_winmode -#ifndef CONF_ADC_0_WINMODE -#define CONF_ADC_0_WINMODE 0x0 -#endif - -// Window Monitor Lower Threshold <0-65535> -// If the window monitor is enabled, these bits define the lower threshold value. (WINLT) -// adc_arch_winlt -#ifndef CONF_ADC_0_WINLT -#define CONF_ADC_0_WINLT 0 -#endif - -// Window Monitor Upper Threshold <0-65535> -// If the window monitor is enabled, these bits define the lower threshold value. (WINUT) -// adc_arch_winut -#ifndef CONF_ADC_0_WINUT -#define CONF_ADC_0_WINUT 0 -#endif - -// Bitmask for positive input sequence <0-4294967295> -// Use this parameter to input the bitmask for positive input sequence control (refer to datasheet for the device). -// adc_arch_seqen -#ifndef CONF_ADC_0_SEQEN -#define CONF_ADC_0_SEQEN 0x0 -#endif - -// - -// Event Control -// adc_arch_event_settings -#ifndef CONF_ADC_0_EVENT_CONTROL -#define CONF_ADC_0_EVENT_CONTROL 0 -#endif - -// Window Monitor Event Out -// Enables event output on window event (WINMONEO) -// adc_arch_winmoneo -#ifndef CONF_ADC_0_WINMONEO -#define CONF_ADC_0_WINMONEO 0 -#endif - -// Result Ready Event Out -// Enables event output on result ready event (RESRDEO) -// adc_arch_resrdyeo -#ifndef CONF_ADC_0_RESRDYEO -#define CONF_ADC_0_RESRDYEO 0 -#endif - -// Invert flush Event Signal -// Invert the flush event input signal (FLUSHINV) -// adc_arch_flushinv -#ifndef CONF_ADC_0_FLUSHINV -#define CONF_ADC_0_FLUSHINV 0 -#endif - -// Trigger Flush On Event -// Trigger an ADC pipeline flush on event (FLUSHEI) -// adc_arch_flushei -#ifndef CONF_ADC_0_FLUSHEI -#define CONF_ADC_0_FLUSHEI 0 -#endif - -// Invert Start Conversion Event Signal -// Invert the start conversion event input signal (STARTINV) -// adc_arch_startinv -#ifndef CONF_ADC_0_STARTINV -#define CONF_ADC_0_STARTINV 0 -#endif - -// Trigger Conversion On Event -// Trigger a conversion on event. (STARTEI) -// adc_arch_startei -#ifndef CONF_ADC_0_STARTEI -#define CONF_ADC_0_STARTEI 0 -#endif - -// - -// <<< end of configuration section >>> - -#endif // HPL_ADC_CONFIG_H diff --git a/watch-library/hal/documentation/adc_sync.rst b/watch-library/hal/documentation/adc_sync.rst deleted file mode 100644 index d189565..0000000 --- a/watch-library/hal/documentation/adc_sync.rst +++ /dev/null @@ -1,74 +0,0 @@ -====================== -ADC Synchronous driver -====================== - -An ADC (Analog-to-Digital Converter) converts analog signals to digital values. -A reference signal with a known voltage level is quantified into equally -sized chunks, each representing a digital value from 0 to the highest number -possible with the bit resolution supported by the ADC. The input voltage -measured by the ADC is compared against these chunks and the chunk with the -closest voltage level defines the digital value that can be used to represent -the analog input voltage level. - -Usually an ADC can operate in either differential or single-ended mode. -In differential mode two signals (V+ and V-) are compared against each other -and the resulting digital value represents the relative voltage level between -V+ and V-. This means that if the input voltage level on V+ is lower than on -V- the digital value is negative, which also means that in differential -mode one bit is lost to the sign. In single-ended mode only V+ is compared -against the reference voltage, and the resulting digital value can only be -positive, but the full bit-range of the ADC can be used. - -Usually multiple resolutions are supported by the ADC, lower resolution can -reduce the conversion time, but lose accuracy. - -Some ADCs has a gain stage on the input lines which can be used to increase the -dynamic range. The default gain value is usually x1, which means that the -conversion range is from 0V to the reference voltage. -Applications can change the gain stage, to increase or reduce the conversion -range. - -The window mode allows the conversion result to be compared to a set of -predefined threshold values. Applications can use callback function to monitor -if the conversion result exceeds predefined threshold value. - -Usually multiple reference voltages are supported by the ADC, both internal and -external with difference voltage levels. The reference voltage have an impact -on the accuracy, and should be selected to cover the full range of the analog -input signal and never less than the expected maximum input voltage. - -There are two conversion modes supported by ADC, single shot and free running. -In single shot mode the ADC only make one conversion when triggered by the -application, in free running mode it continues to make conversion from it -is triggered until it is stopped by the application. When window monitoring, -the ADC should be set to free running mode. - -Features --------- -* Initialization and de-initialization -* Support multiple Conversion Mode, Single or Free run -* Start ADC Conversion -* Read Conversion Result - -Applications ------------- -* Measurement of internal sensor. E.g., MCU internal temperature sensor value. -* Measurement of external sensor. E.g., Temperature, humidity sensor value. -* Sampling and measurement of a signal. E.g., sinusoidal wave, square wave. - -Dependencies ------------- -* ADC hardware - -Concurrency ------------ -N/A - -Limitations ------------ -N/A - -Knows issues and workarounds ----------------------------- -N/A - diff --git a/watch-library/hal/documentation/pwm.rst b/watch-library/hal/documentation/pwm.rst deleted file mode 100644 index 71785c6..0000000 --- a/watch-library/hal/documentation/pwm.rst +++ /dev/null @@ -1,53 +0,0 @@ -The PWM Driver(bare-bone) -========================= - -Pulse-width modulation (PWM) is used to create an analog behavior -digitally by controlling the amount of power transferred to the -connected peripheral. This is achieved by controlling the high period -(duty-cycle) of a periodic signal. - -User can change the period or duty cycle whenever PWM is running. The -function pwm_set_parameters is used to configure these two parameters. -Note these are raw register values and the parameter duty_cycle means -the period of first half during one cycle, which should be not beyond -total period value. - -In addition, user can also get multi PWM channels output from different -peripherals at the same time, which is implemented more flexible by the -function pointers. - -Features --------- - -* Initialization/de-initialization -* Enabling/disabling -* Run-time control of PWM duty-cycle and period -* Notifications about errors and one PWM cycle is done - -Applications ------------- - -Motor control, ballast, LED, H-bridge, power converters, and -other types of power control applications. - -Dependencies ------------- - -The peripheral which can perform waveform generation like frequency -generation and pulse-width modulation, such as Timer/Counter. - -Concurrency ------------ - -N/A - -Limitations ------------ - -The current driver doesn't support the features like recoverable, -non-recoverable faults, dithering, dead-time insertion. - -Known issues and workarounds ----------------------------- - -N/A diff --git a/watch-library/hal/include/hal_adc_sync.h b/watch-library/hal/include/hal_adc_sync.h deleted file mode 100644 index 1b66e3d..0000000 --- a/watch-library/hal/include/hal_adc_sync.h +++ /dev/null @@ -1,277 +0,0 @@ -/** - * \file - * - * \brief ADC functionality declaration. - * - * Copyright (c) 2014-2018 Microchip Technology Inc. and its subsidiaries. - * - * \asf_license_start - * - * \page License - * - * Subject to your compliance with these terms, you may use Microchip - * software and any derivatives exclusively with Microchip products. - * It is your responsibility to comply with third party license terms applicable - * to your use of third party software (including open source software) that - * may accompany Microchip software. - * - * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, - * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, - * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, - * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE - * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL - * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE - * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE - * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT - * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY - * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY, - * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE. - * - * \asf_license_stop - * - */ - -#ifndef _HAL_ADC_SYNC_H_INCLUDED -#define _HAL_ADC_SYNC_H_INCLUDED - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \addtogroup doc_driver_hal_adc_sync - * - * @{ - */ - -/** - * \brief ADC descriptor - * - * The ADC descriptor forward declaration. - */ -struct adc_sync_descriptor; - -/** - * \brief ADC descriptor - */ -struct adc_sync_descriptor { - /** ADC device */ - struct _adc_sync_device device; -}; - -/** - * \brief Initialize ADC - * - * This function initializes the given ADC descriptor. - * It checks if the given hardware is not initialized and if the given hardware - * is permitted to be initialized. - * - * \param[out] descr An ADC descriptor to initialize - * \param[in] hw The pointer to hardware instance - * \param[in] func The pointer to a set of functions pointers - * - * \return Initialization status. - */ -int32_t adc_sync_init(struct adc_sync_descriptor *const descr, void *const hw, void *const func); - -/** - * \brief Deinitialize ADC - * - * This function deinitializes the given ADC descriptor. - * It checks if the given hardware is initialized and if the given hardware is - * permitted to be deinitialized. - * - * \param[in] descr An ADC descriptor to deinitialize - * - * \return De-initialization status. - */ -int32_t adc_sync_deinit(struct adc_sync_descriptor *const descr); - -/** - * \brief Enable ADC - * - * Use this function to set the ADC peripheral to enabled state. - * - * \param[in] descr Pointer to the ADC descriptor - * \param[in] channel Channel number - * - * \return Operation status - * - */ -int32_t adc_sync_enable_channel(struct adc_sync_descriptor *const descr, const uint8_t channel); - -/** - * \brief Disable ADC - * - * Use this function to set the ADC peripheral to disabled state. - * - * \param[in] descr Pointer to the ADC descriptor - * \param[in] channel Channel number - * - * \return Operation status - * - */ -int32_t adc_sync_disable_channel(struct adc_sync_descriptor *const descr, const uint8_t channel); - -/** - * \brief Read data from ADC - * - * \param[in] descr The pointer to the ADC descriptor - * \param[in] channel Channel number - * \param[in] buf A buffer to read data to - * \param[in] length The size of a buffer - * - * \return The number of bytes read. - */ -int32_t adc_sync_read_channel(struct adc_sync_descriptor *const descr, const uint8_t channel, uint8_t *const buffer, - const uint16_t length); - -/** - * \brief Set ADC reference source - * - * This function sets ADC reference source. - * - * \param[in] descr The pointer to the ADC descriptor - * \param[in] reference A reference source to set - * - * \return Status of the ADC reference source setting. - */ -int32_t adc_sync_set_reference(struct adc_sync_descriptor *const descr, const adc_reference_t reference); - -/** - * \brief Set ADC resolution - * - * This function sets ADC resolution. - * - * \param[in] descr The pointer to the ADC descriptor - * \param[in] resolution A resolution to set - * - * \return Status of the ADC resolution setting. - */ -int32_t adc_sync_set_resolution(struct adc_sync_descriptor *const descr, const adc_resolution_t resolution); - -/** - * \brief Set ADC input source of a channel - * - * This function sets ADC positive and negative input sources. - * - * \param[in] descr The pointer to the ADC descriptor - * \param[in] pos_input A positive input source to set - * \param[in] neg_input A negative input source to set - * \param[in] channel Channel number - * - * \return Status of the ADC channels setting. - */ -int32_t adc_sync_set_inputs(struct adc_sync_descriptor *const descr, const adc_pos_input_t pos_input, - const adc_neg_input_t neg_input, const uint8_t channel); - -/** - * \brief Set ADC conversion mode - * - * This function sets ADC conversion mode. - * - * \param[in] descr The pointer to the ADC descriptor - * \param[in] mode A conversion mode to set - * - * \return Status of the ADC conversion mode setting. - */ -int32_t adc_sync_set_conversion_mode(struct adc_sync_descriptor *const descr, const enum adc_conversion_mode mode); - -/** - * \brief Set ADC differential mode - * - * This function sets ADC differential mode. - * - * \param[in] descr The pointer to the ADC descriptor - * \param[in] channel Channel number - * \param[in] mode A differential mode to set - * - * \return Status of the ADC differential mode setting. - */ -int32_t adc_sync_set_channel_differential_mode(struct adc_sync_descriptor *const descr, const uint8_t channel, - const enum adc_differential_mode mode); - -/** - * \brief Set ADC channel gain - * - * This function sets ADC channel gain. - * - * \param[in] descr The pointer to the ADC descriptor - * \param[in] channel Channel number - * \param[in] gain A gain to set - * - * \return Status of the ADC gain setting. - */ -int32_t adc_sync_set_channel_gain(struct adc_sync_descriptor *const descr, const uint8_t channel, - const adc_gain_t gain); - -/** - * \brief Set ADC window mode - * - * This function sets ADC window mode. - * - * \param[in] descr The pointer to the ADC descriptor - * \param[in] mode A window mode to set - * - * \return Status of the ADC window mode setting. - */ -int32_t adc_sync_set_window_mode(struct adc_sync_descriptor *const descr, const adc_window_mode_t mode); - -/** - * \brief Set ADC thresholds - * - * This function sets ADC positive and negative thresholds. - * - * \param[in] descr The pointer to the ADC descriptor - * \param[in] low_threshold A lower thresholds to set - * \param[in] up_threshold An upper thresholds to set - * - * \return Status of the ADC thresholds setting. - */ -int32_t adc_sync_set_thresholds(struct adc_sync_descriptor *const descr, const adc_threshold_t low_threshold, - const adc_threshold_t up_threshold); - -/** - * \brief Retrieve threshold state - * - * This function retrieves ADC threshold state. - * - * \param[in] descr The pointer to the ADC descriptor - * \param[out] state The threshold state - * - * \return The state of ADC thresholds state retrieving. - */ -int32_t adc_sync_get_threshold_state(const struct adc_sync_descriptor *const descr, - adc_threshold_status_t *const state); - -/** - * \brief Check if conversion is complete - * - * This function checks if the ADC has finished the conversion. - * - * \param[in] descr The pointer to the ADC descriptor - * \param[in] channel Channel number - * - * \return The status of ADC conversion completion checking. - * \retval 1 The conversion is complete - * \retval 0 The conversion is not complete - */ -int32_t adc_sync_is_channel_conversion_complete(const struct adc_sync_descriptor *const descr, const uint8_t channel); - -/** - * \brief Retrieve the current driver version - * - * \return Current driver version. - */ -uint32_t adc_sync_get_version(void); -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#include - -#endif /* _HAL_ADC_SYNC_H_INCLUDED */ diff --git a/watch-library/hal/include/hal_pwm.h b/watch-library/hal/include/hal_pwm.h deleted file mode 100644 index d55f7e6..0000000 --- a/watch-library/hal/include/hal_pwm.h +++ /dev/null @@ -1,153 +0,0 @@ -/** - * \file - * - * \brief PWM functionality declaration. - * - * Copyright (c) 2014-2018 Microchip Technology Inc. and its subsidiaries. - * - * \asf_license_start - * - * \page License - * - * Subject to your compliance with these terms, you may use Microchip - * software and any derivatives exclusively with Microchip products. - * It is your responsibility to comply with third party license terms applicable - * to your use of third party software (including open source software) that - * may accompany Microchip software. - * - * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, - * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, - * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, - * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE - * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL - * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE - * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE - * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT - * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY - * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY, - * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE. - * - * \asf_license_stop - * - */ - -#ifndef HAL_PWM_H_INCLUDED -#define HAL_PWM_H_INCLUDED - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \addtogroup doc_driver_hal_pwm_async - * - *@{ - */ - -/** - * \brief PWM descriptor - * - * The PWM descriptor forward declaration. - */ -struct pwm_descriptor; - -/** - * \brief PWM callback type - */ -typedef void (*pwm_cb_t)(const struct pwm_descriptor *const descr); - -/** - * \brief PWM callback types - */ -enum pwm_callback_type { PWM_PERIOD_CB, PWM_ERROR_CB }; - -/** - * \brief PWM callbacks - */ -struct pwm_callbacks { - pwm_cb_t period; - pwm_cb_t error; -}; - -/** \brief PWM descriptor - */ -struct pwm_descriptor { - /** PWM device */ - struct _pwm_device device; - /** PWM callback structure */ - struct pwm_callbacks pwm_cb; - /** PWM HPL interface pointer */ - struct _pwm_hpl_interface *func; -}; - -/** \brief Initialize the PWM HAL instance and hardware - * - * \param[in] descr Pointer to the HAL PWM descriptor - * \param[in] hw The pointer to hardware instance - * \param[in] func The pointer to a set of functions pointers - * - * \return Operation status. - */ -int32_t pwm_init(struct pwm_descriptor *const descr, void *const hw, struct _pwm_hpl_interface *const func); - -/** \brief Deinitialize the PWM HAL instance and hardware - * - * \param[in] descr Pointer to the HAL PWM descriptor - * - * \return Operation status. - */ -int32_t pwm_deinit(struct pwm_descriptor *const descr); - -/** \brief PWM output start - * - * \param[in] descr Pointer to the HAL PWM descriptor - * - * \return Operation status. - */ -int32_t pwm_enable(struct pwm_descriptor *const descr); - -/** \brief PWM output stop - * - * \param[in] descr Pointer to the HAL PWM descriptor - * - * \return Operation status. - */ -int32_t pwm_disable(struct pwm_descriptor *const descr); - -/** \brief Register PWM callback - * - * \param[in] descr Pointer to the HAL PWM descriptor - * \param[in] type Callback type - * \param[in] cb A callback function, passing NULL de-registers callback - * - * \return Operation status. - * \retval 0 Success - * \retval -1 Error - */ -int32_t pwm_register_callback(struct pwm_descriptor *const descr, enum pwm_callback_type type, pwm_cb_t cb); - -/** \brief Change PWM parameter - * - * \param[in] descr Pointer to the HAL PWM descriptor - * \param[in] period Total period of one PWM cycle - * \param[in] duty_cycle Period of PWM first half during one cycle - * - * \return Operation status. - */ -int32_t pwm_set_parameters(struct pwm_descriptor *const descr, const pwm_period_t period, - const pwm_period_t duty_cycle); - -/** \brief Get PWM driver version - * - * \return Current driver version. - */ -uint32_t pwm_get_version(void); -/**@}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* HAL_PWM;_H_INCLUDED */ diff --git a/watch-library/hal/include/hpl_adc_async.h b/watch-library/hal/include/hpl_adc_async.h deleted file mode 100644 index 1aa4162..0000000 --- a/watch-library/hal/include/hpl_adc_async.h +++ /dev/null @@ -1,264 +0,0 @@ -/** - * \file - * - * \brief ADC related functionality declaration. - * - * Copyright (c) 2015-2018 Microchip Technology Inc. and its subsidiaries. - * - * \asf_license_start - * - * \page License - * - * Subject to your compliance with these terms, you may use Microchip - * software and any derivatives exclusively with Microchip products. - * It is your responsibility to comply with third party license terms applicable - * to your use of third party software (including open source software) that - * may accompany Microchip software. - * - * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, - * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, - * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, - * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE - * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL - * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE - * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE - * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT - * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY - * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY, - * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE. - * - * \asf_license_stop - * - */ - -#ifndef _HPL_ADC_ASYNC_H_INCLUDED -#define _HPL_ADC_ASYNC_H_INCLUDED - -/** - * \addtogroup HPL ADC - * - * \section hpl_async_adc_rev Revision History - * - v1.0.0 Initial Release - * - *@{ - */ - -#include "hpl_adc_sync.h" -#include "hpl_irq.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief ADC device structure - * - * The ADC device structure forward declaration. - */ -struct _adc_async_device; - -/** - * \brief ADC callback types - */ -enum _adc_async_callback_type { ADC_ASYNC_DEVICE_CONVERT_CB, ADC_ASYNC_DEVICE_MONITOR_CB, ADC_ASYNC_DEVICE_ERROR_CB }; - -/** - * \brief ADC interrupt callbacks - */ -struct _adc_async_callbacks { - void (*window_cb)(struct _adc_async_device *device, const uint8_t channel); - void (*error_cb)(struct _adc_async_device *device, const uint8_t channel); -}; - -/** - * \brief ADC channel interrupt callbacks - */ -struct _adc_async_ch_callbacks { - void (*convert_done)(struct _adc_async_device *device, const uint8_t channel, const uint16_t data); -}; - -/** - * \brief ADC descriptor device structure - */ -struct _adc_async_device { - struct _adc_async_callbacks adc_async_cb; - struct _adc_async_ch_callbacks adc_async_ch_cb; - struct _irq_descriptor irq; - void * hw; -}; - -/** - * \name HPL functions - */ -//@{ -/** - * \brief Initialize synchronous ADC - * - * This function does low level ADC configuration. - * - * param[in] device The pointer to ADC device instance - * param[in] hw The pointer to hardware instance - * - * \return Initialization status - */ -int32_t _adc_async_init(struct _adc_async_device *const device, void *const hw); - -/** - * \brief Deinitialize ADC - * - * \param[in] device The pointer to ADC device instance - */ -void _adc_async_deinit(struct _adc_async_device *const device); - -/** - * \brief Enable ADC peripheral - * - * \param[in] device The pointer to ADC device instance - * \param[in] channel Channel number - */ -void _adc_async_enable_channel(struct _adc_async_device *const device, const uint8_t channel); - -/** - * \brief Disable ADC peripheral - * - * \param[in] device The pointer to ADC device instance - * \param[in] channel Channel number - */ -void _adc_async_disable_channel(struct _adc_async_device *const device, const uint8_t channel); - -/** - * \brief Retrieve ADC conversion data size - * - * \param[in] device The pointer to ADC device instance - * - * \return The data size in bytes - */ -uint8_t _adc_async_get_data_size(const struct _adc_async_device *const device); - -/** - * \brief Check if conversion is done - * - * \param[in] device The pointer to ADC device instance - * \param[in] channel Channel number - * - * \return The status of conversion - * \retval true The conversion is done - * \retval false The conversion is not done - */ -bool _adc_async_is_channel_conversion_done(const struct _adc_async_device *const device, const uint8_t channel); - -/** - * \brief Make conversion - * - * \param[in] device The pointer to ADC device instance - */ -void _adc_async_convert(struct _adc_async_device *const device); - -/** - * \brief Retrieve the conversion result - * - * \param[in] device The pointer to ADC device instance - * \param[in] channel Channel number - * - * The result value - */ -uint16_t _adc_async_read_channel_data(const struct _adc_async_device *const device, const uint8_t channel); - -/** - * \brief Set reference source - * - * \param[in] device The pointer to ADC device instance - * \param[in] reference A reference source to set - */ -void _adc_async_set_reference_source(struct _adc_async_device *const device, const adc_reference_t reference); - -/** - * \brief Set resolution - * - * \param[in] device The pointer to ADC device instance - * \param[in] resolution A resolution to set - */ -void _adc_async_set_resolution(struct _adc_async_device *const device, const adc_resolution_t resolution); - -/** - * \brief Set ADC input source of a channel - * - * \param[in] device The pointer to ADC device instance - * \param[in] pos_input A positive input source to set - * \param[in] neg_input A negative input source to set - * \param[in] channel Channel number - */ -void _adc_async_set_inputs(struct _adc_async_device *const device, const adc_pos_input_t pos_input, - const adc_neg_input_t neg_input, const uint8_t channel); - -/** - * \brief Set conversion mode - * - * \param[in] device The pointer to ADC device instance - * \param[in] mode A conversion mode to set - */ -void _adc_async_set_conversion_mode(struct _adc_async_device *const device, const enum adc_conversion_mode mode); - -/** - * \brief Set differential mode - * - * \param[in] device The pointer to ADC device instance - * \param[in] channel Channel number - * \param[in] mode A differential mode to set - */ -void _adc_async_set_channel_differential_mode(struct _adc_async_device *const device, const uint8_t channel, - const enum adc_differential_mode mode); - -/** - * \brief Set gain - * - * \param[in] device The pointer to ADC device instance - * \param[in] channel Channel number - * \param[in] gain A gain to set - */ -void _adc_async_set_channel_gain(struct _adc_async_device *const device, const uint8_t channel, const adc_gain_t gain); - -/** - * \brief Set window mode - * - * \param[in] device The pointer to ADC device instance - * \param[in] mode A mode to set - */ -void _adc_async_set_window_mode(struct _adc_async_device *const device, const adc_window_mode_t mode); - -/** - * \brief Set lower threshold - * - * \param[in] device The pointer to ADC device instance - * \param[in] low_threshold A lower threshold to set - * \param[in] up_threshold An upper thresholds to set - */ -void _adc_async_set_thresholds(struct _adc_async_device *const device, const adc_threshold_t low_threshold, - const adc_threshold_t up_threshold); - -/** - * \brief Retrieve threshold state - * - * \param[in] device The pointer to ADC device instance - * \param[out] state The threshold state - */ -void _adc_async_get_threshold_state(const struct _adc_async_device *const device, adc_threshold_status_t *const state); - -/** - * \brief Enable/disable ADC channel interrupt - * - * \param[in] device The pointer to ADC device instance - * \param[in] channel Channel number - * \param[in] type The type of interrupt to disable/enable if applicable - * \param[in] state Enable or disable - */ -void _adc_async_set_irq_state(struct _adc_async_device *const device, const uint8_t channel, - const enum _adc_async_callback_type type, const bool state); - -//@} - -#ifdef __cplusplus -} -#endif -/**@}*/ -#endif /* _HPL_ADC_ASYNC_H_INCLUDED */ diff --git a/watch-library/hal/include/hpl_adc_dma.h b/watch-library/hal/include/hpl_adc_dma.h deleted file mode 100644 index bb3a054..0000000 --- a/watch-library/hal/include/hpl_adc_dma.h +++ /dev/null @@ -1,243 +0,0 @@ -/** - * \file - * - * \brief ADC related functionality declaration. - * - * Copyright (c) 2016-2018 Microchip Technology Inc. and its subsidiaries. - * - * \asf_license_start - * - * \page License - * - * Subject to your compliance with these terms, you may use Microchip - * software and any derivatives exclusively with Microchip products. - * It is your responsibility to comply with third party license terms applicable - * to your use of third party software (including open source software) that - * may accompany Microchip software. - * - * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, - * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, - * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, - * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE - * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL - * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE - * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE - * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT - * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY - * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY, - * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE. - * - * \asf_license_stop - * - */ - -#ifndef _HPL_ADC_DMA_H_INCLUDED -#define _HPL_ADC_DMA_H_INCLUDED - -/** - * \addtogroup HPL ADC - * - * \section hpl_dma_adc_rev Revision History - * - v1.0.0 Initial Release - * - *@{ - */ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief ADC device structure - * - * The ADC device structure forward declaration. - */ -struct _adc_dma_device; - -/** - * \brief ADC callback types - */ -enum _adc_dma_callback_type { ADC_DMA_DEVICE_COMPLETE_CB, ADC_DMA_DEVICE_ERROR_CB }; - -/** - * \brief ADC interrupt callbacks - */ -struct _adc_dma_callbacks { - void (*complete)(struct _adc_dma_device *device, const uint16_t data); - void (*error)(struct _adc_dma_device *device); -}; - -/** - * \brief ADC descriptor device structure - */ -struct _adc_dma_device { - struct _adc_dma_callbacks adc_dma_cb; - struct _irq_descriptor irq; - void * hw; -}; - -/** - * \name HPL functions - */ -//@{ -/** - * \brief Initialize synchronous ADC - * - * This function does low level ADC configuration. - * - * param[in] device The pointer to ADC device instance - * param[in] hw The pointer to hardware instance - * - * \return Initialization status - */ -int32_t _adc_dma_init(struct _adc_dma_device *const device, void *const hw); - -/** - * \brief Deinitialize ADC - * - * \param[in] device The pointer to ADC device instance - */ -void _adc_dma_deinit(struct _adc_dma_device *const device); - -/** - * \brief Enable ADC peripheral - * - * \param[in] device The pointer to ADC device instance - * \param[in] channel Channel number - */ -void _adc_dma_enable_channel(struct _adc_dma_device *const device, const uint8_t channel); - -/** - * \brief Disable ADC peripheral - * - * \param[in] device The pointer to ADC device instance - * \param[in] channel Channel number - */ -void _adc_dma_disable_channel(struct _adc_dma_device *const device, const uint8_t channel); - -/** - * \brief Return address of ADC DMA source - * - * \param[in] device The pointer to ADC device instance - * - * \return ADC DMA source address - */ -uint32_t _adc_get_source_for_dma(struct _adc_dma_device *const device); - -/** - * \brief Retrieve ADC conversion data size - * - * \param[in] device The pointer to ADC device instance - * - * \return The data size in bytes - */ -uint8_t _adc_dma_get_data_size(const struct _adc_dma_device *const device); - -/** - * \brief Check if conversion is done - * - * \param[in] device The pointer to ADC device instance - * - * \return The status of conversion - * \retval true The conversion is done - * \retval false The conversion is not done - */ -bool _adc_dma_is_conversion_done(const struct _adc_dma_device *const device); - -/** - * \brief Make conversion - * - * \param[in] device The pointer to ADC device instance - */ -void _adc_dma_convert(struct _adc_dma_device *const device); - -/** - * \brief Set reference source - * - * \param[in] device The pointer to ADC device instance - * \param[in] reference A reference source to set - */ -void _adc_dma_set_reference_source(struct _adc_dma_device *const device, const adc_reference_t reference); - -/** - * \brief Set resolution - * - * \param[in] device The pointer to ADC device instance - * \param[in] resolution A resolution to set - */ -void _adc_dma_set_resolution(struct _adc_dma_device *const device, const adc_resolution_t resolution); - -/** - * \brief Set ADC input source of a channel - * - * \param[in] device The pointer to ADC device instance - * \param[in] pos_input A positive input source to set - * \param[in] neg_input A negative input source to set - * \param[in] channel Channel number - */ -void _adc_dma_set_inputs(struct _adc_dma_device *const device, const adc_pos_input_t pos_input, - const adc_neg_input_t neg_input, const uint8_t channel); - -/** - * \brief Set conversion mode - * - * \param[in] device The pointer to ADC device instance - * \param[in] mode A conversion mode to set - */ -void _adc_dma_set_conversion_mode(struct _adc_dma_device *const device, const enum adc_conversion_mode mode); - -/** - * \brief Set differential mode - * - * \param[in] device The pointer to ADC device instance - * \param[in] channel Channel number - * \param[in] mode A differential mode to set - */ -void _adc_dma_set_channel_differential_mode(struct _adc_dma_device *const device, const uint8_t channel, - const enum adc_differential_mode mode); - -/** - * \brief Set gain - * - * \param[in] device The pointer to ADC device instance - * \param[in] channel Channel number - * \param[in] gain A gain to set - */ -void _adc_dma_set_channel_gain(struct _adc_dma_device *const device, const uint8_t channel, const adc_gain_t gain); - -/** - * \brief Set window mode - * - * \param[in] device The pointer to ADC device instance - * \param[in] mode A mode to set - */ -void _adc_dma_set_window_mode(struct _adc_dma_device *const device, const adc_window_mode_t mode); - -/** - * \brief Set thresholds - * - * \param[in] device The pointer to ADC device instance - * \param[in] low_threshold A lower thresholds to set - * \param[in] up_threshold An upper thresholds to set - */ -void _adc_dma_set_thresholds(struct _adc_dma_device *const device, const adc_threshold_t low_threshold, - const adc_threshold_t up_threshold); - -/** - * \brief Retrieve threshold state - * - * \param[in] device The pointer to ADC device instance - * \param[out] state The threshold state - */ -void _adc_dma_get_threshold_state(const struct _adc_dma_device *const device, adc_threshold_status_t *const state); - -//@} - -#ifdef __cplusplus -} -#endif -/**@}*/ -#endif /* _HPL_ADC_DMA_H_INCLUDED */ diff --git a/watch-library/hal/include/hpl_adc_sync.h b/watch-library/hal/include/hpl_adc_sync.h deleted file mode 100644 index 3bfbc61..0000000 --- a/watch-library/hal/include/hpl_adc_sync.h +++ /dev/null @@ -1,271 +0,0 @@ -/** - * \file - * - * \brief ADC related functionality declaration. - * - * Copyright (c) 2014-2018 Microchip Technology Inc. and its subsidiaries. - * - * \asf_license_start - * - * \page License - * - * Subject to your compliance with these terms, you may use Microchip - * software and any derivatives exclusively with Microchip products. - * It is your responsibility to comply with third party license terms applicable - * to your use of third party software (including open source software) that - * may accompany Microchip software. - * - * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, - * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, - * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, - * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE - * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL - * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE - * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE - * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT - * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY - * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY, - * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE. - * - * \asf_license_stop - * - */ - -#ifndef _HPL_ADC_SYNC_H_INCLUDED -#define _HPL_ADC_SYNC_H_INCLUDED - -/** - * \addtogroup HPL ADC - * - * \section hpl_adc_sync_rev Revision History - * - v1.0.0 Initial Release - * - *@{ - */ - -#include "compiler.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief ADC reference source - */ -typedef uint8_t adc_reference_t; - -/** - * \brief ADC resolution - */ -typedef uint8_t adc_resolution_t; - -/** - * \brief ADC positive input for channel - */ -typedef uint8_t adc_pos_input_t; - -/** - * \brief ADC negative input for channel - */ -typedef uint8_t adc_neg_input_t; - -/** - * \brief ADC threshold - */ -typedef uint16_t adc_threshold_t; - -/** - * \brief ADC gain - */ -typedef uint8_t adc_gain_t; - -/** - * \brief ADC conversion mode - */ -enum adc_conversion_mode { ADC_CONVERSION_MODE_SINGLE_CONVERSION = 0, ADC_CONVERSION_MODE_FREERUN }; - -/** - * \brief ADC differential mode - */ -enum adc_differential_mode { ADC_DIFFERENTIAL_MODE_SINGLE_ENDED = 0, ADC_DIFFERENTIAL_MODE_DIFFERENTIAL }; - -/** - * \brief ADC window mode - */ -typedef uint8_t adc_window_mode_t; - -/** - * \brief ADC threshold status - */ -typedef bool adc_threshold_status_t; - -/** - * \brief ADC sync descriptor device structure - */ -struct _adc_sync_device { - void *hw; -}; - -/** - * \name HPL functions - */ -//@{ -/** - * \brief Initialize synchronous ADC - * - * This function does low level ADC configuration. - * - * param[in] device The pointer to ADC device instance - * param[in] hw The pointer to hardware instance - * - * \return Initialization status - */ -int32_t _adc_sync_init(struct _adc_sync_device *const device, void *const hw); - -/** - * \brief Deinitialize ADC - * - * \param[in] device The pointer to ADC device instance - */ -void _adc_sync_deinit(struct _adc_sync_device *const device); - -/** - * \brief Enable ADC - * - * \param[in] device The pointer to ADC device instance - * \param[in] channel Channel number - */ -void _adc_sync_enable_channel(struct _adc_sync_device *const device, const uint8_t channel); - -/** - * \brief Disable ADC - * - * \param[in] device The pointer to ADC device instance - * \param[in] channel Channel number - */ -void _adc_sync_disable_channel(struct _adc_sync_device *const device, const uint8_t channel); - -/** - * \brief Retrieve ADC conversion data size - * - * \param[in] device The pointer to ADC device instance - * - * \return The data size in bytes - */ -uint8_t _adc_sync_get_data_size(const struct _adc_sync_device *const device); - -/** - * \brief Check if conversion is done - * - * \param[in] device The pointer to ADC device instance - * \param[in] channel Channel number - * - * \return The status of conversion - * \retval true The conversion is done - * \retval false The conversion is not done - */ -bool _adc_sync_is_channel_conversion_done(const struct _adc_sync_device *const device, const uint8_t channel); - -/** - * \brief Make conversion - * - * \param[in] device The pointer to ADC device instance - */ -void _adc_sync_convert(struct _adc_sync_device *const device); - -/** - * \brief Retrieve the conversion result - * - * \param[in] device The pointer to ADC device instance - * \param[in] channel Channel number - * - * \return The result value of channel - */ -uint16_t _adc_sync_read_channel_data(const struct _adc_sync_device *const device, const uint8_t channel); - -/** - * \brief Set reference source - * - * \param[in] device The pointer to ADC device instance - * \param[in] reference A reference source to set - */ -void _adc_sync_set_reference_source(struct _adc_sync_device *const device, const adc_reference_t reference); - -/** - * \brief Set resolution - * - * \param[in] device The pointer to ADC device instance - * \param[in] resolution A resolution to set - */ -void _adc_sync_set_resolution(struct _adc_sync_device *const device, const adc_resolution_t resolution); - -/** - * \brief Set ADC input source of a channel - * - * \param[in] device The pointer to ADC device instance - * \param[in] pos_input A positive input source to set - * \param[in] neg_input A negative input source to set - * \param[in] channel Channel number - */ -void _adc_sync_set_inputs(struct _adc_sync_device *const device, const adc_pos_input_t pos_input, - const adc_neg_input_t neg_input, const uint8_t channel); - -/** - * \brief Set conversion mode - * - * \param[in] device The pointer to ADC device instance - * \param[in] mode A conversion mode to set - */ -void _adc_sync_set_conversion_mode(struct _adc_sync_device *const device, const enum adc_conversion_mode mode); - -/** - * \brief Set differential mode - * - * \param[in] device The pointer to ADC device instance - * \param[in] channel Channel number - * \param[in] mode A differential mode to set - */ -void _adc_sync_set_channel_differential_mode(struct _adc_sync_device *const device, const uint8_t channel, - const enum adc_differential_mode mode); - -/** - * \brief Set gain - * - * \param[in] device The pointer to ADC device instance - * \param[in] channel Channel number - * \param[in] gain A gain to set - */ -void _adc_sync_set_channel_gain(struct _adc_sync_device *const device, const uint8_t channel, const adc_gain_t gain); - -/** - * \brief Set window mode - * - * \param[in] device The pointer to ADC device instance - * \param[in] mode A mode to set - */ -void _adc_sync_set_window_mode(struct _adc_sync_device *const device, const adc_window_mode_t mode); - -/** - * \brief Set threshold - * - * \param[in] device The pointer to ADC device instance - * \param[in] low_threshold A lower threshold to set - * \param[in] up_threshold An upper thresholds to set - */ -void _adc_sync_set_thresholds(struct _adc_sync_device *const device, const adc_threshold_t low_threshold, - const adc_threshold_t up_threshold); - -/** - * \brief Retrieve threshold state - * - * \param[in] device The pointer to ADC device instance - * \param[out] state The threshold state - */ -void _adc_sync_get_threshold_state(const struct _adc_sync_device *const device, adc_threshold_status_t *const state); -//@} - -#ifdef __cplusplus -} -#endif -/**@}*/ -#endif /* _HPL_ADC_SYNC_H_INCLUDED */ diff --git a/watch-library/hal/include/hpl_pwm.h b/watch-library/hal/include/hpl_pwm.h deleted file mode 100644 index ea056de..0000000 --- a/watch-library/hal/include/hpl_pwm.h +++ /dev/null @@ -1,105 +0,0 @@ -/** - * \file - * - * \brief PWM related functionality declaration. - * - * Copyright (c) 2014-2018 Microchip Technology Inc. and its subsidiaries. - * - * \asf_license_start - * - * \page License - * - * Subject to your compliance with these terms, you may use Microchip - * software and any derivatives exclusively with Microchip products. - * It is your responsibility to comply with third party license terms applicable - * to your use of third party software (including open source software) that - * may accompany Microchip software. - * - * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, - * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, - * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, - * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE - * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL - * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE - * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE - * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT - * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY - * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY, - * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE. - * - * \asf_license_stop - * - */ -#ifndef _HPL_PWM_H_INCLUDED -#define _HPL_PWM_H_INCLUDED - -/** - * \addtogroup HPL PWM - * - * \section hpl_pwm_rev Revision History - * - v1.0.0 Initial Release - * - *@{ - */ - -#include -#include "hpl_irq.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \brief PWM callback types - */ -enum _pwm_callback_type { PWM_DEVICE_PERIOD_CB, PWM_DEVICE_ERROR_CB }; - -/** - * \brief PWM pulse-width period - */ -typedef uint32_t pwm_period_t; - -/** - * \brief PWM device structure - * - * The PWM device structure forward declaration. - */ -struct _pwm_device; - -/** - * \brief PWM interrupt callbacks - */ -struct _pwm_callback { - void (*pwm_period_cb)(struct _pwm_device *device); - void (*pwm_error_cb)(struct _pwm_device *device); -}; - -/** - * \brief PWM descriptor device structure - */ -struct _pwm_device { - struct _pwm_callback callback; - struct _irq_descriptor irq; - void * hw; -}; - -/** - * \brief PWM functions, pointers to low-level functions - */ -struct _pwm_hpl_interface { - int32_t (*init)(struct _pwm_device *const device, void *const hw); - void (*deinit)(struct _pwm_device *const device); - void (*start_pwm)(struct _pwm_device *const device); - void (*stop_pwm)(struct _pwm_device *const device); - void (*set_pwm_param)(struct _pwm_device *const device, const pwm_period_t period, const pwm_period_t duty_cycle); - bool (*is_pwm_enabled)(const struct _pwm_device *const device); - pwm_period_t (*pwm_get_period)(const struct _pwm_device *const device); - uint32_t (*pwm_get_duty)(const struct _pwm_device *const device); - void (*set_irq_state)(struct _pwm_device *const device, const enum _pwm_callback_type type, const bool disable); -}; - -#ifdef __cplusplus -} -#endif -/**@}*/ -#endif /* _HPL_PWM_H_INCLUDED */ diff --git a/watch-library/hal/src/hal_adc_sync.c b/watch-library/hal/src/hal_adc_sync.c deleted file mode 100644 index 8d2e872..0000000 --- a/watch-library/hal/src/hal_adc_sync.c +++ /dev/null @@ -1,245 +0,0 @@ -/** - * \file - * - * \brief ADC functionality implementation. - * - * Copyright (c) 2014-2018 Microchip Technology Inc. and its subsidiaries. - * - * \asf_license_start - * - * \page License - * - * Subject to your compliance with these terms, you may use Microchip - * software and any derivatives exclusively with Microchip products. - * It is your responsibility to comply with third party license terms applicable - * to your use of third party software (including open source software) that - * may accompany Microchip software. - * - * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, - * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, - * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, - * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE - * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL - * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE - * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE - * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT - * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY - * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY, - * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE. - * - * \asf_license_stop - * - */ - -/** - * \brief Indicates HAL being compiled. Must be defined before including. - */ -#define _COMPILING_HAL - -#include "hal_adc_sync.h" -#include - -/** - * \brief Driver version - */ -#define DRIVER_VERSION 0x00000001u - -/** - * \brief Maximum amount of ADC interface instances - */ -#define MAX_ADC_AMOUNT ADC_INST_NUM - -/** - * \brief Initialize ADC - */ -int32_t adc_sync_init(struct adc_sync_descriptor *const descr, void *const hw, void *const func) -{ - ASSERT(descr && hw); - (void)func; - - return _adc_sync_init(&descr->device, hw); -} - -/** - * \brief Deinitialize ADC - */ -int32_t adc_sync_deinit(struct adc_sync_descriptor *const descr) -{ - ASSERT(descr); - _adc_sync_deinit(&descr->device); - - return ERR_NONE; -} - -/** - * \brief Enable ADC - */ -int32_t adc_sync_enable_channel(struct adc_sync_descriptor *const descr, const uint8_t channel) -{ - ASSERT(descr); - _adc_sync_enable_channel(&descr->device, channel); - - return ERR_NONE; -} - -/** - * \brief Disable ADC - */ -int32_t adc_sync_disable_channel(struct adc_sync_descriptor *const descr, const uint8_t channel) -{ - ASSERT(descr); - _adc_sync_disable_channel(&descr->device, channel); - return ERR_NONE; -} - -/* - * \brief Read data from ADC - */ -int32_t adc_sync_read_channel(struct adc_sync_descriptor *const descr, const uint8_t channel, uint8_t *const buffer, - const uint16_t length) -{ - uint8_t data_size; - uint16_t offset = 0; - - ASSERT(descr && buffer && length); - data_size = _adc_sync_get_data_size(&descr->device); - ASSERT(!(length % data_size)); - - do { - uint16_t result; - _adc_sync_convert(&descr->device); - - while (!_adc_sync_is_channel_conversion_done(&descr->device, channel)) - ; - - result = _adc_sync_read_channel_data(&descr->device, channel); - buffer[offset] = result; - if (1 < data_size) { - buffer[offset + 1] = result >> 8; - } - offset += data_size; - } while (offset < length); - - return offset; -} - -/** - * \brief Set ADC reference source - */ -int32_t adc_sync_set_reference(struct adc_sync_descriptor *const descr, const adc_reference_t reference) -{ - ASSERT(descr); - _adc_sync_set_reference_source(&descr->device, reference); - - return ERR_NONE; -} - -/** - * \brief Set ADC resolution - */ -int32_t adc_sync_set_resolution(struct adc_sync_descriptor *const descr, const adc_resolution_t resolution) -{ - ASSERT(descr); - _adc_sync_set_resolution(&descr->device, resolution); - - return ERR_NONE; -} - -/** - * \brief Set ADC input source of a channel - */ -int32_t adc_sync_set_inputs(struct adc_sync_descriptor *const descr, const adc_pos_input_t pos_input, - const adc_neg_input_t neg_input, const uint8_t channel) -{ - ASSERT(descr); - _adc_sync_set_inputs(&descr->device, pos_input, neg_input, channel); - - return ERR_NONE; -} - -/** - * \brief Set ADC thresholds - */ -int32_t adc_sync_set_thresholds(struct adc_sync_descriptor *const descr, const adc_threshold_t low_threshold, - const adc_threshold_t up_threshold) -{ - ASSERT(descr); - _adc_sync_set_thresholds(&descr->device, low_threshold, up_threshold); - - return ERR_NONE; -} - -/** - * \brief Set ADC gain - */ -int32_t adc_sync_set_channel_gain(struct adc_sync_descriptor *const descr, const uint8_t channel, const adc_gain_t gain) -{ - ASSERT(descr); - _adc_sync_set_channel_gain(&descr->device, channel, gain); - - return ERR_NONE; -} - -/** - * \brief Set ADC conversion mode - */ -int32_t adc_sync_set_conversion_mode(struct adc_sync_descriptor *const descr, const enum adc_conversion_mode mode) -{ - ASSERT(descr); - _adc_sync_set_conversion_mode(&descr->device, mode); - - return ERR_NONE; -} - -/** - * \brief Set ADC differential mode - */ -int32_t adc_sync_set_channel_differential_mode(struct adc_sync_descriptor *const descr, const uint8_t channel, - const enum adc_differential_mode mode) -{ - ASSERT(descr); - _adc_sync_set_channel_differential_mode(&descr->device, channel, mode); - - return ERR_NONE; -} - -/** - * \brief Set ADC window mode - */ -int32_t adc_sync_set_window_mode(struct adc_sync_descriptor *const descr, const adc_window_mode_t mode) -{ - ASSERT(descr); - _adc_sync_set_window_mode(&descr->device, mode); - - return ERR_NONE; -} - -/** - * \brief Retrieve threshold state - */ -int32_t adc_sync_get_threshold_state(const struct adc_sync_descriptor *const descr, adc_threshold_status_t *const state) -{ - ASSERT(descr && state); - _adc_sync_get_threshold_state(&descr->device, state); - - return ERR_NONE; -} - -/** - * \brief Check if conversion is complete - */ -int32_t adc_sync_is_channel_conversion_complete(const struct adc_sync_descriptor *const descr, const uint8_t channel) -{ - ASSERT(descr); - return _adc_sync_is_channel_conversion_done(&descr->device, channel); -} - -/** - * \brief Retrieve the current driver version - */ -uint32_t adc_sync_get_version(void) -{ - return DRIVER_VERSION; -} - -//@} diff --git a/watch-library/hal/src/hal_pwm.c b/watch-library/hal/src/hal_pwm.c deleted file mode 100644 index bc0629f..0000000 --- a/watch-library/hal/src/hal_pwm.c +++ /dev/null @@ -1,160 +0,0 @@ -/** - * \file - * - * \brief PWM functionality implementation. - * - * Copyright (c) 2015-2018 Microchip Technology Inc. and its subsidiaries. - * - * \asf_license_start - * - * \page License - * - * Subject to your compliance with these terms, you may use Microchip - * software and any derivatives exclusively with Microchip products. - * It is your responsibility to comply with third party license terms applicable - * to your use of third party software (including open source software) that - * may accompany Microchip software. - * - * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, - * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, - * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, - * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE - * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL - * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE - * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE - * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT - * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY - * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY, - * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE. - * - * \asf_license_stop - * - */ - -#include "hal_pwm.h" -#include -#include - -/** - * \brief Driver version - */ -#define DRIVER_VERSION 0x00000001u - -static void pwm_period_expired(struct _pwm_device *device); -static void pwm_detect_fault(struct _pwm_device *device); - -/** - * \brief Initialize pwm - */ -int32_t pwm_init(struct pwm_descriptor *const descr, void *const hw, struct _pwm_hpl_interface *const func) -{ - ASSERT(descr && hw && func); - descr->func = func; - descr->func->init(&descr->device, hw); - descr->device.callback.pwm_period_cb = pwm_period_expired; - descr->device.callback.pwm_error_cb = pwm_detect_fault; - return ERR_NONE; -} - -/** - * \brief Deinitialize pwm - */ -int32_t pwm_deinit(struct pwm_descriptor *const descr) -{ - ASSERT(descr && descr->func); - descr->func->deinit(&descr->device); - - return ERR_NONE; -} - -/** - * \brief Start pwm - */ -int32_t pwm_enable(struct pwm_descriptor *const descr) -{ - ASSERT(descr && descr->func); - if (descr->func->is_pwm_enabled(&descr->device)) { - return ERR_DENIED; - } - descr->func->start_pwm(&descr->device); - - return ERR_NONE; -} - -/** - * \brief Stop pwm - */ -int32_t pwm_disable(struct pwm_descriptor *const descr) -{ - ASSERT(descr && descr->func); - if (!descr->func->is_pwm_enabled(&descr->device)) { - return ERR_DENIED; - } - descr->func->stop_pwm(&descr->device); - - return ERR_NONE; -} - -/** - * \brief Register PWM callback - */ -int32_t pwm_register_callback(struct pwm_descriptor *const descr, enum pwm_callback_type type, pwm_cb_t cb) -{ - switch (type) { - case PWM_PERIOD_CB: - descr->pwm_cb.period = cb; - break; - - case PWM_ERROR_CB: - descr->pwm_cb.error = cb; - break; - - default: - return ERR_INVALID_ARG; - } - ASSERT(descr && descr->func); - descr->func->set_irq_state(&descr->device, (enum _pwm_callback_type)type, NULL != cb); - return ERR_NONE; -} - -/** - * \brief Change PWM parameter - */ -int32_t pwm_set_parameters(struct pwm_descriptor *const descr, const pwm_period_t period, const pwm_period_t duty_cycle) -{ - ASSERT(descr && descr->func); - descr->func->set_pwm_param(&descr->device, period, duty_cycle); - return ERR_NONE; -} - -/** - * \brief Retrieve the current driver version - */ -uint32_t pwm_get_version(void) -{ - return DRIVER_VERSION; -} - -/** - * \internal Process interrupts caused by period experied - */ -static void pwm_period_expired(struct _pwm_device *device) -{ - struct pwm_descriptor *const descr = CONTAINER_OF(device, struct pwm_descriptor, device); - - if (descr->pwm_cb.period) { - descr->pwm_cb.period(descr); - } -} - -/** - * \internal Process interrupts caused by pwm fault - */ -static void pwm_detect_fault(struct _pwm_device *device) -{ - struct pwm_descriptor *const descr = CONTAINER_OF(device, struct pwm_descriptor, device); - - if (descr->pwm_cb.error) { - descr->pwm_cb.error(descr); - } -} diff --git a/watch-library/hpl/adc/hpl_adc.c b/watch-library/hpl/adc/hpl_adc.c deleted file mode 100644 index c9db19b..0000000 --- a/watch-library/hpl/adc/hpl_adc.c +++ /dev/null @@ -1,771 +0,0 @@ - -/** - * \file - * - * \brief SAM Analog Digital Converter - * - * Copyright (c) 2015-2018 Microchip Technology Inc. and its subsidiaries. - * - * \asf_license_start - * - * \page License - * - * Subject to your compliance with these terms, you may use Microchip - * software and any derivatives exclusively with Microchip products. - * It is your responsibility to comply with third party license terms applicable - * to your use of third party software (including open source software) that - * may accompany Microchip software. - * - * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, - * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, - * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, - * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE - * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL - * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE - * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE - * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT - * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY - * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY, - * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE. - * - * \asf_license_stop - * - */ - -#include -#include -#include -#include -#include -#include - -#ifndef CONF_ADC_0_ENABLE -#define CONF_ADC_0_ENABLE 0 -#endif -#ifndef CONF_ADC_1_ENABLE -#define CONF_ADC_1_ENABLE 0 -#endif - -/** - * \brief Macro is used to fill ADC configuration structure based on its number - * - * \param[in] n The number of structures - */ -#define ADC_CONFIGURATION(n) \ - { \ - (n), \ - (CONF_ADC_##n##_RUNSTDBY << ADC_CTRLA_RUNSTDBY_Pos) | (CONF_ADC_##n##_ONDEMAND << ADC_CTRLA_ONDEMAND_Pos), \ - ADC_CTRLB_PRESCALER(CONF_ADC_##n##_PRESCALER), \ - (CONF_ADC_##n##_REFCOMP << ADC_REFCTRL_REFCOMP_Pos) | ADC_REFCTRL_REFSEL(CONF_ADC_##n##_REFSEL), \ - (CONF_ADC_##n##_WINMONEO << ADC_EVCTRL_WINMONEO_Pos) \ - | (CONF_ADC_##n##_RESRDYEO << ADC_EVCTRL_RESRDYEO_Pos) \ - | (CONF_ADC_##n##_STARTINV << ADC_EVCTRL_STARTINV_Pos) \ - | (CONF_ADC_##n##_FLUSHINV << ADC_EVCTRL_FLUSHINV_Pos) \ - | (CONF_ADC_##n##_STARTEI << ADC_EVCTRL_STARTEI_Pos) \ - | (CONF_ADC_##n##_FLUSHEI << ADC_EVCTRL_FLUSHEI_Pos), \ - ADC_INPUTCTRL_MUXNEG(CONF_ADC_##n##_MUXNEG) | ADC_INPUTCTRL_MUXPOS(CONF_ADC_##n##_MUXPOS), \ - ADC_CTRLC_WINMODE(CONF_ADC_##n##_WINMODE) | ADC_CTRLC_RESSEL(CONF_ADC_##n##_RESSEL) \ - | (CONF_ADC_##n##_CORREN << ADC_CTRLC_CORREN_Pos) | (CONF_ADC_##n##_FREERUN << ADC_CTRLC_FREERUN_Pos) \ - | (CONF_ADC_##n##_LEFTADJ << ADC_CTRLC_LEFTADJ_Pos) \ - | (CONF_ADC_##n##_DIFFMODE << ADC_CTRLC_DIFFMODE_Pos), \ - ADC_AVGCTRL_ADJRES(CONF_ADC_##n##_ADJRES) | ADC_AVGCTRL_SAMPLENUM(CONF_ADC_##n##_SAMPLENUM), \ - (CONF_ADC_##n##_OFFCOMP << ADC_SAMPCTRL_OFFCOMP_Pos) | ADC_SAMPCTRL_SAMPLEN(CONF_ADC_##n##_SAMPLEN), \ - ADC_WINLT_WINLT(CONF_ADC_##n##_WINLT), ADC_WINUT_WINUT(CONF_ADC_##n##_WINUT), \ - ADC_GAINCORR_GAINCORR(CONF_ADC_##n##_GAINCORR), ADC_OFFSETCORR_OFFSETCORR(CONF_ADC_##n##_OFFSETCORR), \ - CONF_ADC_##n##_DBGRUN << ADC_DBGCTRL_DBGRUN_Pos, ADC_SEQCTRL_SEQEN(CONF_ADC_##n##_SEQEN), \ - } - -/** - * \brief ADC configuration - */ -struct adc_configuration { - uint8_t number; - hri_adc_ctrla_reg_t ctrl_a; - hri_adc_ctrlb_reg_t ctrl_b; - hri_adc_refctrl_reg_t ref_ctrl; - hri_adc_evctrl_reg_t ev_ctrl; - hri_adc_inputctrl_reg_t input_ctrl; - hri_adc_ctrlc_reg_t ctrl_c; - hri_adc_avgctrl_reg_t avg_ctrl; - hri_adc_sampctrl_reg_t samp_ctrl; - hri_adc_winlt_reg_t win_lt; - hri_adc_winut_reg_t win_ut; - hri_adc_gaincorr_reg_t gain_corr; - hri_adc_offsetcorr_reg_t offset_corr; - hri_adc_dbgctrl_reg_t dbg_ctrl; - hri_adc_seqctrl_reg_t seq_ctrl; -}; - -#define ADC_AMOUNT (CONF_ADC_0_ENABLE + CONF_ADC_1_ENABLE) - -/** - * \brief Array of ADC configurations - */ -static const struct adc_configuration _adcs[] = { -#if CONF_ADC_0_ENABLE == 1 - ADC_CONFIGURATION(0), -#endif -#if CONF_ADC_1_ENABLE == 1 - ADC_CONFIGURATION(1), -#endif -}; - -static void _adc_set_reference_source(void *const hw, const adc_reference_t reference); - -/** - * \brief Retrieve ordinal number of the given adc hardware instance - */ -static uint8_t _adc_get_hardware_index(const void *const hw) -{ - - (void)hw; - return 0; -} - -/** \brief Return the pointer to register settings of specific ADC - * \param[in] hw_addr The hardware register base address. - * \return Pointer to register settings of specific ADC. - */ -static uint8_t _adc_get_regs(const uint32_t hw_addr) -{ - uint8_t n = _adc_get_hardware_index((const void *)hw_addr); - uint8_t i; - - for (i = 0; i < sizeof(_adcs) / sizeof(struct adc_configuration); i++) { - if (_adcs[i].number == n) { - return i; - } - } - - ASSERT(false); - return 0; -} - -/** - * \brief Retrieve IRQ number for the given hardware instance - */ -static uint8_t _adc_get_irq_num(const struct _adc_async_device *const device) -{ - - (void)device; - return ADC_IRQn; -} - -/** - * \brief Init irq param with the given afec hardware instance - */ -static void _adc_init_irq_param(const void *const hw, struct _adc_async_device *dev) -{ - (void)hw; - (void)dev; -} - -/** - * \brief Initialize ADC - * - * \param[in] hw The pointer to hardware instance - * \param[in] i The number of hardware instance - */ -static int32_t _adc_init(void *const hw, const uint8_t i) -{ - uint16_t calib_reg = 0; - calib_reg = ADC_CALIB_BIASREFBUF((*(uint32_t *)ADC_FUSES_BIASREFBUF_ADDR >> ADC_FUSES_BIASREFBUF_Pos)) - | ADC_CALIB_BIASCOMP((*(uint32_t *)ADC_FUSES_BIASCOMP_ADDR >> ADC_FUSES_BIASCOMP_Pos)); - - ASSERT(hw == ADC); - - if (!hri_adc_is_syncing(hw, ADC_SYNCBUSY_SWRST)) { - if (hri_adc_get_CTRLA_reg(hw, ADC_CTRLA_ENABLE)) { - hri_adc_clear_CTRLA_ENABLE_bit(hw); - hri_adc_wait_for_sync(hw, ADC_SYNCBUSY_ENABLE); - } - hri_adc_write_CTRLA_reg(hw, ADC_CTRLA_SWRST); - } - hri_adc_wait_for_sync(hw, ADC_SYNCBUSY_SWRST); - - hri_adc_write_CALIB_reg(hw, calib_reg); - hri_adc_write_CTRLB_reg(hw, _adcs[i].ctrl_b); - hri_adc_write_REFCTRL_reg(hw, _adcs[i].ref_ctrl); - hri_adc_write_EVCTRL_reg(hw, _adcs[i].ev_ctrl); - hri_adc_write_INPUTCTRL_reg(hw, _adcs[i].input_ctrl); - hri_adc_write_CTRLC_reg(hw, _adcs[i].ctrl_c); - hri_adc_write_AVGCTRL_reg(hw, _adcs[i].avg_ctrl); - hri_adc_write_SAMPCTRL_reg(hw, _adcs[i].samp_ctrl); - hri_adc_write_WINLT_reg(hw, _adcs[i].win_lt); - hri_adc_write_WINUT_reg(hw, _adcs[i].win_ut); - hri_adc_write_GAINCORR_reg(hw, _adcs[i].gain_corr); - hri_adc_write_OFFSETCORR_reg(hw, _adcs[i].offset_corr); - hri_adc_write_DBGCTRL_reg(hw, _adcs[i].dbg_ctrl); - hri_adc_write_SEQCTRL_reg(hw, _adcs[i].seq_ctrl); - hri_adc_write_CTRLA_reg(hw, _adcs[i].ctrl_a); - - return ERR_NONE; -} - -/** - * \brief De-initialize ADC - * - * \param[in] hw The pointer to hardware instance - */ -static inline void _adc_deinit(void *hw) -{ - hri_adc_clear_CTRLA_ENABLE_bit(hw); - hri_adc_set_CTRLA_SWRST_bit(hw); -} - -/** - * \brief Initialize ADC - */ -int32_t _adc_sync_init(struct _adc_sync_device *const device, void *const hw) -{ - ASSERT(device); - - device->hw = hw; - - return _adc_init(hw, _adc_get_regs((uint32_t)hw)); -} - -/** - * \brief Initialize ADC - */ -int32_t _adc_async_init(struct _adc_async_device *const device, void *const hw) -{ - int32_t init_status; - - ASSERT(device); - - init_status = _adc_init(hw, _adc_get_regs((uint32_t)hw)); - if (init_status) { - return init_status; - } - device->hw = hw; - _adc_init_irq_param(hw, device); - NVIC_DisableIRQ(_adc_get_irq_num(device)); - NVIC_ClearPendingIRQ(_adc_get_irq_num(device)); - NVIC_EnableIRQ(_adc_get_irq_num(device)); - - return ERR_NONE; -} - -/** - * \brief Initialize ADC - */ -int32_t _adc_dma_init(struct _adc_dma_device *const device, void *const hw) -{ - ASSERT(device); - - device->hw = hw; - - return _adc_init(hw, _adc_get_regs((uint32_t)hw)); -} - -/** - * \brief De-initialize ADC - */ -void _adc_sync_deinit(struct _adc_sync_device *const device) -{ - _adc_deinit(device->hw); -} - -/** - * \brief De-initialize ADC - */ -void _adc_async_deinit(struct _adc_async_device *const device) -{ - NVIC_DisableIRQ(_adc_get_irq_num(device)); - NVIC_ClearPendingIRQ(_adc_get_irq_num(device)); - - _adc_deinit(device->hw); -} - -/** - * \brief De-initialize ADC - */ -void _adc_dma_deinit(struct _adc_dma_device *const device) -{ - _adc_deinit(device->hw); -} - -/** - * \brief Enable ADC - */ -void _adc_sync_enable_channel(struct _adc_sync_device *const device, const uint8_t channel) -{ - (void)channel; - - hri_adc_set_CTRLA_ENABLE_bit(device->hw); -} - -/** - * \brief Enable ADC - */ -void _adc_async_enable_channel(struct _adc_async_device *const device, const uint8_t channel) -{ - (void)channel; - - hri_adc_set_CTRLA_ENABLE_bit(device->hw); -} - -/** - * \brief Enable ADC - */ -void _adc_dma_enable_channel(struct _adc_dma_device *const device, const uint8_t channel) -{ - (void)channel; - - hri_adc_set_CTRLA_ENABLE_bit(device->hw); -} - -/** - * \brief Disable ADC - */ -void _adc_sync_disable_channel(struct _adc_sync_device *const device, const uint8_t channel) -{ - (void)channel; - - hri_adc_clear_CTRLA_ENABLE_bit(device->hw); -} - -/** - * \brief Disable ADC - */ -void _adc_async_disable_channel(struct _adc_async_device *const device, const uint8_t channel) -{ - (void)channel; - - hri_adc_clear_CTRLA_ENABLE_bit(device->hw); -} - -/** - * \brief Disable ADC - */ -void _adc_dma_disable_channel(struct _adc_dma_device *const device, const uint8_t channel) -{ - (void)channel; - - hri_adc_clear_CTRLA_ENABLE_bit(device->hw); -} - -/** - * \brief Return address of ADC DMA source - */ -uint32_t _adc_get_source_for_dma(struct _adc_dma_device *const device) -{ - return (uint32_t) & (((Adc *)(device->hw))->RESULT.reg); -} - -/** - * \brief Retrieve ADC conversion data size - */ -uint8_t _adc_sync_get_data_size(const struct _adc_sync_device *const device) -{ - return hri_adc_read_CTRLC_RESSEL_bf(device->hw) == ADC_CTRLC_RESSEL_8BIT_Val ? 1 : 2; -} - -/** - * \brief Retrieve ADC conversion data size - */ -uint8_t _adc_async_get_data_size(const struct _adc_async_device *const device) -{ - return hri_adc_read_CTRLC_RESSEL_bf(device->hw) == ADC_CTRLC_RESSEL_8BIT_Val ? 1 : 2; -} - -/** - * \brief Retrieve ADC conversion data size - */ -uint8_t _adc_dma_get_data_size(const struct _adc_dma_device *const device) -{ - return hri_adc_read_CTRLC_RESSEL_bf(device->hw) == ADC_CTRLC_RESSEL_8BIT_Val ? 1 : 2; -} - -/** - * \brief Check if conversion is done - */ -bool _adc_sync_is_channel_conversion_done(const struct _adc_sync_device *const device, const uint8_t channel) -{ - (void)channel; - - return hri_adc_get_interrupt_RESRDY_bit(device->hw); -} - -/** - * \brief Check if conversion is done - */ -bool _adc_async_is_channel_conversion_done(const struct _adc_async_device *const device, const uint8_t channel) -{ - (void)channel; - - return hri_adc_get_interrupt_RESRDY_bit(device->hw); -} - -/** - * \brief Check if conversion is done - */ -bool _adc_dma_is_conversion_done(const struct _adc_dma_device *const device) -{ - return hri_adc_get_interrupt_RESRDY_bit(device->hw); -} - -/** - * \brief Make conversion - */ -void _adc_sync_convert(struct _adc_sync_device *const device) -{ - hri_adc_set_SWTRIG_START_bit(device->hw); -} - -/** - * \brief Make conversion - */ -void _adc_async_convert(struct _adc_async_device *const device) -{ - hri_adc_set_SWTRIG_START_bit(device->hw); -} - -/** - * \brief Make conversion - */ -void _adc_dma_convert(struct _adc_dma_device *const device) -{ - hri_adc_set_SWTRIG_START_bit(device->hw); -} - -/** - * \brief Retrieve the conversion result - */ -uint16_t _adc_sync_read_channel_data(const struct _adc_sync_device *const device, const uint8_t channel) -{ - (void)channel; - - return hri_adc_read_RESULT_reg(device->hw); -} - -/** - * \brief Retrieve the conversion result - */ -uint16_t _adc_async_read_channel_data(const struct _adc_async_device *const device, const uint8_t channel) -{ - (void)channel; - - return hri_adc_read_RESULT_reg(device->hw); -} - -/** - * \brief Set reference source - */ -void _adc_sync_set_reference_source(struct _adc_sync_device *const device, const adc_reference_t reference) -{ - _adc_set_reference_source(device->hw, reference); -} - -/** - * \brief Set reference source - */ -void _adc_async_set_reference_source(struct _adc_async_device *const device, const adc_reference_t reference) -{ - _adc_set_reference_source(device->hw, reference); -} - -/** - * \brief Set reference source - */ -void _adc_dma_set_reference_source(struct _adc_dma_device *const device, const adc_reference_t reference) -{ - _adc_set_reference_source(device->hw, reference); -} - -/** - * \brief Set resolution - */ -void _adc_sync_set_resolution(struct _adc_sync_device *const device, const adc_resolution_t resolution) -{ - hri_adc_write_CTRLC_RESSEL_bf(device->hw, resolution); -} - -/** - * \brief Set resolution - */ -void _adc_async_set_resolution(struct _adc_async_device *const device, const adc_resolution_t resolution) -{ - hri_adc_write_CTRLC_RESSEL_bf(device->hw, resolution); -} - -/** - * \brief Set resolution - */ -void _adc_dma_set_resolution(struct _adc_dma_device *const device, const adc_resolution_t resolution) -{ - hri_adc_write_CTRLC_RESSEL_bf(device->hw, resolution); -} - -/** - * \brief Set channels input sources - */ -void _adc_sync_set_inputs(struct _adc_sync_device *const device, const adc_pos_input_t pos_input, - const adc_neg_input_t neg_input, const uint8_t channel) -{ - (void)channel; - - hri_adc_write_INPUTCTRL_MUXPOS_bf(device->hw, pos_input); - hri_adc_write_INPUTCTRL_MUXNEG_bf(device->hw, neg_input); -} - -/** - * \brief Set channels input sources - */ -void _adc_async_set_inputs(struct _adc_async_device *const device, const adc_pos_input_t pos_input, - const adc_neg_input_t neg_input, const uint8_t channel) -{ - (void)channel; - - hri_adc_write_INPUTCTRL_MUXPOS_bf(device->hw, pos_input); - hri_adc_write_INPUTCTRL_MUXNEG_bf(device->hw, neg_input); -} - -/** - * \brief Set channels input source - */ -void _adc_dma_set_inputs(struct _adc_dma_device *const device, const adc_pos_input_t pos_input, - const adc_neg_input_t neg_input, const uint8_t channel) -{ - (void)channel; - - hri_adc_write_INPUTCTRL_MUXPOS_bf(device->hw, pos_input); - hri_adc_write_INPUTCTRL_MUXNEG_bf(device->hw, neg_input); -} - -/** - * \brief Set thresholds - */ -void _adc_sync_set_thresholds(struct _adc_sync_device *const device, const adc_threshold_t low_threshold, - const adc_threshold_t up_threshold) -{ - hri_adc_write_WINLT_reg(device->hw, low_threshold); - hri_adc_write_WINUT_reg(device->hw, up_threshold); -} - -/** - * \brief Set thresholds - */ -void _adc_async_set_thresholds(struct _adc_async_device *const device, const adc_threshold_t low_threshold, - const adc_threshold_t up_threshold) -{ - hri_adc_write_WINLT_reg(device->hw, low_threshold); - hri_adc_write_WINUT_reg(device->hw, up_threshold); -} - -/** - * \brief Set thresholds - */ -void _adc_dma_set_thresholds(struct _adc_dma_device *const device, const adc_threshold_t low_threshold, - const adc_threshold_t up_threshold) -{ - hri_adc_write_WINLT_reg(device->hw, low_threshold); - hri_adc_write_WINUT_reg(device->hw, up_threshold); -} - -/** - * \brief Set gain - */ -void _adc_sync_set_channel_gain(struct _adc_sync_device *const device, const uint8_t channel, const adc_gain_t gain) -{ - (void)device, (void)channel, (void)gain; -} - -/** - * \brief Set gain - */ -void _adc_async_set_channel_gain(struct _adc_async_device *const device, const uint8_t channel, const adc_gain_t gain) -{ - (void)device, (void)channel, (void)gain; -} - -/** - * \brief Set gain - */ -void _adc_dma_set_channel_gain(struct _adc_dma_device *const device, const uint8_t channel, const adc_gain_t gain) -{ - (void)device, (void)channel, (void)gain; -} - -/** - * \brief Set conversion mode - */ -void _adc_sync_set_conversion_mode(struct _adc_sync_device *const device, const enum adc_conversion_mode mode) -{ - if (ADC_CONVERSION_MODE_FREERUN == mode) { - hri_adc_set_CTRLC_FREERUN_bit(device->hw); - } else { - hri_adc_clear_CTRLC_FREERUN_bit(device->hw); - } -} - -/** - * \brief Set conversion mode - */ -void _adc_async_set_conversion_mode(struct _adc_async_device *const device, const enum adc_conversion_mode mode) -{ - if (ADC_CONVERSION_MODE_FREERUN == mode) { - hri_adc_set_CTRLC_FREERUN_bit(device->hw); - } else { - hri_adc_clear_CTRLC_FREERUN_bit(device->hw); - } -} - -/** - * \brief Set conversion mode - */ -void _adc_dma_set_conversion_mode(struct _adc_dma_device *const device, const enum adc_conversion_mode mode) -{ - if (ADC_CONVERSION_MODE_FREERUN == mode) { - hri_adc_set_CTRLC_FREERUN_bit(device->hw); - } else { - hri_adc_clear_CTRLC_FREERUN_bit(device->hw); - } -} - -/** - * \brief Set differential mode - */ -void _adc_sync_set_channel_differential_mode(struct _adc_sync_device *const device, const uint8_t channel, - const enum adc_differential_mode mode) -{ - (void)channel; - - if (ADC_DIFFERENTIAL_MODE_DIFFERENTIAL == mode) { - hri_adc_set_CTRLC_DIFFMODE_bit(device->hw); - } else { - hri_adc_clear_CTRLC_DIFFMODE_bit(device->hw); - } -} - -/** - * \brief Set differential mode - */ -void _adc_async_set_channel_differential_mode(struct _adc_async_device *const device, const uint8_t channel, - const enum adc_differential_mode mode) -{ - (void)channel; - - if (ADC_DIFFERENTIAL_MODE_DIFFERENTIAL == mode) { - hri_adc_set_CTRLC_DIFFMODE_bit(device->hw); - } else { - hri_adc_clear_CTRLC_DIFFMODE_bit(device->hw); - } -} - -/** - * \brief Set differential mode - */ -void _adc_dma_set_channel_differential_mode(struct _adc_dma_device *const device, const uint8_t channel, - const enum adc_differential_mode mode) -{ - (void)channel; - - if (ADC_DIFFERENTIAL_MODE_DIFFERENTIAL == mode) { - hri_adc_set_CTRLC_DIFFMODE_bit(device->hw); - } else { - hri_adc_clear_CTRLC_DIFFMODE_bit(device->hw); - } -} - -/** - * \brief Set window mode - */ -void _adc_sync_set_window_mode(struct _adc_sync_device *const device, const adc_window_mode_t mode) -{ - hri_adc_write_CTRLC_WINMODE_bf(device->hw, mode); -} - -/** - * \brief Set window mode - */ -void _adc_async_set_window_mode(struct _adc_async_device *const device, const adc_window_mode_t mode) -{ - hri_adc_write_CTRLC_WINMODE_bf(device->hw, mode); -} - -/** - * \brief Set window mode - */ -void _adc_dma_set_window_mode(struct _adc_dma_device *const device, const adc_window_mode_t mode) -{ - hri_adc_write_CTRLC_WINMODE_bf(device->hw, mode); -} - -/** - * \brief Retrieve threshold state - */ -void _adc_sync_get_threshold_state(const struct _adc_sync_device *const device, adc_threshold_status_t *const state) -{ - *state = hri_adc_get_interrupt_WINMON_bit(device->hw); -} - -/** - * \brief Retrieve threshold state - */ -void _adc_async_get_threshold_state(const struct _adc_async_device *const device, adc_threshold_status_t *const state) -{ - *state = hri_adc_get_interrupt_WINMON_bit(device->hw); -} - -/** - * \brief Retrieve threshold state - */ -void _adc_dma_get_threshold_state(const struct _adc_dma_device *const device, adc_threshold_status_t *const state) -{ - *state = hri_adc_get_interrupt_WINMON_bit(device->hw); -} - -/** - * \brief Enable/disable ADC channel interrupt - */ -void _adc_async_set_irq_state(struct _adc_async_device *const device, const uint8_t channel, - const enum _adc_async_callback_type type, const bool state) -{ - (void)channel; - - void *const hw = device->hw; - - if (ADC_ASYNC_DEVICE_MONITOR_CB == type) { - hri_adc_write_INTEN_WINMON_bit(hw, state); - } else if (ADC_ASYNC_DEVICE_ERROR_CB == type) { - hri_adc_write_INTEN_OVERRUN_bit(hw, state); - } else if (ADC_ASYNC_DEVICE_CONVERT_CB == type) { - hri_adc_write_INTEN_RESRDY_bit(hw, state); - } -} - -/** - * \brief Retrieve ADC sync helper functions - */ -void *_adc_get_adc_sync(void) -{ - return (void *)NULL; -} - -/** - * \brief Retrieve ADC async helper functions - */ -void *_adc_get_adc_async(void) -{ - return (void *)NULL; -} - -/** - * \brief Set ADC reference source - * - * \param[in] hw The pointer to hardware instance - * \param[in] reference The reference to set - */ -static void _adc_set_reference_source(void *const hw, const adc_reference_t reference) -{ - bool enabled = hri_adc_get_CTRLA_ENABLE_bit(hw); - - hri_adc_clear_CTRLA_ENABLE_bit(hw); - hri_adc_write_REFCTRL_REFSEL_bf(hw, reference); - - if (enabled) { - hri_adc_set_CTRLA_ENABLE_bit(hw); - } -} diff --git a/watch-library/hpl/adc/hpl_adc_base.h b/watch-library/hpl/adc/hpl_adc_base.h deleted file mode 100644 index e9b9528..0000000 --- a/watch-library/hpl/adc/hpl_adc_base.h +++ /dev/null @@ -1,72 +0,0 @@ -/** - * \file - * - * \brief ADC related functionality declaration. - * - * Copyright (c) 2016-2018 Microchip Technology Inc. and its subsidiaries. - * - * \asf_license_start - * - * \page License - * - * Subject to your compliance with these terms, you may use Microchip - * software and any derivatives exclusively with Microchip products. - * It is your responsibility to comply with third party license terms applicable - * to your use of third party software (including open source software) that - * may accompany Microchip software. - * - * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, - * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, - * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, - * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE - * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL - * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE - * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE - * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT - * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY - * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY, - * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE. - * - * \asf_license_stop - * - */ - -#ifndef _HPL_ADC_ADC_H_INCLUDED -#define _HPL_ADC_ADC_H_INCLUDED - -#include -#include - -/** - * \addtogroup HPL ADC - * - * \section hpl_adc_rev Revision History - * - v1.0.0 Initial Release - * - *@{ - */ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * \name HPL functions - */ -//@{ - -/** - * \brief Retrieve ADC helper functions - * - * \return A pointer to set of ADC helper functions - */ -void *_adc_get_adc_sync(void); -void *_adc_get_adc_async(void); - -//@} - -#ifdef __cplusplus -} -#endif -/**@}*/ -#endif /* _HPL_USART_UART_H_INCLUDED */ diff --git a/watch-library/hpl/tc/hpl_tc.c b/watch-library/hpl/tc/hpl_tc.c deleted file mode 100644 index e69de29..0000000 diff --git a/watch-library/hpl/tc/hpl_tc_base.h b/watch-library/hpl/tc/hpl_tc_base.h deleted file mode 100644 index e69de29..0000000 diff --git a/watch-library/hpl/tcc/hpl_tcc.c b/watch-library/hpl/tcc/hpl_tcc.c deleted file mode 100644 index e69de29..0000000 diff --git a/watch-library/hpl/tcc/hpl_tcc.h b/watch-library/hpl/tcc/hpl_tcc.h deleted file mode 100644 index e69de29..0000000 diff --git a/watch-library/hw/driver_init.c b/watch-library/hw/driver_init.c index 564ec7a..273852c 100644 --- a/watch-library/hw/driver_init.c +++ b/watch-library/hw/driver_init.c @@ -11,18 +11,12 @@ #include #include -#include - struct slcd_sync_descriptor SEGMENT_LCD_0; struct calendar_descriptor CALENDAR_0; struct i2c_m_sync_desc I2C_0; -struct pwm_descriptor PWM_0; - -struct pwm_descriptor PWM_1; - void CALENDAR_0_CLOCK_init(void) { hri_mclk_set_APBAMASK_RTC_bit(MCLK); } diff --git a/watch-library/hw/driver_init.h b/watch-library/hw/driver_init.h index 1e53f9a..a6a3b56 100644 --- a/watch-library/hw/driver_init.h +++ b/watch-library/hw/driver_init.h @@ -20,22 +20,10 @@ extern "C" { #include #include #include - -#include - #include - #include - #include - #include -#include -#include -#include - -#include -#include #include extern struct adc_sync_descriptor ADC_0;