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.

Revision:
171:3a7713b1edbc
Parent:
160:5571c4ff569f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TARGET_EFM32LG_STK3600/TOOLCHAIN_IAR/em_acmp.h	Thu Nov 08 11:45:42 2018 +0000
@@ -0,0 +1,985 @@
+/***************************************************************************//**
+ * @file em_acmp.h
+ * @brief Analog Comparator (ACMP) peripheral API
+ * @version 5.3.3
+ *******************************************************************************
+ * # 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(_ACMP_INPUTSEL_POSSEL_APORT0XCH0)
+/** 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,
+#if defined(_ACMP_INPUTSEL_POSSEL_DACOUT0)
+  acmpInputDACOUT0   = _ACMP_INPUTSEL_POSSEL_DACOUT0,
+#endif
+#if defined(_ACMP_INPUTSEL_POSSEL_DACOUT1)
+  acmpInputDACOUT1   = _ACMP_INPUTSEL_POSSEL_DACOUT1,
+#endif
+  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
+
+#if defined(_ACMP_EXTIFCTRL_MASK)
+/**
+ * ACMP External input select. This type is used to select which APORT that is
+ * used by an external module like LESENSE when it's taking control over
+ * the ACMP input.
+ */
+typedef enum {
+  acmpExternalInputAPORT0X  = _ACMP_EXTIFCTRL_APORTSEL_APORT0X,
+  acmpExternalInputAPORT0Y  = _ACMP_EXTIFCTRL_APORTSEL_APORT0Y,
+  acmpExternalInputAPORT1X  = _ACMP_EXTIFCTRL_APORTSEL_APORT1X,
+  acmpExternalInputAPORT1Y  = _ACMP_EXTIFCTRL_APORTSEL_APORT1Y,
+  acmpExternalInputAPORT1XY = _ACMP_EXTIFCTRL_APORTSEL_APORT1XY,
+  acmpExternalInputAPORT2X  = _ACMP_EXTIFCTRL_APORTSEL_APORT2X,
+  acmpExternalInputAPORT2Y  = _ACMP_EXTIFCTRL_APORTSEL_APORT2Y,
+  acmpExternalInputAPORT2YX = _ACMP_EXTIFCTRL_APORTSEL_APORT2YX,
+  acmpExternalInputAPORT3X  = _ACMP_EXTIFCTRL_APORTSEL_APORT3X,
+  acmpExternalInputAPORT3Y  = _ACMP_EXTIFCTRL_APORTSEL_APORT3Y,
+  acmpExternalInputAPORT3XY = _ACMP_EXTIFCTRL_APORTSEL_APORT3XY,
+  acmpExternalInputAPORT4X  = _ACMP_EXTIFCTRL_APORTSEL_APORT4X,
+  acmpExternalInputAPORT4Y  = _ACMP_EXTIFCTRL_APORTSEL_APORT4Y,
+  acmpExternalInputAPORT4YX = _ACMP_EXTIFCTRL_APORTSEL_APORT4YX,
+} ACMP_ExternalInput_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);
+#if defined(_ACMP_EXTIFCTRL_MASK)
+void ACMP_ExternalInputSelect(ACMP_TypeDef *acmp, ACMP_ExternalInput_Typedef aport);
+#endif
+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 */