The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.
Dependents: hello SerialTestv11 SerialTestv12 Sierpinski ... more
mbed 2
This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.
TARGET_EFM32HG_STK3400/TARGET_Silicon_Labs/TARGET_EFM32/emlib/inc/em_acmp.h
- Committer:
- Kojto
- Date:
- 2017-02-14
- Revision:
- 136:ef9c61f8c49f
- Parent:
- 128:9bcdf88f62b0
- Child:
- 139:856d2700e60b
File content as of revision 136:ef9c61f8c49f:
/***************************************************************************//** * @file em_acmp.h * @brief Analog Comparator (ACMP) peripheral API * @version 5.0.0 ******************************************************************************* * @section License * <b>Copyright 2016 Silicon Laboratories, Inc. http://www.silabs.com</b> ******************************************************************************* * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. * * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no * obligation to support this Software. Silicon Labs is providing the * Software "AS IS", with no express or implied warranties of any kind, * including, but not limited to, any implied warranties of merchantability * or fitness for any particular purpose or warranties against infringement * of any proprietary rights of a third party. * * Silicon Labs will not be liable for any consequential, incidental, or * special damages, or any other relief, or for any claim by any third party, * arising from your use of this Software. * ******************************************************************************/ #ifndef EM_ACMP_H #define EM_ACMP_H #include "em_device.h" #if defined(ACMP_COUNT) && (ACMP_COUNT > 0) #include <stdint.h> #include <stdbool.h> #ifdef __cplusplus extern "C" { #endif /***************************************************************************//** * @addtogroup emlib * @{ ******************************************************************************/ /***************************************************************************//** * @addtogroup ACMP * @brief Analog comparator (ACMP) Peripheral API * * @details * The Analog Comparator is used to compare the voltage of two analog inputs, * with a digital output indicating which input voltage is higher. Inputs can * either be one of the selectable internal references or from external pins. * Response time and thereby also the current consumption can be configured by * altering the current supply to the comparator. * * The ACMP is available down to EM3 and is able to wakeup the system when * input signals pass a certain threshold. Use @ref ACMP_IntEnable to enable * an edge interrupt to use this functionality. * * Here is an example of how to use the em_acmp.h API for comparing an input * pin to an internal 2.5V reference voltage. * * @if DOXYDOC_P1_DEVICE * @include em_acmp_compare_p1.c * @endif * * @if DOXYDOC_P2_DEVICE * @include em_acmp_compare_p2.c * @endif * * @note * The ACMP can also be used to compare two separate input pins. * * @details * The ACMP also contains specialized hardware for capacitive sensing. This * module contains the function @ref ACMP_CapsenseInit for initializing the * ACMP for capacitive sensing and the function @ref ACMP_CapsenseChannelSet * for selecting the current capsense channel. * * For applications that require capacitive sensing it is recommended to use a * library like cslib which is provided by Silicon Labs. * * @{ ******************************************************************************/ /******************************************************************************* ******************************** ENUMS ************************************ ******************************************************************************/ /** Resistor values used for the internal capacative sense resistor. See the * datasheet for your device for details on each resistor value. */ typedef enum { acmpResistor0 = _ACMP_INPUTSEL_CSRESSEL_RES0, /**< Resistor value 0 */ acmpResistor1 = _ACMP_INPUTSEL_CSRESSEL_RES1, /**< Resistor value 1 */ acmpResistor2 = _ACMP_INPUTSEL_CSRESSEL_RES2, /**< Resistor value 2 */ acmpResistor3 = _ACMP_INPUTSEL_CSRESSEL_RES3, /**< Resistor value 3 */ #if defined(_ACMP_INPUTSEL_CSRESSEL_RES4) acmpResistor4 = _ACMP_INPUTSEL_CSRESSEL_RES4, /**< Resistor value 4 */ acmpResistor5 = _ACMP_INPUTSEL_CSRESSEL_RES5, /**< Resistor value 5 */ acmpResistor6 = _ACMP_INPUTSEL_CSRESSEL_RES6, /**< Resistor value 6 */ acmpResistor7 = _ACMP_INPUTSEL_CSRESSEL_RES7, /**< Resistor value 7 */ #endif } ACMP_CapsenseResistor_TypeDef; /** Hysteresis level. See datasheet for your device for details on each * level. */ typedef enum { #if defined(_ACMP_CTRL_HYSTSEL_MASK) acmpHysteresisLevel0 = _ACMP_CTRL_HYSTSEL_HYST0, /**< Hysteresis level 0 */ acmpHysteresisLevel1 = _ACMP_CTRL_HYSTSEL_HYST1, /**< Hysteresis level 1 */ acmpHysteresisLevel2 = _ACMP_CTRL_HYSTSEL_HYST2, /**< Hysteresis level 2 */ acmpHysteresisLevel3 = _ACMP_CTRL_HYSTSEL_HYST3, /**< Hysteresis level 3 */ acmpHysteresisLevel4 = _ACMP_CTRL_HYSTSEL_HYST4, /**< Hysteresis level 4 */ acmpHysteresisLevel5 = _ACMP_CTRL_HYSTSEL_HYST5, /**< Hysteresis level 5 */ acmpHysteresisLevel6 = _ACMP_CTRL_HYSTSEL_HYST6, /**< Hysteresis level 6 */ acmpHysteresisLevel7 = _ACMP_CTRL_HYSTSEL_HYST7 /**< Hysteresis level 7 */ #endif #if defined(_ACMP_HYSTERESIS0_HYST_MASK) acmpHysteresisLevel0 = _ACMP_HYSTERESIS0_HYST_HYST0, /**< Hysteresis level 0 */ acmpHysteresisLevel1 = _ACMP_HYSTERESIS0_HYST_HYST1, /**< Hysteresis level 1 */ acmpHysteresisLevel2 = _ACMP_HYSTERESIS0_HYST_HYST2, /**< Hysteresis level 2 */ acmpHysteresisLevel3 = _ACMP_HYSTERESIS0_HYST_HYST3, /**< Hysteresis level 3 */ acmpHysteresisLevel4 = _ACMP_HYSTERESIS0_HYST_HYST4, /**< Hysteresis level 4 */ acmpHysteresisLevel5 = _ACMP_HYSTERESIS0_HYST_HYST5, /**< Hysteresis level 5 */ acmpHysteresisLevel6 = _ACMP_HYSTERESIS0_HYST_HYST6, /**< Hysteresis level 6 */ acmpHysteresisLevel7 = _ACMP_HYSTERESIS0_HYST_HYST7, /**< Hysteresis level 7 */ acmpHysteresisLevel8 = _ACMP_HYSTERESIS0_HYST_HYST8, /**< Hysteresis level 8 */ acmpHysteresisLevel9 = _ACMP_HYSTERESIS0_HYST_HYST9, /**< Hysteresis level 9 */ acmpHysteresisLevel10 = _ACMP_HYSTERESIS0_HYST_HYST10, /**< Hysteresis level 10 */ acmpHysteresisLevel11 = _ACMP_HYSTERESIS0_HYST_HYST11, /**< Hysteresis level 11 */ acmpHysteresisLevel12 = _ACMP_HYSTERESIS0_HYST_HYST12, /**< Hysteresis level 12 */ acmpHysteresisLevel13 = _ACMP_HYSTERESIS0_HYST_HYST13, /**< Hysteresis level 13 */ acmpHysteresisLevel14 = _ACMP_HYSTERESIS0_HYST_HYST14, /**< Hysteresis level 14 */ acmpHysteresisLevel15 = _ACMP_HYSTERESIS0_HYST_HYST15, /**< Hysteresis level 15 */ #endif } ACMP_HysteresisLevel_TypeDef; #if defined(_ACMP_CTRL_WARMTIME_MASK) /** ACMP warmup time. The delay is measured in HFPERCLK cycles and should * be at least 10 us. */ typedef enum { /** 4 HFPERCLK cycles warmup */ acmpWarmTime4 = _ACMP_CTRL_WARMTIME_4CYCLES, /** 8 HFPERCLK cycles warmup */ acmpWarmTime8 = _ACMP_CTRL_WARMTIME_8CYCLES, /** 16 HFPERCLK cycles warmup */ acmpWarmTime16 = _ACMP_CTRL_WARMTIME_16CYCLES, /** 32 HFPERCLK cycles warmup */ acmpWarmTime32 = _ACMP_CTRL_WARMTIME_32CYCLES, /** 64 HFPERCLK cycles warmup */ acmpWarmTime64 = _ACMP_CTRL_WARMTIME_64CYCLES, /** 128 HFPERCLK cycles warmup */ acmpWarmTime128 = _ACMP_CTRL_WARMTIME_128CYCLES, /** 256 HFPERCLK cycles warmup */ acmpWarmTime256 = _ACMP_CTRL_WARMTIME_256CYCLES, /** 512 HFPERCLK cycles warmup */ acmpWarmTime512 = _ACMP_CTRL_WARMTIME_512CYCLES } ACMP_WarmTime_TypeDef; #endif #if defined(_ACMP_CTRL_INPUTRANGE_MASK) /** * Adjust performance of the ACMP for a given input voltage range */ typedef enum { acmpInputRangeFull = _ACMP_CTRL_INPUTRANGE_FULL, /**< Input can be from 0 to Vdd */ acmpInputRangeHigh = _ACMP_CTRL_INPUTRANGE_GTVDDDIV2, /**< Input will always be greater than Vdd/2 */ acmpInputRangeLow = _ACMP_CTRL_INPUTRANGE_LTVDDDIV2 /**< Input will always be less than Vdd/2 */ } ACMP_InputRange_TypeDef; #endif #if defined(_ACMP_CTRL_PWRSEL_MASK) /** * ACMP Power source. */ typedef enum { acmpPowerSourceAvdd = _ACMP_CTRL_PWRSEL_AVDD, /**< Power the ACMP using the AVDD supply */ acmpPowerSourceVddVreg = _ACMP_CTRL_PWRSEL_VREGVDD, /**< Power the ACMP using the VREGVDD supply */ acmpPowerSourceIOVdd0 = _ACMP_CTRL_PWRSEL_IOVDD0, /**< Power the ACMP using the IOVDD/IOVDD0 supply */ acmpPowerSourceIOVdd1 = _ACMP_CTRL_PWRSEL_IOVDD1, /**< Power the ACMP using the IOVDD1 supply (if part has two I/O voltages) */ } ACMP_PowerSource_TypeDef; #endif #if defined(_ACMP_CTRL_ACCURACY_MASK) /** * ACMP accuracy mode. */ typedef enum { acmpAccuracyLow = _ACMP_CTRL_ACCURACY_LOW, /**< Low-accuracy mode but consume less current */ acmpAccuracyHigh = _ACMP_CTRL_ACCURACY_HIGH /**< High-accuracy mode but consume more current */ } ACMP_Accuracy_TypeDef; #endif #if defined(_ACMP_INPUTSEL_VASEL_MASK) /** ACMP Input to the VA divider. This enum is used to select the input for * the VA Divider */ typedef enum { acmpVAInputVDD = _ACMP_INPUTSEL_VASEL_VDD, acmpVAInputAPORT2YCH0 = _ACMP_INPUTSEL_VASEL_APORT2YCH0, acmpVAInputAPORT2YCH2 = _ACMP_INPUTSEL_VASEL_APORT2YCH2, acmpVAInputAPORT2YCH4 = _ACMP_INPUTSEL_VASEL_APORT2YCH4, acmpVAInputAPORT2YCH6 = _ACMP_INPUTSEL_VASEL_APORT2YCH6, acmpVAInputAPORT2YCH8 = _ACMP_INPUTSEL_VASEL_APORT2YCH8, acmpVAInputAPORT2YCH10 = _ACMP_INPUTSEL_VASEL_APORT2YCH10, acmpVAInputAPORT2YCH12 = _ACMP_INPUTSEL_VASEL_APORT2YCH12, acmpVAInputAPORT2YCH14 = _ACMP_INPUTSEL_VASEL_APORT2YCH14, acmpVAInputAPORT2YCH16 = _ACMP_INPUTSEL_VASEL_APORT2YCH16, acmpVAInputAPORT2YCH18 = _ACMP_INPUTSEL_VASEL_APORT2YCH18, acmpVAInputAPORT2YCH20 = _ACMP_INPUTSEL_VASEL_APORT2YCH20, acmpVAInputAPORT2YCH22 = _ACMP_INPUTSEL_VASEL_APORT2YCH22, acmpVAInputAPORT2YCH24 = _ACMP_INPUTSEL_VASEL_APORT2YCH24, acmpVAInputAPORT2YCH26 = _ACMP_INPUTSEL_VASEL_APORT2YCH26, acmpVAInputAPORT2YCH28 = _ACMP_INPUTSEL_VASEL_APORT2YCH28, acmpVAInputAPORT2YCH30 = _ACMP_INPUTSEL_VASEL_APORT2YCH30, acmpVAInputAPORT1XCH0 = _ACMP_INPUTSEL_VASEL_APORT1XCH0, acmpVAInputAPORT1YCH1 = _ACMP_INPUTSEL_VASEL_APORT1YCH1, acmpVAInputAPORT1XCH2 = _ACMP_INPUTSEL_VASEL_APORT1XCH2, acmpVAInputAPORT1YCH3 = _ACMP_INPUTSEL_VASEL_APORT1YCH3, acmpVAInputAPORT1XCH4 = _ACMP_INPUTSEL_VASEL_APORT1XCH4, acmpVAInputAPORT1YCH5 = _ACMP_INPUTSEL_VASEL_APORT1YCH5, acmpVAInputAPORT1XCH6 = _ACMP_INPUTSEL_VASEL_APORT1XCH6, acmpVAInputAPORT1YCH7 = _ACMP_INPUTSEL_VASEL_APORT1YCH7, acmpVAInputAPORT1XCH8 = _ACMP_INPUTSEL_VASEL_APORT1XCH8, acmpVAInputAPORT1YCH9 = _ACMP_INPUTSEL_VASEL_APORT1YCH9, acmpVAInputAPORT1XCH10 = _ACMP_INPUTSEL_VASEL_APORT1XCH10, acmpVAInputAPORT1YCH11 = _ACMP_INPUTSEL_VASEL_APORT1YCH11, acmpVAInputAPORT1XCH12 = _ACMP_INPUTSEL_VASEL_APORT1XCH12, acmpVAInputAPORT1YCH13 = _ACMP_INPUTSEL_VASEL_APORT1YCH13, acmpVAInputAPORT1XCH14 = _ACMP_INPUTSEL_VASEL_APORT1XCH14, acmpVAInputAPORT1YCH15 = _ACMP_INPUTSEL_VASEL_APORT1YCH15, acmpVAInputAPORT1XCH16 = _ACMP_INPUTSEL_VASEL_APORT1XCH16, acmpVAInputAPORT1YCH17 = _ACMP_INPUTSEL_VASEL_APORT1YCH17, acmpVAInputAPORT1XCH18 = _ACMP_INPUTSEL_VASEL_APORT1XCH18, acmpVAInputAPORT1YCH19 = _ACMP_INPUTSEL_VASEL_APORT1YCH19, acmpVAInputAPORT1XCH20 = _ACMP_INPUTSEL_VASEL_APORT1XCH20, acmpVAInputAPORT1YCH21 = _ACMP_INPUTSEL_VASEL_APORT1YCH21, acmpVAInputAPORT1XCH22 = _ACMP_INPUTSEL_VASEL_APORT1XCH22, acmpVAInputAPORT1YCH23 = _ACMP_INPUTSEL_VASEL_APORT1YCH23, acmpVAInputAPORT1XCH24 = _ACMP_INPUTSEL_VASEL_APORT1XCH24, acmpVAInputAPORT1YCH25 = _ACMP_INPUTSEL_VASEL_APORT1YCH25, acmpVAInputAPORT1XCH26 = _ACMP_INPUTSEL_VASEL_APORT1XCH26, acmpVAInputAPORT1YCH27 = _ACMP_INPUTSEL_VASEL_APORT1YCH27, acmpVAInputAPORT1XCH28 = _ACMP_INPUTSEL_VASEL_APORT1XCH28, acmpVAInputAPORT1YCH29 = _ACMP_INPUTSEL_VASEL_APORT1YCH29, acmpVAInputAPORT1XCH30 = _ACMP_INPUTSEL_VASEL_APORT1XCH30, acmpVAInputAPORT1YCH31 = _ACMP_INPUTSEL_VASEL_APORT1YCH31 } ACMP_VAInput_TypeDef; #endif #if defined(_ACMP_INPUTSEL_VBSEL_MASK) /** * ACMP Input to the VB divider. This enum is used to select the input for * the VB divider. */ typedef enum { acmpVBInput1V25 = _ACMP_INPUTSEL_VBSEL_1V25, acmpVBInput2V5 = _ACMP_INPUTSEL_VBSEL_2V5 } ACMP_VBInput_TypeDef; #endif #if defined(_ACMP_INPUTSEL_VLPSEL_MASK) /** * ACMP Low-Power Input Selection. */ typedef enum { acmpVLPInputVADIV = _ACMP_INPUTSEL_VLPSEL_VADIV, acmpVLPInputVBDIV = _ACMP_INPUTSEL_VLPSEL_VBDIV } ACMP_VLPInput_Typedef; #endif #if defined(_SILICON_LABS_32B_PLATFORM_2) /** ACMP Input Selection */ typedef enum { acmpInputAPORT0XCH0 = _ACMP_INPUTSEL_POSSEL_APORT0XCH0, acmpInputAPORT0XCH1 = _ACMP_INPUTSEL_POSSEL_APORT0XCH1, acmpInputAPORT0XCH2 = _ACMP_INPUTSEL_POSSEL_APORT0XCH2, acmpInputAPORT0XCH3 = _ACMP_INPUTSEL_POSSEL_APORT0XCH3, acmpInputAPORT0XCH4 = _ACMP_INPUTSEL_POSSEL_APORT0XCH4, acmpInputAPORT0XCH5 = _ACMP_INPUTSEL_POSSEL_APORT0XCH5, acmpInputAPORT0XCH6 = _ACMP_INPUTSEL_POSSEL_APORT0XCH6, acmpInputAPORT0XCH7 = _ACMP_INPUTSEL_POSSEL_APORT0XCH7, acmpInputAPORT0XCH8 = _ACMP_INPUTSEL_POSSEL_APORT0XCH8, acmpInputAPORT0XCH9 = _ACMP_INPUTSEL_POSSEL_APORT0XCH9, acmpInputAPORT0XCH10 = _ACMP_INPUTSEL_POSSEL_APORT0XCH10, acmpInputAPORT0XCH11 = _ACMP_INPUTSEL_POSSEL_APORT0XCH11, acmpInputAPORT0XCH12 = _ACMP_INPUTSEL_POSSEL_APORT0XCH12, acmpInputAPORT0XCH13 = _ACMP_INPUTSEL_POSSEL_APORT0XCH13, acmpInputAPORT0XCH14 = _ACMP_INPUTSEL_POSSEL_APORT0XCH14, acmpInputAPORT0XCH15 = _ACMP_INPUTSEL_POSSEL_APORT0XCH15, acmpInputAPORT0YCH0 = _ACMP_INPUTSEL_POSSEL_APORT0YCH0, acmpInputAPORT0YCH1 = _ACMP_INPUTSEL_POSSEL_APORT0YCH1, acmpInputAPORT0YCH2 = _ACMP_INPUTSEL_POSSEL_APORT0YCH2, acmpInputAPORT0YCH3 = _ACMP_INPUTSEL_POSSEL_APORT0YCH3, acmpInputAPORT0YCH4 = _ACMP_INPUTSEL_POSSEL_APORT0YCH4, acmpInputAPORT0YCH5 = _ACMP_INPUTSEL_POSSEL_APORT0YCH5, acmpInputAPORT0YCH6 = _ACMP_INPUTSEL_POSSEL_APORT0YCH6, acmpInputAPORT0YCH7 = _ACMP_INPUTSEL_POSSEL_APORT0YCH7, acmpInputAPORT0YCH8 = _ACMP_INPUTSEL_POSSEL_APORT0YCH8, acmpInputAPORT0YCH9 = _ACMP_INPUTSEL_POSSEL_APORT0YCH9, acmpInputAPORT0YCH10 = _ACMP_INPUTSEL_POSSEL_APORT0YCH10, acmpInputAPORT0YCH11 = _ACMP_INPUTSEL_POSSEL_APORT0YCH11, acmpInputAPORT0YCH12 = _ACMP_INPUTSEL_POSSEL_APORT0YCH12, acmpInputAPORT0YCH13 = _ACMP_INPUTSEL_POSSEL_APORT0YCH13, acmpInputAPORT0YCH14 = _ACMP_INPUTSEL_POSSEL_APORT0YCH14, acmpInputAPORT0YCH15 = _ACMP_INPUTSEL_POSSEL_APORT0YCH15, acmpInputAPORT1XCH0 = _ACMP_INPUTSEL_POSSEL_APORT1XCH0, acmpInputAPORT1YCH1 = _ACMP_INPUTSEL_POSSEL_APORT1YCH1, acmpInputAPORT1XCH2 = _ACMP_INPUTSEL_POSSEL_APORT1XCH2, acmpInputAPORT1YCH3 = _ACMP_INPUTSEL_POSSEL_APORT1YCH3, acmpInputAPORT1XCH4 = _ACMP_INPUTSEL_POSSEL_APORT1XCH4, acmpInputAPORT1YCH5 = _ACMP_INPUTSEL_POSSEL_APORT1YCH5, acmpInputAPORT1XCH6 = _ACMP_INPUTSEL_POSSEL_APORT1XCH6, acmpInputAPORT1YCH7 = _ACMP_INPUTSEL_POSSEL_APORT1YCH7, acmpInputAPORT1XCH8 = _ACMP_INPUTSEL_POSSEL_APORT1XCH8, acmpInputAPORT1YCH9 = _ACMP_INPUTSEL_POSSEL_APORT1YCH9, acmpInputAPORT1XCH10 = _ACMP_INPUTSEL_POSSEL_APORT1XCH10, acmpInputAPORT1YCH11 = _ACMP_INPUTSEL_POSSEL_APORT1YCH11, acmpInputAPORT1XCH12 = _ACMP_INPUTSEL_POSSEL_APORT1XCH12, acmpInputAPORT1YCH13 = _ACMP_INPUTSEL_POSSEL_APORT1YCH13, acmpInputAPORT1XCH14 = _ACMP_INPUTSEL_POSSEL_APORT1XCH14, acmpInputAPORT1YCH15 = _ACMP_INPUTSEL_POSSEL_APORT1YCH15, acmpInputAPORT1XCH16 = _ACMP_INPUTSEL_POSSEL_APORT1XCH16, acmpInputAPORT1YCH17 = _ACMP_INPUTSEL_POSSEL_APORT1YCH17, acmpInputAPORT1XCH18 = _ACMP_INPUTSEL_POSSEL_APORT1XCH18, acmpInputAPORT1YCH19 = _ACMP_INPUTSEL_POSSEL_APORT1YCH19, acmpInputAPORT1XCH20 = _ACMP_INPUTSEL_POSSEL_APORT1XCH20, acmpInputAPORT1YCH21 = _ACMP_INPUTSEL_POSSEL_APORT1YCH21, acmpInputAPORT1XCH22 = _ACMP_INPUTSEL_POSSEL_APORT1XCH22, acmpInputAPORT1YCH23 = _ACMP_INPUTSEL_POSSEL_APORT1YCH23, acmpInputAPORT1XCH24 = _ACMP_INPUTSEL_POSSEL_APORT1XCH24, acmpInputAPORT1YCH25 = _ACMP_INPUTSEL_POSSEL_APORT1YCH25, acmpInputAPORT1XCH26 = _ACMP_INPUTSEL_POSSEL_APORT1XCH26, acmpInputAPORT1YCH27 = _ACMP_INPUTSEL_POSSEL_APORT1YCH27, acmpInputAPORT1XCH28 = _ACMP_INPUTSEL_POSSEL_APORT1XCH28, acmpInputAPORT1YCH29 = _ACMP_INPUTSEL_POSSEL_APORT1YCH29, acmpInputAPORT1XCH30 = _ACMP_INPUTSEL_POSSEL_APORT1XCH30, acmpInputAPORT1YCH31 = _ACMP_INPUTSEL_POSSEL_APORT1YCH31, acmpInputAPORT2YCH0 = _ACMP_INPUTSEL_POSSEL_APORT2YCH0, acmpInputAPORT2XCH1 = _ACMP_INPUTSEL_POSSEL_APORT2XCH1, acmpInputAPORT2YCH2 = _ACMP_INPUTSEL_POSSEL_APORT2YCH2, acmpInputAPORT2XCH3 = _ACMP_INPUTSEL_POSSEL_APORT2XCH3, acmpInputAPORT2YCH4 = _ACMP_INPUTSEL_POSSEL_APORT2YCH4, acmpInputAPORT2XCH5 = _ACMP_INPUTSEL_POSSEL_APORT2XCH5, acmpInputAPORT2YCH6 = _ACMP_INPUTSEL_POSSEL_APORT2YCH6, acmpInputAPORT2XCH7 = _ACMP_INPUTSEL_POSSEL_APORT2XCH7, acmpInputAPORT2YCH8 = _ACMP_INPUTSEL_POSSEL_APORT2YCH8, acmpInputAPORT2XCH9 = _ACMP_INPUTSEL_POSSEL_APORT2XCH9, acmpInputAPORT2YCH10 = _ACMP_INPUTSEL_POSSEL_APORT2YCH10, acmpInputAPORT2XCH11 = _ACMP_INPUTSEL_POSSEL_APORT2XCH11, acmpInputAPORT2YCH12 = _ACMP_INPUTSEL_POSSEL_APORT2YCH12, acmpInputAPORT2XCH13 = _ACMP_INPUTSEL_POSSEL_APORT2XCH13, acmpInputAPORT2YCH14 = _ACMP_INPUTSEL_POSSEL_APORT2YCH14, acmpInputAPORT2XCH15 = _ACMP_INPUTSEL_POSSEL_APORT2XCH15, acmpInputAPORT2YCH16 = _ACMP_INPUTSEL_POSSEL_APORT2YCH16, acmpInputAPORT2XCH17 = _ACMP_INPUTSEL_POSSEL_APORT2XCH17, acmpInputAPORT2YCH18 = _ACMP_INPUTSEL_POSSEL_APORT2YCH18, acmpInputAPORT2XCH19 = _ACMP_INPUTSEL_POSSEL_APORT2XCH19, acmpInputAPORT2YCH20 = _ACMP_INPUTSEL_POSSEL_APORT2YCH20, acmpInputAPORT2XCH21 = _ACMP_INPUTSEL_POSSEL_APORT2XCH21, acmpInputAPORT2YCH22 = _ACMP_INPUTSEL_POSSEL_APORT2YCH22, acmpInputAPORT2XCH23 = _ACMP_INPUTSEL_POSSEL_APORT2XCH23, acmpInputAPORT2YCH24 = _ACMP_INPUTSEL_POSSEL_APORT2YCH24, acmpInputAPORT2XCH25 = _ACMP_INPUTSEL_POSSEL_APORT2XCH25, acmpInputAPORT2YCH26 = _ACMP_INPUTSEL_POSSEL_APORT2YCH26, acmpInputAPORT2XCH27 = _ACMP_INPUTSEL_POSSEL_APORT2XCH27, acmpInputAPORT2YCH28 = _ACMP_INPUTSEL_POSSEL_APORT2YCH28, acmpInputAPORT2XCH29 = _ACMP_INPUTSEL_POSSEL_APORT2XCH29, acmpInputAPORT2YCH30 = _ACMP_INPUTSEL_POSSEL_APORT2YCH30, acmpInputAPORT2XCH31 = _ACMP_INPUTSEL_POSSEL_APORT2XCH31, acmpInputAPORT3XCH0 = _ACMP_INPUTSEL_POSSEL_APORT3XCH0, acmpInputAPORT3YCH1 = _ACMP_INPUTSEL_POSSEL_APORT3YCH1, acmpInputAPORT3XCH2 = _ACMP_INPUTSEL_POSSEL_APORT3XCH2, acmpInputAPORT3YCH3 = _ACMP_INPUTSEL_POSSEL_APORT3YCH3, acmpInputAPORT3XCH4 = _ACMP_INPUTSEL_POSSEL_APORT3XCH4, acmpInputAPORT3YCH5 = _ACMP_INPUTSEL_POSSEL_APORT3YCH5, acmpInputAPORT3XCH6 = _ACMP_INPUTSEL_POSSEL_APORT3XCH6, acmpInputAPORT3YCH7 = _ACMP_INPUTSEL_POSSEL_APORT3YCH7, acmpInputAPORT3XCH8 = _ACMP_INPUTSEL_POSSEL_APORT3XCH8, acmpInputAPORT3YCH9 = _ACMP_INPUTSEL_POSSEL_APORT3YCH9, acmpInputAPORT3XCH10 = _ACMP_INPUTSEL_POSSEL_APORT3XCH10, acmpInputAPORT3YCH11 = _ACMP_INPUTSEL_POSSEL_APORT3YCH11, acmpInputAPORT3XCH12 = _ACMP_INPUTSEL_POSSEL_APORT3XCH12, acmpInputAPORT3YCH13 = _ACMP_INPUTSEL_POSSEL_APORT3YCH13, acmpInputAPORT3XCH14 = _ACMP_INPUTSEL_POSSEL_APORT3XCH14, acmpInputAPORT3YCH15 = _ACMP_INPUTSEL_POSSEL_APORT3YCH15, acmpInputAPORT3XCH16 = _ACMP_INPUTSEL_POSSEL_APORT3XCH16, acmpInputAPORT3YCH17 = _ACMP_INPUTSEL_POSSEL_APORT3YCH17, acmpInputAPORT3XCH18 = _ACMP_INPUTSEL_POSSEL_APORT3XCH18, acmpInputAPORT3YCH19 = _ACMP_INPUTSEL_POSSEL_APORT3YCH19, acmpInputAPORT3XCH20 = _ACMP_INPUTSEL_POSSEL_APORT3XCH20, acmpInputAPORT3YCH21 = _ACMP_INPUTSEL_POSSEL_APORT3YCH21, acmpInputAPORT3XCH22 = _ACMP_INPUTSEL_POSSEL_APORT3XCH22, acmpInputAPORT3YCH23 = _ACMP_INPUTSEL_POSSEL_APORT3YCH23, acmpInputAPORT3XCH24 = _ACMP_INPUTSEL_POSSEL_APORT3XCH24, acmpInputAPORT3YCH25 = _ACMP_INPUTSEL_POSSEL_APORT3YCH25, acmpInputAPORT3XCH26 = _ACMP_INPUTSEL_POSSEL_APORT3XCH26, acmpInputAPORT3YCH27 = _ACMP_INPUTSEL_POSSEL_APORT3YCH27, acmpInputAPORT3XCH28 = _ACMP_INPUTSEL_POSSEL_APORT3XCH28, acmpInputAPORT3YCH29 = _ACMP_INPUTSEL_POSSEL_APORT3YCH29, acmpInputAPORT3XCH30 = _ACMP_INPUTSEL_POSSEL_APORT3XCH30, acmpInputAPORT3YCH31 = _ACMP_INPUTSEL_POSSEL_APORT3YCH31, acmpInputAPORT4YCH0 = _ACMP_INPUTSEL_POSSEL_APORT4YCH0, acmpInputAPORT4XCH1 = _ACMP_INPUTSEL_POSSEL_APORT4XCH1, acmpInputAPORT4YCH2 = _ACMP_INPUTSEL_POSSEL_APORT4YCH2, acmpInputAPORT4XCH3 = _ACMP_INPUTSEL_POSSEL_APORT4XCH3, acmpInputAPORT4YCH4 = _ACMP_INPUTSEL_POSSEL_APORT4YCH4, acmpInputAPORT4XCH5 = _ACMP_INPUTSEL_POSSEL_APORT4XCH5, acmpInputAPORT4YCH6 = _ACMP_INPUTSEL_POSSEL_APORT4YCH6, acmpInputAPORT4XCH7 = _ACMP_INPUTSEL_POSSEL_APORT4XCH7, acmpInputAPORT4YCH8 = _ACMP_INPUTSEL_POSSEL_APORT4YCH8, acmpInputAPORT4XCH9 = _ACMP_INPUTSEL_POSSEL_APORT4XCH9, acmpInputAPORT4YCH10 = _ACMP_INPUTSEL_POSSEL_APORT4YCH10, acmpInputAPORT4XCH11 = _ACMP_INPUTSEL_POSSEL_APORT4XCH11, acmpInputAPORT4YCH12 = _ACMP_INPUTSEL_POSSEL_APORT4YCH12, acmpInputAPORT4XCH13 = _ACMP_INPUTSEL_POSSEL_APORT4XCH13, acmpInputAPORT4YCH16 = _ACMP_INPUTSEL_POSSEL_APORT4YCH16, acmpInputAPORT4XCH17 = _ACMP_INPUTSEL_POSSEL_APORT4XCH17, acmpInputAPORT4YCH18 = _ACMP_INPUTSEL_POSSEL_APORT4YCH18, acmpInputAPORT4XCH19 = _ACMP_INPUTSEL_POSSEL_APORT4XCH19, acmpInputAPORT4YCH20 = _ACMP_INPUTSEL_POSSEL_APORT4YCH20, acmpInputAPORT4XCH21 = _ACMP_INPUTSEL_POSSEL_APORT4XCH21, acmpInputAPORT4YCH22 = _ACMP_INPUTSEL_POSSEL_APORT4YCH22, acmpInputAPORT4XCH23 = _ACMP_INPUTSEL_POSSEL_APORT4XCH23, acmpInputAPORT4YCH24 = _ACMP_INPUTSEL_POSSEL_APORT4YCH24, acmpInputAPORT4XCH25 = _ACMP_INPUTSEL_POSSEL_APORT4XCH25, acmpInputAPORT4YCH26 = _ACMP_INPUTSEL_POSSEL_APORT4YCH26, acmpInputAPORT4XCH27 = _ACMP_INPUTSEL_POSSEL_APORT4XCH27, acmpInputAPORT4YCH28 = _ACMP_INPUTSEL_POSSEL_APORT4YCH28, acmpInputAPORT4XCH29 = _ACMP_INPUTSEL_POSSEL_APORT4XCH29, acmpInputAPORT4YCH30 = _ACMP_INPUTSEL_POSSEL_APORT4YCH30, acmpInputAPORT4YCH14 = _ACMP_INPUTSEL_POSSEL_APORT4YCH14, acmpInputAPORT4XCH15 = _ACMP_INPUTSEL_POSSEL_APORT4XCH15, acmpInputAPORT4XCH31 = _ACMP_INPUTSEL_POSSEL_APORT4XCH31, acmpInputDACOUT0 = _ACMP_INPUTSEL_POSSEL_DACOUT0, acmpInputDACOUT1 = _ACMP_INPUTSEL_POSSEL_DACOUT1, acmpInputVLP = _ACMP_INPUTSEL_POSSEL_VLP, acmpInputVBDIV = _ACMP_INPUTSEL_POSSEL_VBDIV, acmpInputVADIV = _ACMP_INPUTSEL_POSSEL_VADIV, acmpInputVDD = _ACMP_INPUTSEL_POSSEL_VDD, acmpInputVSS = _ACMP_INPUTSEL_POSSEL_VSS, } ACMP_Channel_TypeDef; #else /** ACMP inputs. Note that scaled VDD and bandgap references can only be used * as negative inputs. */ typedef enum { /** Channel 0 */ acmpChannel0 = _ACMP_INPUTSEL_NEGSEL_CH0, /** Channel 1 */ acmpChannel1 = _ACMP_INPUTSEL_NEGSEL_CH1, /** Channel 2 */ acmpChannel2 = _ACMP_INPUTSEL_NEGSEL_CH2, /** Channel 3 */ acmpChannel3 = _ACMP_INPUTSEL_NEGSEL_CH3, /** Channel 4 */ acmpChannel4 = _ACMP_INPUTSEL_NEGSEL_CH4, /** Channel 5 */ acmpChannel5 = _ACMP_INPUTSEL_NEGSEL_CH5, /** Channel 6 */ acmpChannel6 = _ACMP_INPUTSEL_NEGSEL_CH6, /** Channel 7 */ acmpChannel7 = _ACMP_INPUTSEL_NEGSEL_CH7, /** 1.25V internal reference */ acmpChannel1V25 = _ACMP_INPUTSEL_NEGSEL_1V25, /** 2.5V internal reference */ acmpChannel2V5 = _ACMP_INPUTSEL_NEGSEL_2V5, /** Scaled VDD reference */ acmpChannelVDD = _ACMP_INPUTSEL_NEGSEL_VDD, #if defined(_ACMP_INPUTSEL_NEGSEL_DAC0CH0) /** DAC0 channel 0 */ acmpChannelDAC0Ch0 = _ACMP_INPUTSEL_NEGSEL_DAC0CH0, #endif #if defined(_ACMP_INPUTSEL_NEGSEL_DAC0CH1) /** DAC0 channel 1 */ acmpChannelDAC0Ch1 = _ACMP_INPUTSEL_NEGSEL_DAC0CH1, #endif #if defined(_ACMP_INPUTSEL_NEGSEL_CAPSENSE) /** Capacitive sense mode */ acmpChannelCapSense = _ACMP_INPUTSEL_NEGSEL_CAPSENSE, #endif } ACMP_Channel_TypeDef; #endif /******************************************************************************* ****************************** STRUCTS ************************************ ******************************************************************************/ /** Capsense initialization structure. */ typedef struct { /** Full bias current. See the ACMP chapter about bias and response time in * the reference manual for details. */ bool fullBias; #if defined(_ACMP_CTRL_HALFBIAS_MASK) /** Half bias current. See the ACMP chapter about bias and response time in * the reference manual for details. */ bool halfBias; #endif /** Bias current. See the ACMP chapter about bias and response time in the * reference manual for details. */ uint32_t biasProg; #if defined(_ACMP_CTRL_WARMTIME_MASK) /** Warmup time. This is measured in HFPERCLK cycles and should be * about 10us in wall clock time. */ ACMP_WarmTime_TypeDef warmTime; #endif #if defined(_ACMP_CTRL_HYSTSEL_MASK) /** Hysteresis level */ ACMP_HysteresisLevel_TypeDef hysteresisLevel; #else /** Hysteresis level when ACMP output is 0 */ ACMP_HysteresisLevel_TypeDef hysteresisLevel_0; /** Hysteresis level when ACMP output is 1 */ ACMP_HysteresisLevel_TypeDef hysteresisLevel_1; #endif /** Resistor used in the capacative sensing circuit. For values see * your device datasheet. */ ACMP_CapsenseResistor_TypeDef resistor; #if defined(_ACMP_INPUTSEL_LPREF_MASK) /** Low power reference enabled. This setting, if enabled, reduces the * power used by the VDD and bandgap references. */ bool lowPowerReferenceEnabled; #endif #if defined(_ACMP_INPUTSEL_VDDLEVEL_MASK) /** Vdd reference value. VDD_SCALED = (Vdd * VDDLEVEL) / 63. * Valid values are in the range 0-63. */ uint32_t vddLevel; #else /** * This value configures the upper voltage threshold of the capsense * oscillation rail. * * The voltage threshold is calculated as * Vdd * (vddLevelHigh + 1) / 64 */ uint32_t vddLevelHigh; /** * This value configures the lower voltage threshold of the capsense * oscillation rail. * * The voltage threshold is calculated as * Vdd * (vddLevelLow + 1) / 64 */ uint32_t vddLevelLow; #endif /** If true, ACMP is being enabled after configuration. */ bool enable; } ACMP_CapsenseInit_TypeDef; /** Default config for capacitive sense mode initialization. */ #if defined(_ACMP_HYSTERESIS0_HYST_MASK) #define ACMP_CAPSENSE_INIT_DEFAULT \ { \ false, /* Don't use fullBias to lower power consumption */ \ 0x20, /* Using biasProg value of 0x20 (32) */ \ acmpHysteresisLevel8, /* Use hysteresis level 8 when ACMP output is 0 */ \ acmpHysteresisLevel8, /* Use hysteresis level 8 when ACMP output is 1 */ \ acmpResistor5, /* Use internal resistor value 5 */ \ 0x30, /* VDD level high */ \ 0x10, /* VDD level low */ \ true /* Enable after init. */ \ } #elif defined(_ACMP_CTRL_WARMTIME_MASK) #define ACMP_CAPSENSE_INIT_DEFAULT \ { \ false, /* fullBias */ \ false, /* halfBias */ \ 0x7, /* biasProg */ \ acmpWarmTime512, /* 512 cycle warmup to be safe */ \ acmpHysteresisLevel5, \ acmpResistor3, \ false, /* low power reference */ \ 0x3D, /* VDD level */ \ true /* Enable after init. */ \ } #else #define ACMP_CAPSENSE_INIT_DEFAULT \ { \ false, /* fullBias */ \ false, /* halfBias */ \ 0x7, /* biasProg */ \ acmpHysteresisLevel5, \ acmpResistor3, \ false, /* low power reference */ \ 0x3D, /* VDD level */ \ true /* Enable after init. */ \ } #endif /** ACMP initialization structure. */ typedef struct { /** Full bias current. See the ACMP chapter about bias and response time in * the reference manual for details. */ bool fullBias; #if defined(_ACMP_CTRL_HALFBIAS_MASK) /** Half bias current. See the ACMP chapter about bias and response time in * the reference manual for details. */ bool halfBias; #endif /** Bias current. See the ACMP chapter about bias and response time in the * reference manual for details. Valid values are in the range 0-7. */ uint32_t biasProg; /** Enable setting the interrupt flag on falling edge */ bool interruptOnFallingEdge; /** Enable setting the interrupt flag on rising edge */ bool interruptOnRisingEdge; #if defined(_ACMP_CTRL_INPUTRANGE_MASK) /** Input range. Adjust this setting to optimize the performance for a * given input voltage range. */ ACMP_InputRange_TypeDef inputRange; #endif #if defined(_ACMP_CTRL_ACCURACY_MASK) /** ACMP accuracy mode. Select the accuracy mode that matches the * required current usage and accuracy requirement. Low accuracy * consumes less current while high accuracy consumes more current. */ ACMP_Accuracy_TypeDef accuracy; #endif #if defined(_ACMP_CTRL_PWRSEL_MASK) /** Select the power source for the ACMP. */ ACMP_PowerSource_TypeDef powerSource; #endif #if defined(_ACMP_CTRL_WARMTIME_MASK) /** Warmup time. This is measured in HFPERCLK cycles and should be * about 10us in wall clock time. */ ACMP_WarmTime_TypeDef warmTime; #endif #if defined(_ACMP_CTRL_HYSTSEL_MASK) /** Hysteresis level */ ACMP_HysteresisLevel_TypeDef hysteresisLevel; #else /** Hysteresis when ACMP output is 0 */ ACMP_HysteresisLevel_TypeDef hysteresisLevel_0; /** Hysteresis when ACMP output is 1 */ ACMP_HysteresisLevel_TypeDef hysteresisLevel_1; #endif #if defined(_ACMP_INPUTSEL_VLPSEL_MASK) /** VLP Input source. Select between using VADIV or VBDIV as the VLP * source. */ ACMP_VLPInput_Typedef vlpInput; #endif /** Inactive value emitted by the ACMP during warmup */ bool inactiveValue; #if defined(_ACMP_INPUTSEL_LPREF_MASK) /** Low power reference enabled. This setting, if enabled, reduces the * power used by the VDD and bandgap references. */ bool lowPowerReferenceEnabled; #endif #if defined(_ACMP_INPUTSEL_VDDLEVEL_MASK) /** Vdd reference value. VDD_SCALED = VDD * VDDLEVEL * 50mV/3.8V. * Valid values are in the range 0-63. */ uint32_t vddLevel; #endif /** If true, ACMP is being enabled after configuration. */ bool enable; } ACMP_Init_TypeDef; /** Default config for ACMP regular initialization. */ #if defined(_ACMP_HYSTERESIS0_HYST_MASK) #define ACMP_INIT_DEFAULT \ { \ false, /* fullBias */ \ 0x7, /* biasProg */ \ false, /* No interrupt on falling edge. */ \ false, /* No interrupt on rising edge. */ \ acmpInputRangeFull, /* Input range from 0 to Vdd. */ \ acmpAccuracyLow, /* Low accuracy, less current usage. */ \ acmpPowerSourceAvdd, /* Use the AVDD supply. */ \ acmpHysteresisLevel5, /* Use hysteresis level 5 when output is 0 */ \ acmpHysteresisLevel5, /* Use hysteresis level 5 when output is 1 */ \ acmpVLPInputVADIV, /* Use VADIV as the VLP input source. */ \ false, /* Output 0 when ACMP is inactive. */ \ true /* Enable after init. */ \ } #elif defined(_ACMP_CTRL_WARMTIME_MASK) #define ACMP_INIT_DEFAULT \ { \ false, /* fullBias */ \ false, /* halfBias */ \ 0x7, /* biasProg */ \ false, /* No interrupt on falling edge. */ \ false, /* No interrupt on rising edge. */ \ acmpWarmTime512, /* 512 cycle warmup to be safe */ \ acmpHysteresisLevel5, \ false, /* Disabled emitting inactive value during warmup. */ \ false, /* low power reference */ \ 0x3D, /* VDD level */ \ true /* Enable after init. */ \ } #else #define ACMP_INIT_DEFAULT \ { \ false, /* fullBias */ \ false, /* halfBias */ \ 0x7, /* biasProg */ \ false, /* No interrupt on falling edge. */ \ false, /* No interrupt on rising edge. */ \ acmpHysteresisLevel5, \ false, /* Disabled emitting inactive value during warmup. */ \ false, /* low power reference */ \ 0x3D, /* VDD level */ \ true /* Enable after init. */ \ } #endif #if defined(_ACMP_INPUTSEL_VASEL_MASK) /** VA Configuration structure. This struct is used to configure the * VA voltage input source and it's dividers. */ typedef struct { ACMP_VAInput_TypeDef input; /**< VA voltage input source */ /** * Divider for VA voltage input source when ACMP output is 0. This value is * used to divide the VA voltage input source by a specific value. The valid * range is between 0 and 63. * * VA divided = VA input * (div0 + 1) / 64 */ uint32_t div0; /** * Divider for VA voltage input source when ACMP output is 1. This value is * used to divide the VA voltage input source by a specific value. The valid * range is between 0 and 63. * * VA divided = VA input * (div1 + 1) / 64 */ uint32_t div1; } ACMP_VAConfig_TypeDef; #define ACMP_VACONFIG_DEFAULT \ { \ acmpVAInputVDD, /* Use Vdd as VA voltage input source */ \ 63, /* No division of the VA source when ACMP output is 0 */ \ 63, /* No division of the VA source when ACMP output is 1 */ \ } #endif #if defined(_ACMP_INPUTSEL_VBSEL_MASK) /** VB Configuration structure. This struct is used to configure the * VB voltage input source and it's dividers. */ typedef struct { ACMP_VBInput_TypeDef input; /**< VB Voltage input source */ /** * Divider for VB voltage input source when ACMP output is 0. This value is * used to divide the VB voltage input source by a specific value. The valid * range is between 0 and 63. * * VB divided = VB input * (div0 + 1) / 64 */ uint32_t div0; /** * Divider for VB voltage input source when ACMP output is 1. This value is * used to divide the VB voltage input source by a specific value. The valid * range is between 0 and 63. * * VB divided = VB input * (div1 + 1) / 64 */ uint32_t div1; } ACMP_VBConfig_TypeDef; #define ACMP_VBCONFIG_DEFAULT \ { \ acmpVBInput1V25, /* Use 1.25 V as VB voltage input source */ \ 63, /* No division of the VB source when ACMP output is 0 */ \ 63, /* No division of the VB source when ACMP output is 1 */ \ } #endif /******************************************************************************* ***************************** PROTOTYPES ********************************** ******************************************************************************/ void ACMP_CapsenseInit(ACMP_TypeDef *acmp, const ACMP_CapsenseInit_TypeDef *init); void ACMP_CapsenseChannelSet(ACMP_TypeDef *acmp, ACMP_Channel_TypeDef channel); void ACMP_ChannelSet(ACMP_TypeDef *acmp, ACMP_Channel_TypeDef negSel, ACMP_Channel_TypeDef posSel); void ACMP_Disable(ACMP_TypeDef *acmp); void ACMP_Enable(ACMP_TypeDef *acmp); void ACMP_GPIOSetup(ACMP_TypeDef *acmp, uint32_t location, bool enable, bool invert); void ACMP_Init(ACMP_TypeDef *acmp, const ACMP_Init_TypeDef *init); void ACMP_Reset(ACMP_TypeDef *acmp); #if defined(_ACMP_INPUTSEL_VASEL_MASK) void ACMP_VASetup(ACMP_TypeDef *acmp, const ACMP_VAConfig_TypeDef *vaconfig); #endif #if defined(_ACMP_INPUTSEL_VBSEL_MASK) void ACMP_VBSetup(ACMP_TypeDef *acmp, const ACMP_VBConfig_TypeDef *vbconfig); #endif /***************************************************************************//** * @brief * Clear one or more pending ACMP interrupts. * * @param[in] acmp * Pointer to ACMP peripheral register block. * * @param[in] flags * Pending ACMP interrupt source to clear. Use a bitwise logic OR combination * of valid interrupt flags for the ACMP module. The flags can be for instance * @ref ACMP_IFC_EDGE or @ref ACMP_IFC_WARMUP. ******************************************************************************/ __STATIC_INLINE void ACMP_IntClear(ACMP_TypeDef *acmp, uint32_t flags) { acmp->IFC = flags; } /***************************************************************************//** * @brief * Disable one or more ACMP interrupts. * * @param[in] acmp * Pointer to ACMP peripheral register block. * * @param[in] flags * ACMP interrupt sources to disable. Use a bitwise logic OR combination of * valid interrupt flags for the ACMP module. The flags can be for instance * @ref ACMP_IEN_EDGE or @ref ACMP_IEN_WARMUP. ******************************************************************************/ __STATIC_INLINE void ACMP_IntDisable(ACMP_TypeDef *acmp, uint32_t flags) { acmp->IEN &= ~(flags); } /***************************************************************************//** * @brief * Enable one or more ACMP interrupts. * * @note * Depending on the use, a pending interrupt may already be set prior to * enabling the interrupt. Consider using ACMP_IntClear() prior to enabling * if such a pending interrupt should be ignored. * * @param[in] acmp * Pointer to ACMP peripheral register block. * * @param[in] flags * ACMP interrupt sources to enable. Use a bitwise logic OR combination of * valid interrupt flags for the ACMP module. The flags can be for instance * @ref ACMP_IEN_EDGE or @ref ACMP_IEN_WARMUP. ******************************************************************************/ __STATIC_INLINE void ACMP_IntEnable(ACMP_TypeDef *acmp, uint32_t flags) { acmp->IEN |= flags; } /***************************************************************************//** * @brief * Get pending ACMP interrupt flags. * * @note * The event bits are not cleared by the use of this function. * * @param[in] acmp * Pointer to ACMP peripheral register block. * * @return * ACMP interrupt sources pending. A bitwise logic OR combination of valid * interrupt flags for the ACMP module. The pending interrupt sources can be * for instance @ref ACMP_IF_EDGE or @ref ACMP_IF_WARMUP. ******************************************************************************/ __STATIC_INLINE uint32_t ACMP_IntGet(ACMP_TypeDef *acmp) { return acmp->IF; } /***************************************************************************//** * @brief * Get enabled and pending ACMP interrupt flags. * Useful for handling more interrupt sources in the same interrupt handler. * * @param[in] acmp * Pointer to ACMP peripheral register block. * * @note * Interrupt flags are not cleared by the use of this function. * * @return * Pending and enabled ACMP interrupt sources. * The return value is the bitwise AND combination of * - the OR combination of enabled interrupt sources in ACMPx_IEN_nnn * register (ACMPx_IEN_nnn) and * - the OR combination of valid interrupt flags of the ACMP module * (ACMPx_IF_nnn). ******************************************************************************/ __STATIC_INLINE uint32_t ACMP_IntGetEnabled(ACMP_TypeDef *acmp) { uint32_t tmp; /* Store ACMPx->IEN in temporary variable in order to define explicit order * of volatile accesses. */ tmp = acmp->IEN; /* Bitwise AND of pending and enabled interrupts */ return acmp->IF & tmp; } /***************************************************************************//** * @brief * Set one or more pending ACMP interrupts from SW. * * @param[in] acmp * Pointer to ACMP peripheral register block. * * @param[in] flags * ACMP interrupt sources to set to pending. Use a bitwise logic OR * combination of valid interrupt flags for the ACMP module. The flags can be * for instance @ref ACMP_IFS_EDGE or @ref ACMP_IFS_WARMUP. ******************************************************************************/ __STATIC_INLINE void ACMP_IntSet(ACMP_TypeDef *acmp, uint32_t flags) { acmp->IFS = flags; } /** @} (end addtogroup ACMP) */ /** @} (end addtogroup emlib) */ #ifdef __cplusplus } #endif #endif /* defined(ACMP_COUNT) && (ACMP_COUNT > 0) */ #endif /* EM_ACMP_H */