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.

Committer:
AnnaBridge
Date:
Thu Nov 08 11:45:42 2018 +0000
Revision:
171:3a7713b1edbc
Parent:
TARGET_EFM32GG_STK3700/TARGET_Silicon_Labs/TARGET_EFM32/emlib/inc/em_lesense.h@160:5571c4ff569f
mbed library. Release version 164

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 156:ff21514d8981 1 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 2 * @file em_lesense.h
AnnaBridge 156:ff21514d8981 3 * @brief Low Energy Sensor (LESENSE) peripheral API
Anna Bridge 160:5571c4ff569f 4 * @version 5.3.3
AnnaBridge 156:ff21514d8981 5 *******************************************************************************
Anna Bridge 160:5571c4ff569f 6 * # License
AnnaBridge 156:ff21514d8981 7 * <b>Copyright 2016 Silicon Laboratories, Inc. http://www.silabs.com</b>
AnnaBridge 156:ff21514d8981 8 *******************************************************************************
AnnaBridge 156:ff21514d8981 9 *
AnnaBridge 156:ff21514d8981 10 * Permission is granted to anyone to use this software for any purpose,
AnnaBridge 156:ff21514d8981 11 * including commercial applications, and to alter it and redistribute it
AnnaBridge 156:ff21514d8981 12 * freely, subject to the following restrictions:
AnnaBridge 156:ff21514d8981 13 *
AnnaBridge 156:ff21514d8981 14 * 1. The origin of this software must not be misrepresented; you must not
AnnaBridge 156:ff21514d8981 15 * claim that you wrote the original software.
AnnaBridge 156:ff21514d8981 16 * 2. Altered source versions must be plainly marked as such, and must not be
AnnaBridge 156:ff21514d8981 17 * misrepresented as being the original software.
AnnaBridge 156:ff21514d8981 18 * 3. This notice may not be removed or altered from any source distribution.
AnnaBridge 156:ff21514d8981 19 *
AnnaBridge 156:ff21514d8981 20 * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no
AnnaBridge 156:ff21514d8981 21 * obligation to support this Software. Silicon Labs is providing the
AnnaBridge 156:ff21514d8981 22 * Software "AS IS", with no express or implied warranties of any kind,
AnnaBridge 156:ff21514d8981 23 * including, but not limited to, any implied warranties of merchantability
AnnaBridge 156:ff21514d8981 24 * or fitness for any particular purpose or warranties against infringement
AnnaBridge 156:ff21514d8981 25 * of any proprietary rights of a third party.
AnnaBridge 156:ff21514d8981 26 *
AnnaBridge 156:ff21514d8981 27 * Silicon Labs will not be liable for any consequential, incidental, or
AnnaBridge 156:ff21514d8981 28 * special damages, or any other relief, or for any claim by any third party,
AnnaBridge 156:ff21514d8981 29 * arising from your use of this Software.
AnnaBridge 156:ff21514d8981 30 *
AnnaBridge 156:ff21514d8981 31 ******************************************************************************/
AnnaBridge 156:ff21514d8981 32
AnnaBridge 156:ff21514d8981 33 #ifndef EM_LESENSE_H
AnnaBridge 156:ff21514d8981 34 #define EM_LESENSE_H
AnnaBridge 156:ff21514d8981 35
AnnaBridge 156:ff21514d8981 36 #include "em_device.h"
AnnaBridge 156:ff21514d8981 37
AnnaBridge 156:ff21514d8981 38 #if defined(LESENSE_COUNT) && (LESENSE_COUNT > 0)
AnnaBridge 156:ff21514d8981 39 #include <stdint.h>
AnnaBridge 156:ff21514d8981 40 #include <stdbool.h>
AnnaBridge 156:ff21514d8981 41
AnnaBridge 156:ff21514d8981 42 #ifdef __cplusplus
AnnaBridge 156:ff21514d8981 43 extern "C" {
AnnaBridge 156:ff21514d8981 44 #endif
AnnaBridge 156:ff21514d8981 45
AnnaBridge 156:ff21514d8981 46 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 47 * @addtogroup emlib
AnnaBridge 156:ff21514d8981 48 * @{
AnnaBridge 156:ff21514d8981 49 ******************************************************************************/
AnnaBridge 156:ff21514d8981 50
AnnaBridge 156:ff21514d8981 51 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 52 * @addtogroup LESENSE
AnnaBridge 156:ff21514d8981 53 * @{
AnnaBridge 156:ff21514d8981 54 ******************************************************************************/
AnnaBridge 156:ff21514d8981 55
AnnaBridge 156:ff21514d8981 56 /** Number of decoder states supported by current device. */
AnnaBridge 156:ff21514d8981 57 #define LESENSE_NUM_DECODER_STATES (_LESENSE_DECSTATE_DECSTATE_MASK + 1)
AnnaBridge 156:ff21514d8981 58
AnnaBridge 156:ff21514d8981 59 /** Number of LESENSE channels. */
AnnaBridge 156:ff21514d8981 60 #define LESENSE_NUM_CHANNELS 16
AnnaBridge 156:ff21514d8981 61
AnnaBridge 156:ff21514d8981 62 /*******************************************************************************
AnnaBridge 156:ff21514d8981 63 ******************************** ENUMS ************************************
AnnaBridge 156:ff21514d8981 64 ******************************************************************************/
AnnaBridge 156:ff21514d8981 65
AnnaBridge 156:ff21514d8981 66 /** Clock divisors for controlling the prescaling factor of the period
AnnaBridge 156:ff21514d8981 67 * counter.
AnnaBridge 156:ff21514d8981 68 * Note: these enumeration values are being used for different clock division
AnnaBridge 156:ff21514d8981 69 * related configuration parameters (hfPresc, lfPresc, pcPresc). */
Anna Bridge 160:5571c4ff569f 70 typedef enum {
AnnaBridge 156:ff21514d8981 71 lesenseClkDiv_1 = 0, /**< Divide clock by 1. */
AnnaBridge 156:ff21514d8981 72 lesenseClkDiv_2 = 1, /**< Divide clock by 2. */
AnnaBridge 156:ff21514d8981 73 lesenseClkDiv_4 = 2, /**< Divide clock by 4. */
AnnaBridge 156:ff21514d8981 74 lesenseClkDiv_8 = 3, /**< Divide clock by 8. */
AnnaBridge 156:ff21514d8981 75 lesenseClkDiv_16 = 4, /**< Divide clock by 16. */
AnnaBridge 156:ff21514d8981 76 lesenseClkDiv_32 = 5, /**< Divide clock by 32. */
AnnaBridge 156:ff21514d8981 77 lesenseClkDiv_64 = 6, /**< Divide clock by 64. */
AnnaBridge 156:ff21514d8981 78 lesenseClkDiv_128 = 7 /**< Divide clock by 128. */
AnnaBridge 156:ff21514d8981 79 } LESENSE_ClkPresc_TypeDef;
AnnaBridge 156:ff21514d8981 80
AnnaBridge 156:ff21514d8981 81 /** Scan modes. */
Anna Bridge 160:5571c4ff569f 82 typedef enum {
AnnaBridge 156:ff21514d8981 83 /** New scan is started each time the period counter overflows. */
AnnaBridge 156:ff21514d8981 84 lesenseScanStartPeriodic = LESENSE_CTRL_SCANMODE_PERIODIC,
AnnaBridge 156:ff21514d8981 85
AnnaBridge 156:ff21514d8981 86 /** Single scan is performed when LESENSE_ScanStart() is called. */
AnnaBridge 156:ff21514d8981 87 lesenseScanStartOneShot = LESENSE_CTRL_SCANMODE_ONESHOT,
AnnaBridge 156:ff21514d8981 88
AnnaBridge 156:ff21514d8981 89 /** New scan is triggered by pulse on PRS channel. */
AnnaBridge 156:ff21514d8981 90 lesenseScanStartPRS = LESENSE_CTRL_SCANMODE_PRS
AnnaBridge 156:ff21514d8981 91 } LESENSE_ScanMode_TypeDef;
AnnaBridge 156:ff21514d8981 92
AnnaBridge 156:ff21514d8981 93 /** PRS sources.
AnnaBridge 156:ff21514d8981 94 * Note: these enumeration values are being used for different PRS related
AnnaBridge 156:ff21514d8981 95 * configuration parameters. */
Anna Bridge 160:5571c4ff569f 96 typedef enum {
AnnaBridge 156:ff21514d8981 97 lesensePRSCh0 = 0, /**< PRS channel 0. */
AnnaBridge 156:ff21514d8981 98 lesensePRSCh1 = 1, /**< PRS channel 1. */
AnnaBridge 156:ff21514d8981 99 lesensePRSCh2 = 2, /**< PRS channel 2. */
AnnaBridge 156:ff21514d8981 100 lesensePRSCh3 = 3, /**< PRS channel 3. */
Anna Bridge 160:5571c4ff569f 101 #if defined(LESENSE_CTRL_PRSSEL_PRSCH4)
AnnaBridge 156:ff21514d8981 102 lesensePRSCh4 = 4, /**< PRS channel 4. */
AnnaBridge 156:ff21514d8981 103 #endif
Anna Bridge 160:5571c4ff569f 104 #if defined(LESENSE_CTRL_PRSSEL_PRSCH5)
AnnaBridge 156:ff21514d8981 105 lesensePRSCh5 = 5, /**< PRS channel 5. */
AnnaBridge 156:ff21514d8981 106 #endif
Anna Bridge 160:5571c4ff569f 107 #if defined(LESENSE_CTRL_PRSSEL_PRSCH6)
AnnaBridge 156:ff21514d8981 108 lesensePRSCh6 = 6, /**< PRS channel 6. */
AnnaBridge 156:ff21514d8981 109 #endif
Anna Bridge 160:5571c4ff569f 110 #if defined(LESENSE_CTRL_PRSSEL_PRSCH7)
AnnaBridge 156:ff21514d8981 111 lesensePRSCh7 = 7, /**< PRS channel 7. */
AnnaBridge 156:ff21514d8981 112 #endif
Anna Bridge 160:5571c4ff569f 113 #if defined(LESENSE_CTRL_PRSSEL_PRSCH8)
AnnaBridge 156:ff21514d8981 114 lesensePRSCh8 = 8, /**< PRS channel 8. */
AnnaBridge 156:ff21514d8981 115 #endif
Anna Bridge 160:5571c4ff569f 116 #if defined(LESENSE_CTRL_PRSSEL_PRSCH9)
AnnaBridge 156:ff21514d8981 117 lesensePRSCh9 = 9, /**< PRS channel 9. */
AnnaBridge 156:ff21514d8981 118 #endif
Anna Bridge 160:5571c4ff569f 119 #if defined(LESENSE_CTRL_PRSSEL_PRSCH10)
AnnaBridge 156:ff21514d8981 120 lesensePRSCh10 = 10, /**< PRS channel 10.*/
AnnaBridge 156:ff21514d8981 121 #endif
Anna Bridge 160:5571c4ff569f 122 #if defined(LESENSE_CTRL_PRSSEL_PRSCH11)
AnnaBridge 156:ff21514d8981 123 lesensePRSCh11 = 11, /**< PRS channel 11.*/
AnnaBridge 156:ff21514d8981 124 #endif
AnnaBridge 156:ff21514d8981 125 } LESENSE_PRSSel_TypeDef;
AnnaBridge 156:ff21514d8981 126
AnnaBridge 156:ff21514d8981 127 /** Locations of the alternate excitation function. */
Anna Bridge 160:5571c4ff569f 128 typedef enum {
AnnaBridge 156:ff21514d8981 129 /** Alternate excitation is mapped to the LES_ALTEX pins. */
AnnaBridge 156:ff21514d8981 130 lesenseAltExMapALTEX = _LESENSE_CTRL_ALTEXMAP_ALTEX,
AnnaBridge 156:ff21514d8981 131
AnnaBridge 156:ff21514d8981 132 #if defined(_LESENSE_CTRL_ALTEXMAP_ACMP)
AnnaBridge 156:ff21514d8981 133 /** Alternate excitation is mapped to the pins of the other ACMP. */
AnnaBridge 156:ff21514d8981 134 lesenseAltExMapACMP = _LESENSE_CTRL_ALTEXMAP_ACMP,
AnnaBridge 156:ff21514d8981 135 #endif
AnnaBridge 156:ff21514d8981 136
AnnaBridge 156:ff21514d8981 137 #if defined(_LESENSE_CTRL_ALTEXMAP_CH)
AnnaBridge 156:ff21514d8981 138 /** Alternative excitation is mapped to the pin of LESENSE channel
AnnaBridge 156:ff21514d8981 139 * (X+8 mod 16), X being the active channel. */
AnnaBridge 156:ff21514d8981 140 lesenseAltExMapCH = _LESENSE_CTRL_ALTEXMAP_CH,
AnnaBridge 156:ff21514d8981 141 #endif
AnnaBridge 156:ff21514d8981 142 } LESENSE_AltExMap_TypeDef;
AnnaBridge 156:ff21514d8981 143
AnnaBridge 156:ff21514d8981 144 /** Result buffer interrupt and DMA trigger levels. */
Anna Bridge 160:5571c4ff569f 145 typedef enum {
AnnaBridge 156:ff21514d8981 146 /** DMA and interrupt flags are set when result buffer is halffull. */
AnnaBridge 156:ff21514d8981 147 lesenseBufTrigHalf = LESENSE_CTRL_BUFIDL_HALFFULL,
AnnaBridge 156:ff21514d8981 148
AnnaBridge 156:ff21514d8981 149 /** DMA and interrupt flags set when result buffer is full. */
AnnaBridge 156:ff21514d8981 150 lesenseBufTrigFull = LESENSE_CTRL_BUFIDL_FULL
AnnaBridge 156:ff21514d8981 151 } LESENSE_BufTrigLevel_TypeDef;
AnnaBridge 156:ff21514d8981 152
AnnaBridge 156:ff21514d8981 153 /** Modes of operation for DMA wakeup from EM2. */
Anna Bridge 160:5571c4ff569f 154 typedef enum {
AnnaBridge 156:ff21514d8981 155 /** No DMA wakeup from EM2. */
AnnaBridge 156:ff21514d8981 156 lesenseDMAWakeUpDisable = LESENSE_CTRL_DMAWU_DISABLE,
AnnaBridge 156:ff21514d8981 157
AnnaBridge 156:ff21514d8981 158 /** DMA wakeup from EM2 when data is valid in the result buffer. */
AnnaBridge 156:ff21514d8981 159 lesenseDMAWakeUpBufValid = LESENSE_CTRL_DMAWU_BUFDATAV,
AnnaBridge 156:ff21514d8981 160
AnnaBridge 156:ff21514d8981 161 /** DMA wakeup from EM2 when the resultbuffer is full/halffull, depending on
AnnaBridge 156:ff21514d8981 162 * RESBIDL configuration in LESENSE_CTRL register (selected by
AnnaBridge 156:ff21514d8981 163 * resBufTrigLevel in LESENSE_ResBufTrigLevel_TypeDef descriptor structure). */
AnnaBridge 156:ff21514d8981 164 lesenseDMAWakeUpBufLevel = LESENSE_CTRL_DMAWU_BUFLEVEL
AnnaBridge 156:ff21514d8981 165 } LESENSE_DMAWakeUp_TypeDef;
AnnaBridge 156:ff21514d8981 166
AnnaBridge 156:ff21514d8981 167 /** Bias modes. */
Anna Bridge 160:5571c4ff569f 168 typedef enum {
AnnaBridge 156:ff21514d8981 169 /** Duty cycle bias module between low power and high accuracy mode. */
AnnaBridge 156:ff21514d8981 170 lesenseBiasModeDutyCycle = LESENSE_BIASCTRL_BIASMODE_DUTYCYCLE,
AnnaBridge 156:ff21514d8981 171
AnnaBridge 156:ff21514d8981 172 /** Bias module is always in high accuracy mode. */
AnnaBridge 156:ff21514d8981 173 lesenseBiasModeHighAcc = LESENSE_BIASCTRL_BIASMODE_HIGHACC,
AnnaBridge 156:ff21514d8981 174
AnnaBridge 156:ff21514d8981 175 /** Bias module is controlled by the EMU and not affected by LESENSE. */
AnnaBridge 156:ff21514d8981 176 lesenseBiasModeDontTouch = LESENSE_BIASCTRL_BIASMODE_DONTTOUCH
AnnaBridge 156:ff21514d8981 177 } LESENSE_BiasMode_TypeDef;
AnnaBridge 156:ff21514d8981 178
AnnaBridge 156:ff21514d8981 179 /** Scan configuration. */
Anna Bridge 160:5571c4ff569f 180 typedef enum {
AnnaBridge 156:ff21514d8981 181 /** The channel configuration registers (CHx_CONF) used are directly mapped to
AnnaBridge 156:ff21514d8981 182 * the channel number. */
AnnaBridge 156:ff21514d8981 183 lesenseScanConfDirMap = LESENSE_CTRL_SCANCONF_DIRMAP,
AnnaBridge 156:ff21514d8981 184
AnnaBridge 156:ff21514d8981 185 /** The channel configuration registers used are CHx+8_CONF for channels 0-7
AnnaBridge 156:ff21514d8981 186 * and CHx-8_CONF for channels 8-15. */
AnnaBridge 156:ff21514d8981 187 lesenseScanConfInvMap = LESENSE_CTRL_SCANCONF_INVMAP,
AnnaBridge 156:ff21514d8981 188
AnnaBridge 156:ff21514d8981 189 /** The channel configuration registers used toggles between CHX_SCANCONF and
AnnaBridge 156:ff21514d8981 190 * CHX+8_SCANCONF when channel x triggers. */
AnnaBridge 156:ff21514d8981 191 lesenseScanConfToggle = LESENSE_CTRL_SCANCONF_TOGGLE,
AnnaBridge 156:ff21514d8981 192
AnnaBridge 156:ff21514d8981 193 /** The decoder state defines the channel configuration register (CHx_CONF) to
AnnaBridge 156:ff21514d8981 194 * be used. */
AnnaBridge 156:ff21514d8981 195 lesenseScanConfDecDef = LESENSE_CTRL_SCANCONF_DECDEF
AnnaBridge 156:ff21514d8981 196 } LESENSE_ScanConfSel_TypeDef;
AnnaBridge 156:ff21514d8981 197
AnnaBridge 156:ff21514d8981 198 /** DAC CHx data control configuration. */
Anna Bridge 160:5571c4ff569f 199 typedef enum {
AnnaBridge 156:ff21514d8981 200 /** DAC channel x data is defined by DAC_CHxDATA register.
AnnaBridge 156:ff21514d8981 201 * Note: this value could be used for both DAC Ch0 and Ch1. */
AnnaBridge 156:ff21514d8981 202 lesenseDACIfData = _LESENSE_PERCTRL_DACCH0DATA_DACDATA,
AnnaBridge 156:ff21514d8981 203
AnnaBridge 156:ff21514d8981 204 #if defined(_LESENSE_PERCTRL_DACCH0DATA_ACMPTHRES)
AnnaBridge 156:ff21514d8981 205 /** DAC channel x data is defined by ACMPTHRES in LESENSE_CHx_INTERACT.
AnnaBridge 156:ff21514d8981 206 * Note: this value could be used for both DAC Ch0 and Ch1. */
AnnaBridge 156:ff21514d8981 207 lesenseACMPThres = _LESENSE_PERCTRL_DACCH0DATA_ACMPTHRES,
AnnaBridge 156:ff21514d8981 208 #endif
AnnaBridge 156:ff21514d8981 209
AnnaBridge 156:ff21514d8981 210 #if defined(_LESENSE_PERCTRL_DACCH0DATA_THRES)
AnnaBridge 156:ff21514d8981 211 /** DAC channel x data is defined by THRES in LESENSE_CHx_INTERACT.
AnnaBridge 156:ff21514d8981 212 * Note: this value could be used for both DAC Ch0 and Ch1. */
AnnaBridge 156:ff21514d8981 213 lesenseThres = _LESENSE_PERCTRL_DACCH0DATA_THRES,
AnnaBridge 156:ff21514d8981 214 #endif
AnnaBridge 156:ff21514d8981 215 } LESENSE_ControlDACData_TypeDef;
AnnaBridge 156:ff21514d8981 216
AnnaBridge 156:ff21514d8981 217 #if defined(_LESENSE_PERCTRL_DACCH0CONV_MASK)
AnnaBridge 156:ff21514d8981 218 /** DAC channel x conversion mode configuration. */
Anna Bridge 160:5571c4ff569f 219 typedef enum {
AnnaBridge 156:ff21514d8981 220 /** LESENSE doesn't control DAC channel x.
AnnaBridge 156:ff21514d8981 221 * Note: this value could be used for both DAC Ch0 and Ch1. */
AnnaBridge 156:ff21514d8981 222 lesenseDACConvModeDisable = _LESENSE_PERCTRL_DACCH0CONV_DISABLE,
AnnaBridge 156:ff21514d8981 223
AnnaBridge 156:ff21514d8981 224 /** DAC channel x is driven in continuous mode.
AnnaBridge 156:ff21514d8981 225 * Note: this value could be used for both DAC Ch0 and Ch1. */
AnnaBridge 156:ff21514d8981 226 lesenseDACConvModeContinuous = _LESENSE_PERCTRL_DACCH0CONV_CONTINUOUS,
AnnaBridge 156:ff21514d8981 227
AnnaBridge 156:ff21514d8981 228 /** DAC channel x is driven in sample hold mode.
AnnaBridge 156:ff21514d8981 229 * Note: this value could be used for both DAC Ch0 and Ch1. */
AnnaBridge 156:ff21514d8981 230 lesenseDACConvModeSampleHold = _LESENSE_PERCTRL_DACCH0CONV_SAMPLEHOLD,
AnnaBridge 156:ff21514d8981 231
AnnaBridge 156:ff21514d8981 232 /** DAC channel x is driven in sample off mode.
AnnaBridge 156:ff21514d8981 233 * Note: this value could be used for both DAC Ch0 and Ch1. */
AnnaBridge 156:ff21514d8981 234 lesenseDACConvModeSampleOff = _LESENSE_PERCTRL_DACCH0CONV_SAMPLEOFF
AnnaBridge 156:ff21514d8981 235 } LESENSE_ControlDACConv_TypeDef;
AnnaBridge 156:ff21514d8981 236 #endif
AnnaBridge 156:ff21514d8981 237
AnnaBridge 156:ff21514d8981 238 #if defined(_LESENSE_PERCTRL_DACCH0OUT_MASK)
AnnaBridge 156:ff21514d8981 239 /** DAC channel x output mode configuration. */
Anna Bridge 160:5571c4ff569f 240 typedef enum {
AnnaBridge 156:ff21514d8981 241 /** DAC CHx output to pin and ACMP/ADC disabled.
AnnaBridge 156:ff21514d8981 242 * Note: this value could be used for both DAC Ch0 and Ch1. */
AnnaBridge 156:ff21514d8981 243 lesenseDACOutModeDisable = _LESENSE_PERCTRL_DACCH0OUT_DISABLE,
AnnaBridge 156:ff21514d8981 244
AnnaBridge 156:ff21514d8981 245 /** DAC CHx output to pin enabled, output to ADC and ACMP disabled.
AnnaBridge 156:ff21514d8981 246 * Note: this value could be used for both DAC Ch0 and Ch1. */
AnnaBridge 156:ff21514d8981 247 lesenseDACOutModePin = _LESENSE_PERCTRL_DACCH0OUT_PIN,
AnnaBridge 156:ff21514d8981 248
AnnaBridge 156:ff21514d8981 249 /** DAC CHx output to pin disabled, output to ADC and ACMP enabled.
AnnaBridge 156:ff21514d8981 250 * Note: this value could be used for both DAC Ch0 and Ch1. */
AnnaBridge 156:ff21514d8981 251 lesenseDACOutModeADCACMP = _LESENSE_PERCTRL_DACCH0OUT_ADCACMP,
AnnaBridge 156:ff21514d8981 252
AnnaBridge 156:ff21514d8981 253 /** DAC CHx output to pin, ADC, and ACMP enabled.
AnnaBridge 156:ff21514d8981 254 * Note: this value could be used for both DAC Ch0 and Ch1. */
AnnaBridge 156:ff21514d8981 255 lesenseDACOutModePinADCACMP = _LESENSE_PERCTRL_DACCH0OUT_PINADCACMP
AnnaBridge 156:ff21514d8981 256 } LESENSE_ControlDACOut_TypeDef;
AnnaBridge 156:ff21514d8981 257 #endif
AnnaBridge 156:ff21514d8981 258
AnnaBridge 156:ff21514d8981 259 #if defined(_LESENSE_PERCTRL_DACREF_MASK)
AnnaBridge 156:ff21514d8981 260 /** DAC reference configuration. */
Anna Bridge 160:5571c4ff569f 261 typedef enum {
AnnaBridge 156:ff21514d8981 262 /** DAC uses VDD reference. */
AnnaBridge 156:ff21514d8981 263 lesenseDACRefVdd = LESENSE_PERCTRL_DACREF_VDD,
AnnaBridge 156:ff21514d8981 264
AnnaBridge 156:ff21514d8981 265 /** DAC uses bandgap reference. */
AnnaBridge 156:ff21514d8981 266 lesenseDACRefBandGap = LESENSE_PERCTRL_DACREF_BANDGAP
AnnaBridge 156:ff21514d8981 267 } LESENSE_DACRef_TypeDef;
AnnaBridge 156:ff21514d8981 268 #endif
AnnaBridge 156:ff21514d8981 269
AnnaBridge 156:ff21514d8981 270 /** ACMPx control configuration. */
Anna Bridge 160:5571c4ff569f 271 typedef enum {
AnnaBridge 156:ff21514d8981 272 /** LESENSE does not control the ACMPx.
AnnaBridge 156:ff21514d8981 273 * Note: this value could be used for both ACMP0 and ACMP1. */
AnnaBridge 156:ff21514d8981 274 lesenseACMPModeDisable = _LESENSE_PERCTRL_ACMP0MODE_DISABLE,
AnnaBridge 156:ff21514d8981 275
AnnaBridge 156:ff21514d8981 276 /** LESENSE controls the input mux of ACMPx.
AnnaBridge 156:ff21514d8981 277 * Note: this value could be used for both ACMP0 and ACMP1. */
AnnaBridge 156:ff21514d8981 278 lesenseACMPModeMux = _LESENSE_PERCTRL_ACMP0MODE_MUX,
AnnaBridge 156:ff21514d8981 279
AnnaBridge 156:ff21514d8981 280 /** LESENSE controls the input mux of and the threshold value of ACMPx.
AnnaBridge 156:ff21514d8981 281 * Note: this value could be used for both ACMP0 and ACMP1. */
AnnaBridge 156:ff21514d8981 282 lesenseACMPModeMuxThres = _LESENSE_PERCTRL_ACMP0MODE_MUXTHRES
AnnaBridge 156:ff21514d8981 283 } LESENSE_ControlACMP_TypeDef;
AnnaBridge 156:ff21514d8981 284
AnnaBridge 156:ff21514d8981 285 /** Warm up modes. ACMP and DAC duty cycle mode configuration. */
Anna Bridge 160:5571c4ff569f 286 typedef enum {
AnnaBridge 156:ff21514d8981 287 /** ACMPs and DACs are shut down when LESENSE is idle. */
AnnaBridge 156:ff21514d8981 288 lesenseWarmupModeNormal = LESENSE_PERCTRL_WARMUPMODE_NORMAL,
AnnaBridge 156:ff21514d8981 289
AnnaBridge 156:ff21514d8981 290 /** ACMPs are kept powered up when LESENSE is idle. */
AnnaBridge 156:ff21514d8981 291 lesenseWarmupModeACMP = LESENSE_PERCTRL_WARMUPMODE_KEEPACMPWARM,
AnnaBridge 156:ff21514d8981 292
AnnaBridge 156:ff21514d8981 293 /** The DAC is kept powered up when LESENSE is idle. */
AnnaBridge 156:ff21514d8981 294 lesenseWarmupModeDAC = LESENSE_PERCTRL_WARMUPMODE_KEEPDACWARM,
AnnaBridge 156:ff21514d8981 295
AnnaBridge 156:ff21514d8981 296 /** ACMPs and the DAC are kept powered up when LESENSE is idle. */
AnnaBridge 156:ff21514d8981 297 lesenseWarmupModeKeepWarm = LESENSE_PERCTRL_WARMUPMODE_KEEPACMPDACWARM
AnnaBridge 156:ff21514d8981 298 } LESENSE_WarmupMode_TypeDef;
AnnaBridge 156:ff21514d8981 299
AnnaBridge 156:ff21514d8981 300 /** Decoder input source configuration. */
Anna Bridge 160:5571c4ff569f 301 typedef enum {
AnnaBridge 156:ff21514d8981 302 /** The SENSORSTATE register is used as input to the decoder. */
AnnaBridge 156:ff21514d8981 303 lesenseDecInputSensorSt = LESENSE_DECCTRL_INPUT_SENSORSTATE,
AnnaBridge 156:ff21514d8981 304
AnnaBridge 156:ff21514d8981 305 /** PRS channels are used as input to the decoder. */
AnnaBridge 156:ff21514d8981 306 lesenseDecInputPRS = LESENSE_DECCTRL_INPUT_PRS
AnnaBridge 156:ff21514d8981 307 } LESENSE_DecInput_TypeDef;
AnnaBridge 156:ff21514d8981 308
AnnaBridge 156:ff21514d8981 309 /** Compare source selection for sensor sampling. */
Anna Bridge 160:5571c4ff569f 310 typedef enum {
AnnaBridge 156:ff21514d8981 311 /** Counter output will be used in comparison. */
AnnaBridge 156:ff21514d8981 312 lesenseSampleModeCounter = 0x0 << _LESENSE_CH_INTERACT_SAMPLE_SHIFT,
AnnaBridge 156:ff21514d8981 313
Anna Bridge 160:5571c4ff569f 314 /** ACMP output will be used in comparison. */
Anna Bridge 160:5571c4ff569f 315 lesenseSampleModeACMP = LESENSE_CH_INTERACT_SAMPLE_ACMP,
AnnaBridge 156:ff21514d8981 316
AnnaBridge 156:ff21514d8981 317 #if defined(LESENSE_CH_INTERACT_SAMPLE_ADC)
AnnaBridge 156:ff21514d8981 318 /** ADC output will be used in comparison. */
AnnaBridge 156:ff21514d8981 319 lesenseSampleModeADC = LESENSE_CH_INTERACT_SAMPLE_ADC,
AnnaBridge 156:ff21514d8981 320
AnnaBridge 156:ff21514d8981 321 /** Differential ADC output will be used in comparison. */
AnnaBridge 156:ff21514d8981 322 lesenseSampleModeADCDiff = LESENSE_CH_INTERACT_SAMPLE_ADCDIFF,
AnnaBridge 156:ff21514d8981 323 #endif
AnnaBridge 156:ff21514d8981 324 } LESENSE_ChSampleMode_TypeDef;
AnnaBridge 156:ff21514d8981 325
AnnaBridge 156:ff21514d8981 326 /** Interrupt generation setup for CHx interrupt flag. */
Anna Bridge 160:5571c4ff569f 327 typedef enum {
AnnaBridge 156:ff21514d8981 328 /** No interrupt is generated. */
AnnaBridge 156:ff21514d8981 329 lesenseSetIntNone = LESENSE_CH_INTERACT_SETIF_NONE,
AnnaBridge 156:ff21514d8981 330
AnnaBridge 156:ff21514d8981 331 /** Set interrupt flag if the sensor triggers. */
AnnaBridge 156:ff21514d8981 332 lesenseSetIntLevel = LESENSE_CH_INTERACT_SETIF_LEVEL,
AnnaBridge 156:ff21514d8981 333
AnnaBridge 156:ff21514d8981 334 /** Set interrupt flag on positive edge of the sensor state. */
AnnaBridge 156:ff21514d8981 335 lesenseSetIntPosEdge = LESENSE_CH_INTERACT_SETIF_POSEDGE,
AnnaBridge 156:ff21514d8981 336
AnnaBridge 156:ff21514d8981 337 /** Set interrupt flag on negative edge of the sensor state. */
AnnaBridge 156:ff21514d8981 338 lesenseSetIntNegEdge = LESENSE_CH_INTERACT_SETIF_NEGEDGE
AnnaBridge 156:ff21514d8981 339 } LESENSE_ChIntMode_TypeDef;
AnnaBridge 156:ff21514d8981 340
AnnaBridge 156:ff21514d8981 341 /** Channel pin mode for the excitation phase of the scan sequence. */
Anna Bridge 160:5571c4ff569f 342 typedef enum {
AnnaBridge 156:ff21514d8981 343 /** Channel pin is disabled. */
AnnaBridge 156:ff21514d8981 344 lesenseChPinExDis = LESENSE_CH_INTERACT_EXMODE_DISABLE,
AnnaBridge 156:ff21514d8981 345
AnnaBridge 156:ff21514d8981 346 /** Channel pin is configured as push-pull, driven HIGH. */
AnnaBridge 156:ff21514d8981 347 lesenseChPinExHigh = LESENSE_CH_INTERACT_EXMODE_HIGH,
AnnaBridge 156:ff21514d8981 348
AnnaBridge 156:ff21514d8981 349 /** Channel pin is configured as push-pull, driven LOW. */
AnnaBridge 156:ff21514d8981 350 lesenseChPinExLow = LESENSE_CH_INTERACT_EXMODE_LOW,
AnnaBridge 156:ff21514d8981 351
AnnaBridge 156:ff21514d8981 352 /** DAC output (only available on channel 0, 1, 2, 3, 12, 13, 14 and 15) */
AnnaBridge 156:ff21514d8981 353 lesenseChPinExDACOut = LESENSE_CH_INTERACT_EXMODE_DACOUT
AnnaBridge 156:ff21514d8981 354 } LESENSE_ChPinExMode_TypeDef;
AnnaBridge 156:ff21514d8981 355
AnnaBridge 156:ff21514d8981 356 /** Channel pin mode for the idle phase of the scan sequence. */
Anna Bridge 160:5571c4ff569f 357 typedef enum {
AnnaBridge 156:ff21514d8981 358 /** Channel pin is disabled in idle phase.
AnnaBridge 156:ff21514d8981 359 * Note: this value could be used for all channels. */
AnnaBridge 156:ff21514d8981 360 lesenseChPinIdleDis = _LESENSE_IDLECONF_CH0_DISABLE,
AnnaBridge 156:ff21514d8981 361
AnnaBridge 156:ff21514d8981 362 /** Channel pin is configured as push-pull, driven HIGH in idle phase.
AnnaBridge 156:ff21514d8981 363 * Note: this value could be used for all channels. */
AnnaBridge 156:ff21514d8981 364 lesenseChPinIdleHigh = _LESENSE_IDLECONF_CH0_HIGH,
AnnaBridge 156:ff21514d8981 365
AnnaBridge 156:ff21514d8981 366 /** Channel pin is configured as push-pull, driven LOW in idle phase.
AnnaBridge 156:ff21514d8981 367 * Note: this value could be used for all channels. */
AnnaBridge 156:ff21514d8981 368 lesenseChPinIdleLow = _LESENSE_IDLECONF_CH0_LOW,
AnnaBridge 156:ff21514d8981 369
AnnaBridge 156:ff21514d8981 370 #if defined(_LESENSE_IDLECONF_CH0_DAC)
AnnaBridge 156:ff21514d8981 371 /** Channel pin is connected to DAC output in idle phase.
AnnaBridge 156:ff21514d8981 372 * Note: this value could be used for all channels. */
AnnaBridge 156:ff21514d8981 373 lesenseChPinIdleDACC = _LESENSE_IDLECONF_CH0_DAC
AnnaBridge 156:ff21514d8981 374 #else
AnnaBridge 156:ff21514d8981 375 /** Channel pin is connected to DAC CH0 output in idle phase.
AnnaBridge 156:ff21514d8981 376 * Note: only applies to channel 0, 1, 2, 3. */
AnnaBridge 156:ff21514d8981 377 lesenseChPinIdleDACCh0 = _LESENSE_IDLECONF_CH0_DACCH0,
AnnaBridge 156:ff21514d8981 378
AnnaBridge 156:ff21514d8981 379 /** Channel pin is connected to DAC CH1 output in idle phase.
AnnaBridge 156:ff21514d8981 380 * Note: only applies to channel 12, 13, 14, 15. */
AnnaBridge 156:ff21514d8981 381 lesenseChPinIdleDACCh1 = _LESENSE_IDLECONF_CH12_DACCH1,
AnnaBridge 156:ff21514d8981 382 #endif
AnnaBridge 156:ff21514d8981 383 } LESENSE_ChPinIdleMode_TypeDef;
AnnaBridge 156:ff21514d8981 384
AnnaBridge 156:ff21514d8981 385 /** Clock used for excitation and sample delay timing. */
Anna Bridge 160:5571c4ff569f 386 typedef enum {
AnnaBridge 156:ff21514d8981 387 /** LFACLK (LF clock) is used. */
AnnaBridge 156:ff21514d8981 388 lesenseClkLF = _LESENSE_CH_INTERACT_EXCLK_LFACLK,
AnnaBridge 156:ff21514d8981 389
AnnaBridge 156:ff21514d8981 390 /** AUXHFRCO (HF clock) is used. */
AnnaBridge 156:ff21514d8981 391 lesenseClkHF = _LESENSE_CH_INTERACT_EXCLK_AUXHFRCO
AnnaBridge 156:ff21514d8981 392 } LESENSE_ChClk_TypeDef;
AnnaBridge 156:ff21514d8981 393
AnnaBridge 156:ff21514d8981 394 /** Compare modes for counter comparison. */
Anna Bridge 160:5571c4ff569f 395 typedef enum {
AnnaBridge 156:ff21514d8981 396 /** Comparison evaluates to 1 if the sensor data is less than the counter
AnnaBridge 156:ff21514d8981 397 * threshold, or if the ACMP output is 0. */
AnnaBridge 156:ff21514d8981 398 lesenseCompModeLess = LESENSE_CH_EVAL_COMP_LESS,
AnnaBridge 156:ff21514d8981 399
AnnaBridge 156:ff21514d8981 400 /** Comparison evaluates to 1 if the sensor data is greater than, or equal to
AnnaBridge 156:ff21514d8981 401 * the counter threshold, or if the ACMP output is 1. */
AnnaBridge 156:ff21514d8981 402 lesenseCompModeGreaterOrEq = LESENSE_CH_EVAL_COMP_GE
AnnaBridge 156:ff21514d8981 403 } LESENSE_ChCompMode_TypeDef;
AnnaBridge 156:ff21514d8981 404
AnnaBridge 156:ff21514d8981 405 #if defined(_LESENSE_CH_EVAL_MODE_MASK)
AnnaBridge 156:ff21514d8981 406 /** Sensor evaluation modes. */
Anna Bridge 160:5571c4ff569f 407 typedef enum {
AnnaBridge 156:ff21514d8981 408 /** Threshold comparison evaluation mode. In this mode the sensor data
AnnaBridge 156:ff21514d8981 409 * is compared to the configured threshold value. Two possible comparison
AnnaBridge 156:ff21514d8981 410 * operators can be used on the sensor data, either >= (GE) or < (LT).
AnnaBridge 156:ff21514d8981 411 * Which operator to use is given using the
AnnaBridge 156:ff21514d8981 412 * @ref LESENSE_ChDesc_TypeDef::compMode member. */
AnnaBridge 156:ff21514d8981 413 lesenseEvalModeThreshold = _LESENSE_CH_EVAL_MODE_THRES,
AnnaBridge 156:ff21514d8981 414
AnnaBridge 156:ff21514d8981 415 /** Sliding window evaluation mode. In this mode the sensor data is
AnnaBridge 156:ff21514d8981 416 * evaluated against the upper and lower limits of a window range. The
AnnaBridge 156:ff21514d8981 417 * windows range is defined by a base value and a window size. */
AnnaBridge 156:ff21514d8981 418 lesenseEvalModeSlidingWindow = _LESENSE_CH_EVAL_MODE_SLIDINGWIN,
AnnaBridge 156:ff21514d8981 419
AnnaBridge 156:ff21514d8981 420 /** Step detection evaluation mode. In this mode the sensor data is compared
AnnaBridge 156:ff21514d8981 421 * to the sensor data from the previous measurement. The sensor evaluation
AnnaBridge 156:ff21514d8981 422 * will result in a "1" if the difference between the current measurement
AnnaBridge 156:ff21514d8981 423 * and the previous one is greater than a configurable "step size". If the
AnnaBridge 156:ff21514d8981 424 * difference is less than the configured step size then the sensor
AnnaBridge 156:ff21514d8981 425 * evaluation will result in a "0". */
AnnaBridge 156:ff21514d8981 426 lesenseEvalModeStepDetection = _LESENSE_CH_EVAL_MODE_STEPDET,
AnnaBridge 156:ff21514d8981 427 } LESENSE_ChEvalMode_TypeDef;
AnnaBridge 156:ff21514d8981 428 #endif
AnnaBridge 156:ff21514d8981 429
AnnaBridge 156:ff21514d8981 430 /** Idle phase configuration of alternate excitation channels. */
Anna Bridge 160:5571c4ff569f 431 typedef enum {
AnnaBridge 156:ff21514d8981 432 /** ALTEX output is disabled in idle phase.
AnnaBridge 156:ff21514d8981 433 * Note: this value could be used for all alternate excitation channels. */
AnnaBridge 156:ff21514d8981 434 lesenseAltExPinIdleDis = _LESENSE_ALTEXCONF_IDLECONF0_DISABLE,
AnnaBridge 156:ff21514d8981 435
AnnaBridge 156:ff21514d8981 436 /** ALTEX output is high in idle phase.
AnnaBridge 156:ff21514d8981 437 * Note: this value could be used for all alternate excitation channels. */
AnnaBridge 156:ff21514d8981 438 lesenseAltExPinIdleHigh = _LESENSE_ALTEXCONF_IDLECONF0_HIGH,
AnnaBridge 156:ff21514d8981 439
AnnaBridge 156:ff21514d8981 440 /** ALTEX output is low in idle phase.
AnnaBridge 156:ff21514d8981 441 * Note: this value could be used for all alternate excitation channels. */
AnnaBridge 156:ff21514d8981 442 lesenseAltExPinIdleLow = _LESENSE_ALTEXCONF_IDLECONF0_LOW
AnnaBridge 156:ff21514d8981 443 } LESENSE_AltExPinIdle_TypeDef;
AnnaBridge 156:ff21514d8981 444
AnnaBridge 156:ff21514d8981 445 /** Transition action modes. */
Anna Bridge 160:5571c4ff569f 446 typedef enum {
AnnaBridge 156:ff21514d8981 447 /** No PRS pulses generated (if PRSCOUNT == 0).
AnnaBridge 156:ff21514d8981 448 * Do not count (if PRSCOUNT == 1). */
AnnaBridge 156:ff21514d8981 449 lesenseTransActNone = LESENSE_ST_TCONFA_PRSACT_NONE,
AnnaBridge 156:ff21514d8981 450
AnnaBridge 156:ff21514d8981 451 /** Generate pulse on LESPRS0 (if PRSCOUNT == 0). */
AnnaBridge 156:ff21514d8981 452 lesenseTransActPRS0 = LESENSE_ST_TCONFA_PRSACT_PRS0,
AnnaBridge 156:ff21514d8981 453
AnnaBridge 156:ff21514d8981 454 /** Generate pulse on LESPRS1 (if PRSCOUNT == 0). */
AnnaBridge 156:ff21514d8981 455 lesenseTransActPRS1 = LESENSE_ST_TCONFA_PRSACT_PRS1,
AnnaBridge 156:ff21514d8981 456
AnnaBridge 156:ff21514d8981 457 /** Generate pulse on LESPRS0 and LESPRS1 (if PRSCOUNT == 0). */
AnnaBridge 156:ff21514d8981 458 lesenseTransActPRS01 = LESENSE_ST_TCONFA_PRSACT_PRS01,
AnnaBridge 156:ff21514d8981 459
AnnaBridge 156:ff21514d8981 460 /** Generate pulse on LESPRS2 (for both PRSCOUNT == 0 and PRSCOUNT == 1). */
AnnaBridge 156:ff21514d8981 461 lesenseTransActPRS2 = LESENSE_ST_TCONFA_PRSACT_PRS2,
AnnaBridge 156:ff21514d8981 462
AnnaBridge 156:ff21514d8981 463 /** Generate pulse on LESPRS0 and LESPRS2 (if PRSCOUNT == 0). */
AnnaBridge 156:ff21514d8981 464 lesenseTransActPRS02 = LESENSE_ST_TCONFA_PRSACT_PRS02,
AnnaBridge 156:ff21514d8981 465
AnnaBridge 156:ff21514d8981 466 /** Generate pulse on LESPRS1 and LESPRS2 (if PRSCOUNT == 0). */
AnnaBridge 156:ff21514d8981 467 lesenseTransActPRS12 = LESENSE_ST_TCONFA_PRSACT_PRS12,
AnnaBridge 156:ff21514d8981 468
AnnaBridge 156:ff21514d8981 469 /** Generate pulse on LESPRS0, LESPRS1 and LESPRS2 (if PRSCOUNT == 0). */
AnnaBridge 156:ff21514d8981 470 lesenseTransActPRS012 = LESENSE_ST_TCONFA_PRSACT_PRS012,
AnnaBridge 156:ff21514d8981 471
AnnaBridge 156:ff21514d8981 472 /** Count up (if PRSCOUNT == 1). */
AnnaBridge 156:ff21514d8981 473 lesenseTransActUp = LESENSE_ST_TCONFA_PRSACT_UP,
AnnaBridge 156:ff21514d8981 474
AnnaBridge 156:ff21514d8981 475 /** Count down (if PRSCOUNT == 1). */
AnnaBridge 156:ff21514d8981 476 lesenseTransActDown = LESENSE_ST_TCONFA_PRSACT_DOWN,
AnnaBridge 156:ff21514d8981 477
AnnaBridge 156:ff21514d8981 478 /** Count up and generate pulse on LESPRS2 (if PRSCOUNT == 1). */
AnnaBridge 156:ff21514d8981 479 lesenseTransActUpAndPRS2 = LESENSE_ST_TCONFA_PRSACT_UPANDPRS2,
AnnaBridge 156:ff21514d8981 480
AnnaBridge 156:ff21514d8981 481 /** Count down and generate pulse on LESPRS2 (if PRSCOUNT == 1). */
AnnaBridge 156:ff21514d8981 482 lesenseTransActDownAndPRS2 = LESENSE_ST_TCONFA_PRSACT_DOWNANDPRS2
AnnaBridge 156:ff21514d8981 483 } LESENSE_StTransAct_TypeDef;
AnnaBridge 156:ff21514d8981 484
AnnaBridge 156:ff21514d8981 485 /*******************************************************************************
AnnaBridge 156:ff21514d8981 486 ******************************* STRUCTS ***********************************
AnnaBridge 156:ff21514d8981 487 ******************************************************************************/
AnnaBridge 156:ff21514d8981 488
AnnaBridge 156:ff21514d8981 489 /** Core control (LESENSE_CTRL) descriptor structure. */
Anna Bridge 160:5571c4ff569f 490 typedef struct {
AnnaBridge 156:ff21514d8981 491 /** Select scan start mode to control how the scan start is being triggered.*/
AnnaBridge 156:ff21514d8981 492 LESENSE_ScanMode_TypeDef scanStart;
AnnaBridge 156:ff21514d8981 493
AnnaBridge 156:ff21514d8981 494 /** Select PRS source for scan start if scanMode is set to lesensePrsPulse. */
AnnaBridge 156:ff21514d8981 495 LESENSE_PRSSel_TypeDef prsSel;
AnnaBridge 156:ff21514d8981 496
AnnaBridge 156:ff21514d8981 497 /** Select scan configuration register usage strategy. */
AnnaBridge 156:ff21514d8981 498 LESENSE_ScanConfSel_TypeDef scanConfSel;
AnnaBridge 156:ff21514d8981 499
AnnaBridge 156:ff21514d8981 500 /** Set to true to invert ACMP0 output. */
AnnaBridge 156:ff21514d8981 501 bool invACMP0;
AnnaBridge 156:ff21514d8981 502
AnnaBridge 156:ff21514d8981 503 /** Set to true to invert ACMP1 output. */
AnnaBridge 156:ff21514d8981 504 bool invACMP1;
AnnaBridge 156:ff21514d8981 505
AnnaBridge 156:ff21514d8981 506 /** Set to true to sample both ACMPs simultaneously. */
AnnaBridge 156:ff21514d8981 507 bool dualSample;
AnnaBridge 156:ff21514d8981 508
AnnaBridge 156:ff21514d8981 509 /** Set to true in order to to store SCANRES in RAM (accessible via RESDATA)
AnnaBridge 156:ff21514d8981 510 * after each scan. */
AnnaBridge 156:ff21514d8981 511 bool storeScanRes;
AnnaBridge 156:ff21514d8981 512
AnnaBridge 156:ff21514d8981 513 /** Set to true in order to always make LESENSE write to the result buffer,
AnnaBridge 156:ff21514d8981 514 * even if it is full. */
AnnaBridge 156:ff21514d8981 515 bool bufOverWr;
AnnaBridge 156:ff21514d8981 516
AnnaBridge 156:ff21514d8981 517 /** Select trigger conditions for interrupt and DMA. */
AnnaBridge 156:ff21514d8981 518 LESENSE_BufTrigLevel_TypeDef bufTrigLevel;
AnnaBridge 156:ff21514d8981 519
AnnaBridge 156:ff21514d8981 520 /** Configure trigger condition for DMA wakeup from EM2. */
AnnaBridge 156:ff21514d8981 521 LESENSE_DMAWakeUp_TypeDef wakeupOnDMA;
AnnaBridge 156:ff21514d8981 522
AnnaBridge 156:ff21514d8981 523 /** Select bias mode. */
AnnaBridge 156:ff21514d8981 524 LESENSE_BiasMode_TypeDef biasMode;
AnnaBridge 156:ff21514d8981 525
AnnaBridge 156:ff21514d8981 526 /** Set to true to keep LESENSE running in debug mode. */
AnnaBridge 156:ff21514d8981 527 bool debugRun;
AnnaBridge 156:ff21514d8981 528 } LESENSE_CoreCtrlDesc_TypeDef;
AnnaBridge 156:ff21514d8981 529
AnnaBridge 156:ff21514d8981 530 /** Default configuration for LESENSE_CtrlDesc_TypeDef structure. */
AnnaBridge 156:ff21514d8981 531 #define LESENSE_CORECTRL_DESC_DEFAULT \
Anna Bridge 160:5571c4ff569f 532 { \
Anna Bridge 160:5571c4ff569f 533 lesenseScanStartPeriodic,/* Start new scan each time the period counter overflows. */ \
Anna Bridge 160:5571c4ff569f 534 lesensePRSCh0, /* Default PRS channel is selected. */ \
Anna Bridge 160:5571c4ff569f 535 lesenseScanConfDirMap, /* Direct mapping SCANCONF register usage strategy. */ \
Anna Bridge 160:5571c4ff569f 536 false, /* Don't invert ACMP0 output. */ \
Anna Bridge 160:5571c4ff569f 537 false, /* Don't invert ACMP1 output. */ \
Anna Bridge 160:5571c4ff569f 538 false, /* Disable dual sampling. */ \
Anna Bridge 160:5571c4ff569f 539 true, /* Store scan result after each scan. */ \
Anna Bridge 160:5571c4ff569f 540 true, /* Overwrite result buffer register even if it is full. */ \
Anna Bridge 160:5571c4ff569f 541 lesenseBufTrigHalf, /* Trigger interrupt and DMA request if result buffer is half full. */ \
Anna Bridge 160:5571c4ff569f 542 lesenseDMAWakeUpDisable, /* Don't wake up on DMA from EM2. */ \
Anna Bridge 160:5571c4ff569f 543 lesenseBiasModeDontTouch,/* Don't touch bias configuration. */ \
Anna Bridge 160:5571c4ff569f 544 true /* Keep LESENSE running in debug mode. */ \
Anna Bridge 160:5571c4ff569f 545 }
AnnaBridge 156:ff21514d8981 546
AnnaBridge 156:ff21514d8981 547 /** LESENSE timing control descriptor structure. */
Anna Bridge 160:5571c4ff569f 548 typedef struct {
AnnaBridge 156:ff21514d8981 549 /** Set the number of LFACLK cycles to delay sensor interaction on
AnnaBridge 156:ff21514d8981 550 * each channel. Valid range: 0-3 (2 bit). */
AnnaBridge 156:ff21514d8981 551 uint8_t startDelay;
AnnaBridge 156:ff21514d8981 552
AnnaBridge 156:ff21514d8981 553 /**
AnnaBridge 156:ff21514d8981 554 * Set to true do delay the startup of AUXHFRCO until the system enters
AnnaBridge 156:ff21514d8981 555 * the excite phase. This will reduce the time AUXHFRCO is enabled and
AnnaBridge 156:ff21514d8981 556 * reduce power usage. */
AnnaBridge 156:ff21514d8981 557 bool delayAuxStartup;
AnnaBridge 156:ff21514d8981 558 } LESENSE_TimeCtrlDesc_TypeDef;
AnnaBridge 156:ff21514d8981 559
AnnaBridge 156:ff21514d8981 560 /** Default configuration for LESENSE_TimeCtrlDesc_TypeDef structure. */
Anna Bridge 160:5571c4ff569f 561 #define LESENSE_TIMECTRL_DESC_DEFAULT \
Anna Bridge 160:5571c4ff569f 562 { \
Anna Bridge 160:5571c4ff569f 563 0U, /* No sensor interaction delay. */ \
Anna Bridge 160:5571c4ff569f 564 false /* Don't delay the AUXHFRCO startup. */ \
Anna Bridge 160:5571c4ff569f 565 }
AnnaBridge 156:ff21514d8981 566
AnnaBridge 156:ff21514d8981 567 /** LESENSE peripheral control descriptor structure. */
Anna Bridge 160:5571c4ff569f 568 typedef struct {
AnnaBridge 156:ff21514d8981 569 /** Configure DAC channel 0 data control. */
AnnaBridge 156:ff21514d8981 570 LESENSE_ControlDACData_TypeDef dacCh0Data;
AnnaBridge 156:ff21514d8981 571
AnnaBridge 156:ff21514d8981 572 #if defined(_LESENSE_PERCTRL_DACCH0CONV_MASK)
AnnaBridge 156:ff21514d8981 573 /** Configure how LESENSE controls conversion on DAC channel 0. */
AnnaBridge 156:ff21514d8981 574 LESENSE_ControlDACConv_TypeDef dacCh0ConvMode;
Anna Bridge 160:5571c4ff569f 575 #endif
AnnaBridge 156:ff21514d8981 576
Anna Bridge 160:5571c4ff569f 577 #if defined(_LESENSE_PERCTRL_DACCH0OUT_MASK)
AnnaBridge 156:ff21514d8981 578 /** Configure how LESENSE controls output on DAC channel 0. */
AnnaBridge 156:ff21514d8981 579 LESENSE_ControlDACOut_TypeDef dacCh0OutMode;
AnnaBridge 156:ff21514d8981 580 #endif
AnnaBridge 156:ff21514d8981 581
AnnaBridge 156:ff21514d8981 582 /** Configure DAC channel 1 data control. */
AnnaBridge 156:ff21514d8981 583 LESENSE_ControlDACData_TypeDef dacCh1Data;
AnnaBridge 156:ff21514d8981 584
AnnaBridge 156:ff21514d8981 585 #if defined(_LESENSE_PERCTRL_DACCH1CONV_MASK)
AnnaBridge 156:ff21514d8981 586 /** Configure how LESENSE controls conversion on DAC channel 1. */
AnnaBridge 156:ff21514d8981 587 LESENSE_ControlDACConv_TypeDef dacCh1ConvMode;
Anna Bridge 160:5571c4ff569f 588 #endif
AnnaBridge 156:ff21514d8981 589
Anna Bridge 160:5571c4ff569f 590 #if defined(_LESENSE_PERCTRL_DACCH1OUT_MASK)
AnnaBridge 156:ff21514d8981 591 /** Configure how LESENSE controls output on DAC channel 1. */
AnnaBridge 156:ff21514d8981 592 LESENSE_ControlDACOut_TypeDef dacCh1OutMode;
AnnaBridge 156:ff21514d8981 593 #endif
AnnaBridge 156:ff21514d8981 594
AnnaBridge 156:ff21514d8981 595 #if defined(_LESENSE_PERCTRL_DACPRESC_MASK)
AnnaBridge 156:ff21514d8981 596 /** Configure the prescaling factor for the LESENSE - DAC interface.
AnnaBridge 156:ff21514d8981 597 * Valid range: 0-31 (5bit). */
AnnaBridge 156:ff21514d8981 598 uint8_t dacPresc;
AnnaBridge 156:ff21514d8981 599 #endif
AnnaBridge 156:ff21514d8981 600
AnnaBridge 156:ff21514d8981 601 #if defined(_LESENSE_PERCTRL_DACREF_MASK)
AnnaBridge 156:ff21514d8981 602 /** Configure the DAC reference to be used. Set to #lesenseDACRefVdd to use
AnnaBridge 156:ff21514d8981 603 * VDD and set to #lesenseDACRefBandGap to use bandgap as reference. */
AnnaBridge 156:ff21514d8981 604 LESENSE_DACRef_TypeDef dacRef;
AnnaBridge 156:ff21514d8981 605 #endif
AnnaBridge 156:ff21514d8981 606
AnnaBridge 156:ff21514d8981 607 /** Configure how LESENSE controls ACMP 0. */
AnnaBridge 156:ff21514d8981 608 LESENSE_ControlACMP_TypeDef acmp0Mode;
AnnaBridge 156:ff21514d8981 609
AnnaBridge 156:ff21514d8981 610 /** Configure how LESENSE controls ACMP 1. */
AnnaBridge 156:ff21514d8981 611 LESENSE_ControlACMP_TypeDef acmp1Mode;
AnnaBridge 156:ff21514d8981 612
AnnaBridge 156:ff21514d8981 613 /** Configure how LESENSE controls ACMPs and the DAC in idle mode. */
AnnaBridge 156:ff21514d8981 614 LESENSE_WarmupMode_TypeDef warmupMode;
AnnaBridge 156:ff21514d8981 615
AnnaBridge 156:ff21514d8981 616 #if defined(_LESENSE_PERCTRL_DACCONVTRIG_MASK)
AnnaBridge 156:ff21514d8981 617 /** When set to true the DAC is only enabled once for each scan. When
AnnaBridge 156:ff21514d8981 618 * set to false the DAC is enabled before every channel measurement. */
AnnaBridge 156:ff21514d8981 619 bool dacScan;
AnnaBridge 156:ff21514d8981 620 #endif
Anna Bridge 160:5571c4ff569f 621
Anna Bridge 160:5571c4ff569f 622 #if defined(_LESENSE_PERCTRL_DACSTARTUP_MASK)
Anna Bridge 160:5571c4ff569f 623 /** When set to true the DAC is started a half clock cycle before sensor
Anna Bridge 160:5571c4ff569f 624 * interaction starts. When set to false, a full clock cycle is used. */
Anna Bridge 160:5571c4ff569f 625 bool dacStartupHalf;
Anna Bridge 160:5571c4ff569f 626 #endif
Anna Bridge 160:5571c4ff569f 627
Anna Bridge 160:5571c4ff569f 628 #if defined(_LESENSE_PERCTRL_DACCH0EN_MASK)
Anna Bridge 160:5571c4ff569f 629 /** When set to true, LESENSE controls DAC channel 0. */
Anna Bridge 160:5571c4ff569f 630 bool dacCh0En;
Anna Bridge 160:5571c4ff569f 631 #endif
Anna Bridge 160:5571c4ff569f 632
Anna Bridge 160:5571c4ff569f 633 #if defined(_LESENSE_PERCTRL_DACCH1EN_MASK)
Anna Bridge 160:5571c4ff569f 634 /** When set to true, LESENSE controls DAC channel 1. */
Anna Bridge 160:5571c4ff569f 635 bool dacCh1En;
Anna Bridge 160:5571c4ff569f 636 #endif
AnnaBridge 156:ff21514d8981 637 } LESENSE_PerCtrlDesc_TypeDef;
AnnaBridge 156:ff21514d8981 638
AnnaBridge 156:ff21514d8981 639 /** Default configuration for LESENSE_PerCtrl_TypeDef structure. */
AnnaBridge 156:ff21514d8981 640 #if defined(_SILICON_LABS_32B_SERIES_0)
Anna Bridge 160:5571c4ff569f 641 #define LESENSE_PERCTRL_DESC_DEFAULT \
Anna Bridge 160:5571c4ff569f 642 { \
Anna Bridge 160:5571c4ff569f 643 lesenseDACIfData, /* DAC channel 0 data is defined by DAC_CH0DATA register */ \
Anna Bridge 160:5571c4ff569f 644 lesenseDACConvModeDisable,/* LESENSE does not control DAC CH0. */ \
Anna Bridge 160:5571c4ff569f 645 lesenseDACOutModeDisable, /* DAC channel 0 output to pin disabled. */ \
Anna Bridge 160:5571c4ff569f 646 lesenseDACIfData, /* DAC channel 1 data is defined by DAC_CH1DATA register */ \
Anna Bridge 160:5571c4ff569f 647 lesenseDACConvModeDisable,/* LESENSE does not control DAC CH1. */ \
Anna Bridge 160:5571c4ff569f 648 lesenseDACOutModeDisable, /* DAC channel 1 output to pin disabled. */ \
Anna Bridge 160:5571c4ff569f 649 0U, /* DAC prescaling factor of 1 (0+1). */ \
Anna Bridge 160:5571c4ff569f 650 lesenseDACRefVdd, /* DAC uses VDD reference. */ \
Anna Bridge 160:5571c4ff569f 651 lesenseACMPModeMuxThres, /* LESENSE controls the input mux and the threshold value of ACMP0. */ \
Anna Bridge 160:5571c4ff569f 652 lesenseACMPModeMuxThres, /* LESENSE controls the input mux and the threshold value of ACMP1. */ \
Anna Bridge 160:5571c4ff569f 653 lesenseWarmupModeKeepWarm /* Keep both ACMPs and the DAC powered up when LESENSE is idle. */ \
Anna Bridge 160:5571c4ff569f 654 }
AnnaBridge 156:ff21514d8981 655 #else
AnnaBridge 156:ff21514d8981 656 #define LESENSE_PERCTRL_DESC_DEFAULT \
Anna Bridge 160:5571c4ff569f 657 { \
Anna Bridge 160:5571c4ff569f 658 lesenseDACIfData, /* DAC channel 0 data is defined by DAC_CH0DATA register. */ \
Anna Bridge 160:5571c4ff569f 659 lesenseDACIfData, /* DAC channel 1 data is defined by DAC_CH1DATA register. */ \
Anna Bridge 160:5571c4ff569f 660 lesenseACMPModeMuxThres, /* LESENSE controls the input mux and the threshold value of ACMP0. */ \
Anna Bridge 160:5571c4ff569f 661 lesenseACMPModeMuxThres, /* LESENSE controls the input mux and the threshold value of ACMP1. */ \
Anna Bridge 160:5571c4ff569f 662 lesenseWarmupModeKeepWarm,/* Keep both ACMPs and the DAC powered up when LESENSE is idle. */ \
Anna Bridge 160:5571c4ff569f 663 false, /* DAC is enabled for before every channel measurement. */ \
Anna Bridge 160:5571c4ff569f 664 false, /* DAC is enabled a full clock cycle before sensor interaction */ \
Anna Bridge 160:5571c4ff569f 665 false, /* LESENSE does not control DAC channel 0. */ \
Anna Bridge 160:5571c4ff569f 666 false /* LESENSE does not control DAC channel 1. */ \
Anna Bridge 160:5571c4ff569f 667 }
AnnaBridge 156:ff21514d8981 668 #endif
AnnaBridge 156:ff21514d8981 669
AnnaBridge 156:ff21514d8981 670 /** LESENSE decoder control descriptor structure. */
Anna Bridge 160:5571c4ff569f 671 typedef struct {
AnnaBridge 156:ff21514d8981 672 /** Select the input to the LESENSE decoder. */
AnnaBridge 156:ff21514d8981 673 LESENSE_DecInput_TypeDef decInput;
AnnaBridge 156:ff21514d8981 674
AnnaBridge 156:ff21514d8981 675 /** Initial state of the LESENSE decoder. */
AnnaBridge 156:ff21514d8981 676 uint32_t initState;
AnnaBridge 156:ff21514d8981 677
AnnaBridge 156:ff21514d8981 678 /** Set to enable the decoder to check the present state in addition
AnnaBridge 156:ff21514d8981 679 * to the states defined in TCONF. */
AnnaBridge 156:ff21514d8981 680 bool chkState;
AnnaBridge 156:ff21514d8981 681
AnnaBridge 156:ff21514d8981 682 /** When set, a transition from state x in the decoder will set interrupt flag
AnnaBridge 156:ff21514d8981 683 * CHx. */
AnnaBridge 156:ff21514d8981 684 bool intMap;
AnnaBridge 156:ff21514d8981 685
AnnaBridge 156:ff21514d8981 686 /** Set to enable hysteresis in the decoder for suppressing changes on PRS
AnnaBridge 156:ff21514d8981 687 * channel 0. */
AnnaBridge 156:ff21514d8981 688 bool hystPRS0;
AnnaBridge 156:ff21514d8981 689
AnnaBridge 156:ff21514d8981 690 /** Set to enable hysteresis in the decoder for suppressing changes on PRS
AnnaBridge 156:ff21514d8981 691 * channel 1. */
AnnaBridge 156:ff21514d8981 692 bool hystPRS1;
AnnaBridge 156:ff21514d8981 693
AnnaBridge 156:ff21514d8981 694 /** Set to enable hysteresis in the decoder for suppressing changes on PRS
AnnaBridge 156:ff21514d8981 695 * channel 2. */
AnnaBridge 156:ff21514d8981 696 bool hystPRS2;
AnnaBridge 156:ff21514d8981 697
AnnaBridge 156:ff21514d8981 698 /** Set to enable hysteresis in the decoder for suppressing interrupt
AnnaBridge 156:ff21514d8981 699 * requests. */
AnnaBridge 156:ff21514d8981 700 bool hystIRQ;
AnnaBridge 156:ff21514d8981 701
AnnaBridge 156:ff21514d8981 702 /** Set to enable count mode on decoder PRS channels 0 and 1 to produce
AnnaBridge 156:ff21514d8981 703 * outputs which can be used by a PCNT to count up or down. */
AnnaBridge 156:ff21514d8981 704 bool prsCount;
AnnaBridge 156:ff21514d8981 705
AnnaBridge 156:ff21514d8981 706 /** Select PRS channel input for bit 0 of the LESENSE decoder. */
AnnaBridge 156:ff21514d8981 707 LESENSE_PRSSel_TypeDef prsChSel0;
AnnaBridge 156:ff21514d8981 708
AnnaBridge 156:ff21514d8981 709 /** Select PRS channel input for bit 1 of the LESENSE decoder. */
AnnaBridge 156:ff21514d8981 710 LESENSE_PRSSel_TypeDef prsChSel1;
AnnaBridge 156:ff21514d8981 711
AnnaBridge 156:ff21514d8981 712 /** Select PRS channel input for bit 2 of the LESENSE decoder. */
AnnaBridge 156:ff21514d8981 713 LESENSE_PRSSel_TypeDef prsChSel2;
AnnaBridge 156:ff21514d8981 714
AnnaBridge 156:ff21514d8981 715 /** Select PRS channel input for bit 3 of the LESENSE decoder. */
AnnaBridge 156:ff21514d8981 716 LESENSE_PRSSel_TypeDef prsChSel3;
AnnaBridge 156:ff21514d8981 717 } LESENSE_DecCtrlDesc_TypeDef;
AnnaBridge 156:ff21514d8981 718
AnnaBridge 156:ff21514d8981 719 /** Default configuration for LESENSE_PerCtrl_TypeDef structure. */
Anna Bridge 160:5571c4ff569f 720 #define LESENSE_DECCTRL_DESC_DEFAULT \
Anna Bridge 160:5571c4ff569f 721 { \
Anna Bridge 160:5571c4ff569f 722 lesenseDecInputSensorSt, /* The SENSORSTATE register is used as input to the decoder. */ \
Anna Bridge 160:5571c4ff569f 723 0U, /* State 0 is the initial state of the decoder. */ \
Anna Bridge 160:5571c4ff569f 724 false, /* Disable check of current state. */ \
Anna Bridge 160:5571c4ff569f 725 true, /* Enable channel x % 16 interrupt on state x change. */ \
Anna Bridge 160:5571c4ff569f 726 true, /* Enable decoder hysteresis on PRS0 output. */ \
Anna Bridge 160:5571c4ff569f 727 true, /* Enable decoder hysteresis on PRS1 output. */ \
Anna Bridge 160:5571c4ff569f 728 true, /* Enable decoder hysteresis on PRS2 output. */ \
Anna Bridge 160:5571c4ff569f 729 true, /* Enable decoder hysteresis on PRS3 output. */ \
Anna Bridge 160:5571c4ff569f 730 false, /* Disable count mode on decoder PRS channels 0 and 1*/ \
Anna Bridge 160:5571c4ff569f 731 lesensePRSCh0, /* PRS Channel 0 as input for bit 0 of the LESENSE decoder. */ \
Anna Bridge 160:5571c4ff569f 732 lesensePRSCh1, /* PRS Channel 1 as input for bit 1 of the LESENSE decoder. */ \
Anna Bridge 160:5571c4ff569f 733 lesensePRSCh2, /* PRS Channel 2 as input for bit 2 of the LESENSE decoder. */ \
Anna Bridge 160:5571c4ff569f 734 lesensePRSCh3, /* PRS Channel 3 as input for bit 3 of the LESENSE decoder. */ \
Anna Bridge 160:5571c4ff569f 735 }
AnnaBridge 156:ff21514d8981 736
AnnaBridge 156:ff21514d8981 737 /** LESENSE module initialization structure. */
Anna Bridge 160:5571c4ff569f 738 typedef struct {
AnnaBridge 156:ff21514d8981 739 /** LESENSE core configuration parameters. */
AnnaBridge 156:ff21514d8981 740 LESENSE_CoreCtrlDesc_TypeDef coreCtrl;
AnnaBridge 156:ff21514d8981 741
AnnaBridge 156:ff21514d8981 742 /** LESENSE timing configuration parameters. */
AnnaBridge 156:ff21514d8981 743 LESENSE_TimeCtrlDesc_TypeDef timeCtrl;
AnnaBridge 156:ff21514d8981 744
AnnaBridge 156:ff21514d8981 745 /** LESENSE peripheral configuration parameters. */
AnnaBridge 156:ff21514d8981 746 LESENSE_PerCtrlDesc_TypeDef perCtrl;
AnnaBridge 156:ff21514d8981 747
AnnaBridge 156:ff21514d8981 748 /** LESENSE decoder configuration parameters. */
AnnaBridge 156:ff21514d8981 749 LESENSE_DecCtrlDesc_TypeDef decCtrl;
AnnaBridge 156:ff21514d8981 750 } LESENSE_Init_TypeDef;
AnnaBridge 156:ff21514d8981 751
AnnaBridge 156:ff21514d8981 752 /** Default configuration for LESENSE_Init_TypeDef structure. */
Anna Bridge 160:5571c4ff569f 753 #define LESENSE_INIT_DEFAULT \
Anna Bridge 160:5571c4ff569f 754 { \
Anna Bridge 160:5571c4ff569f 755 .coreCtrl = LESENSE_CORECTRL_DESC_DEFAULT, /* Default core control parameters. */ \
Anna Bridge 160:5571c4ff569f 756 .timeCtrl = LESENSE_TIMECTRL_DESC_DEFAULT, /* Default time control parameters. */ \
Anna Bridge 160:5571c4ff569f 757 .perCtrl = LESENSE_PERCTRL_DESC_DEFAULT, /* Default peripheral control parameters. */ \
Anna Bridge 160:5571c4ff569f 758 .decCtrl = LESENSE_DECCTRL_DESC_DEFAULT /* Default decoder control parameters. */ \
Anna Bridge 160:5571c4ff569f 759 }
AnnaBridge 156:ff21514d8981 760
AnnaBridge 156:ff21514d8981 761 /** Channel descriptor structure. */
Anna Bridge 160:5571c4ff569f 762 typedef struct {
AnnaBridge 156:ff21514d8981 763 /** Set to enable scan channel CHx. */
AnnaBridge 156:ff21514d8981 764 bool enaScanCh;
AnnaBridge 156:ff21514d8981 765
AnnaBridge 156:ff21514d8981 766 /** Set to enable CHx pin. */
AnnaBridge 156:ff21514d8981 767 bool enaPin;
AnnaBridge 156:ff21514d8981 768
AnnaBridge 156:ff21514d8981 769 /** Enable/disable channel interrupts after configuring all the sensor channel
AnnaBridge 156:ff21514d8981 770 * parameters. */
AnnaBridge 156:ff21514d8981 771 bool enaInt;
AnnaBridge 156:ff21514d8981 772
AnnaBridge 156:ff21514d8981 773 /** Configure channel pin mode for the excitation phase of the scan sequence.
AnnaBridge 156:ff21514d8981 774 * Note: OPAOUT is only available on channels 2, 3, 4, and 5. */
AnnaBridge 156:ff21514d8981 775 LESENSE_ChPinExMode_TypeDef chPinExMode;
AnnaBridge 156:ff21514d8981 776
AnnaBridge 156:ff21514d8981 777 /** Configure channel pin idle setup in LESENSE idle phase. */
AnnaBridge 156:ff21514d8981 778 LESENSE_ChPinIdleMode_TypeDef chPinIdleMode;
AnnaBridge 156:ff21514d8981 779
AnnaBridge 156:ff21514d8981 780 /** Set to use alternate excite pin for excitation. */
AnnaBridge 156:ff21514d8981 781 bool useAltEx;
AnnaBridge 156:ff21514d8981 782
AnnaBridge 156:ff21514d8981 783 /** Set to enable the result from this channel being shifted into the decoder
AnnaBridge 156:ff21514d8981 784 * register. */
AnnaBridge 156:ff21514d8981 785 bool shiftRes;
AnnaBridge 156:ff21514d8981 786
AnnaBridge 156:ff21514d8981 787 /** Set to invert the result bit stored in SCANRES register. */
AnnaBridge 156:ff21514d8981 788 bool invRes;
AnnaBridge 156:ff21514d8981 789
AnnaBridge 156:ff21514d8981 790 /** Set to store the counter value in RAM (accessible via RESDATA) and make
AnnaBridge 156:ff21514d8981 791 * the comparison result available in the SCANRES register. */
AnnaBridge 156:ff21514d8981 792 bool storeCntRes;
AnnaBridge 156:ff21514d8981 793
AnnaBridge 156:ff21514d8981 794 /** Select clock used for excitation timing. */
AnnaBridge 156:ff21514d8981 795 LESENSE_ChClk_TypeDef exClk;
AnnaBridge 156:ff21514d8981 796
AnnaBridge 156:ff21514d8981 797 /** Select clock used for sample delay timing. */
AnnaBridge 156:ff21514d8981 798 LESENSE_ChClk_TypeDef sampleClk;
AnnaBridge 156:ff21514d8981 799
AnnaBridge 156:ff21514d8981 800 /** Configure excitation time. Excitation will last exTime+1 excitation clock
AnnaBridge 156:ff21514d8981 801 * cycles. Valid range: 0-63 (6 bits). */
AnnaBridge 156:ff21514d8981 802 uint8_t exTime;
AnnaBridge 156:ff21514d8981 803
AnnaBridge 156:ff21514d8981 804 /** Configure sample delay. Sampling will occur after sampleDelay+1 sample
AnnaBridge 156:ff21514d8981 805 * clock cycles. Valid range: 0-127 (7 bits) or 0-255 (8 bits) depending on
AnnaBridge 156:ff21514d8981 806 * device. */
AnnaBridge 156:ff21514d8981 807 uint8_t sampleDelay;
AnnaBridge 156:ff21514d8981 808
AnnaBridge 156:ff21514d8981 809 /** Configure measure delay. Sensor measuring is delayed for measDelay
AnnaBridge 156:ff21514d8981 810 * excitation clock cycles. Valid range: 0-127 (7 bits) or 0-1023 (10 bits)
AnnaBridge 156:ff21514d8981 811 * depending on device. */
AnnaBridge 156:ff21514d8981 812 uint16_t measDelay;
AnnaBridge 156:ff21514d8981 813
AnnaBridge 156:ff21514d8981 814 /** Configure ACMP threshold or DAC data.
AnnaBridge 156:ff21514d8981 815 * If perCtrl.dacCh0Data or perCtrl.dacCh1Data is set to #lesenseDACIfData,
AnnaBridge 156:ff21514d8981 816 * acmpThres defines the 12-bit DAC data in the corresponding data register
AnnaBridge 156:ff21514d8981 817 * of the DAC interface (DACn_CH0DATA and DACn_CH1DATA).
AnnaBridge 156:ff21514d8981 818 * In this case, the valid range is: 0-4095 (12 bits).
AnnaBridge 156:ff21514d8981 819 * If perCtrl.dacCh0Data or perCtrl.dacCh1Data is set to #lesenseACMPThres,
AnnaBridge 156:ff21514d8981 820 * acmpThres defines the 6-bit Vdd scaling factor of ACMP negative input
AnnaBridge 156:ff21514d8981 821 * (VDDLEVEL in ACMP_INPUTSEL register).
AnnaBridge 156:ff21514d8981 822 * In this case, the valid range is: 0-63 (6 bits). */
AnnaBridge 156:ff21514d8981 823 uint16_t acmpThres;
AnnaBridge 156:ff21514d8981 824
AnnaBridge 156:ff21514d8981 825 /** Select if ACMP output, ADC output or counter output should be used in
AnnaBridge 156:ff21514d8981 826 * comparison. */
AnnaBridge 156:ff21514d8981 827 LESENSE_ChSampleMode_TypeDef sampleMode;
AnnaBridge 156:ff21514d8981 828
AnnaBridge 156:ff21514d8981 829 /** Configure interrupt generation mode for CHx interrupt flag. */
AnnaBridge 156:ff21514d8981 830 LESENSE_ChIntMode_TypeDef intMode;
AnnaBridge 156:ff21514d8981 831
AnnaBridge 156:ff21514d8981 832 /** Configure decision threshold for sensor data comparison.
AnnaBridge 156:ff21514d8981 833 * Valid range: 0-65535 (16 bits). */
AnnaBridge 156:ff21514d8981 834 uint16_t cntThres;
AnnaBridge 156:ff21514d8981 835
AnnaBridge 156:ff21514d8981 836 /** Select mode for counter comparison. */
AnnaBridge 156:ff21514d8981 837 LESENSE_ChCompMode_TypeDef compMode;
AnnaBridge 156:ff21514d8981 838
AnnaBridge 156:ff21514d8981 839 #if defined(_LESENSE_CH_EVAL_MODE_MASK)
AnnaBridge 156:ff21514d8981 840 /** Select sensor evaluation mode. */
AnnaBridge 156:ff21514d8981 841 LESENSE_ChEvalMode_TypeDef evalMode;
AnnaBridge 156:ff21514d8981 842 #endif
AnnaBridge 156:ff21514d8981 843 } LESENSE_ChDesc_TypeDef;
AnnaBridge 156:ff21514d8981 844
AnnaBridge 156:ff21514d8981 845 /** Configuration structure for all scan channels. */
Anna Bridge 160:5571c4ff569f 846 typedef struct {
AnnaBridge 156:ff21514d8981 847 /** Channel descriptor for all LESENSE channels. */
AnnaBridge 156:ff21514d8981 848 LESENSE_ChDesc_TypeDef Ch[LESENSE_NUM_CHANNELS];
AnnaBridge 156:ff21514d8981 849 } LESENSE_ChAll_TypeDef;
AnnaBridge 156:ff21514d8981 850
AnnaBridge 156:ff21514d8981 851 /** Default configuration for scan channel. */
AnnaBridge 156:ff21514d8981 852 #if defined(_LESENSE_CH_EVAL_MODE_MASK)
Anna Bridge 160:5571c4ff569f 853 #define LESENSE_CH_CONF_DEFAULT \
Anna Bridge 160:5571c4ff569f 854 { \
Anna Bridge 160:5571c4ff569f 855 false, /* Disable scan channel. */ \
Anna Bridge 160:5571c4ff569f 856 false, /* Disable the assigned pin on scan channel. */ \
Anna Bridge 160:5571c4ff569f 857 false, /* Disable interrupts on channel. */ \
Anna Bridge 160:5571c4ff569f 858 lesenseChPinExDis, /* Channel pin is disabled during the excitation period. */ \
Anna Bridge 160:5571c4ff569f 859 lesenseChPinIdleDis, /* Channel pin is disabled during the idle period. */ \
Anna Bridge 160:5571c4ff569f 860 false, /* Don't use alternate excitation pins for excitation. */ \
Anna Bridge 160:5571c4ff569f 861 false, /* Disabled to shift results from this channel to the decoder register. */ \
Anna Bridge 160:5571c4ff569f 862 false, /* Disabled to invert the scan result bit. */ \
Anna Bridge 160:5571c4ff569f 863 false, /* Disabled to store counter value in the result buffer. */ \
Anna Bridge 160:5571c4ff569f 864 lesenseClkLF, /* Use the LF clock for excitation timing. */ \
Anna Bridge 160:5571c4ff569f 865 lesenseClkLF, /* Use the LF clock for sample timing. */ \
Anna Bridge 160:5571c4ff569f 866 0x00U, /* Excitation time is set to 0(+1) excitation clock cycles. */ \
Anna Bridge 160:5571c4ff569f 867 0x00U, /* Sample delay is set to 0(+1) sample clock cycles. */ \
Anna Bridge 160:5571c4ff569f 868 0x00U, /* Measure delay is set to 0 excitation clock cycles.*/ \
Anna Bridge 160:5571c4ff569f 869 0x00U, /* ACMP threshold has been set to 0. */ \
Anna Bridge 160:5571c4ff569f 870 lesenseSampleModeACMP, /* ACMP output will be used in comparison. */ \
Anna Bridge 160:5571c4ff569f 871 lesenseSetIntNone, /* No interrupt is generated by the channel. */ \
Anna Bridge 160:5571c4ff569f 872 0x00U, /* Counter threshold has bee set to 0x00. */ \
Anna Bridge 160:5571c4ff569f 873 lesenseCompModeLess, /* Compare mode has been set to trigger interrupt on "less". */ \
Anna Bridge 160:5571c4ff569f 874 lesenseEvalModeThreshold /* Eval mode has been set to trigger interrupt on threshold. */ \
Anna Bridge 160:5571c4ff569f 875 }
AnnaBridge 156:ff21514d8981 876 #else
Anna Bridge 160:5571c4ff569f 877 #define LESENSE_CH_CONF_DEFAULT \
Anna Bridge 160:5571c4ff569f 878 { \
Anna Bridge 160:5571c4ff569f 879 false, /* Disable scan channel. */ \
Anna Bridge 160:5571c4ff569f 880 false, /* Disable the assigned pin on scan channel. */ \
Anna Bridge 160:5571c4ff569f 881 false, /* Disable interrupts on channel. */ \
Anna Bridge 160:5571c4ff569f 882 lesenseChPinExDis, /* Channel pin is disabled during the excitation period. */ \
Anna Bridge 160:5571c4ff569f 883 lesenseChPinIdleDis, /* Channel pin is disabled during the idle period. */ \
Anna Bridge 160:5571c4ff569f 884 false, /* Don't use alternate excitation pins for excitation. */ \
Anna Bridge 160:5571c4ff569f 885 false, /* Disabled to shift results from this channel to the decoder register. */ \
Anna Bridge 160:5571c4ff569f 886 false, /* Disabled to invert the scan result bit. */ \
Anna Bridge 160:5571c4ff569f 887 false, /* Disabled to store counter value in the result buffer. */ \
Anna Bridge 160:5571c4ff569f 888 lesenseClkLF, /* Use the LF clock for excitation timing. */ \
Anna Bridge 160:5571c4ff569f 889 lesenseClkLF, /* Use the LF clock for sample timing. */ \
Anna Bridge 160:5571c4ff569f 890 0x00U, /* Excitation time is set to 0(+1) excitation clock cycles. */ \
Anna Bridge 160:5571c4ff569f 891 0x00U, /* Sample delay is set to 0(+1) sample clock cycles. */ \
Anna Bridge 160:5571c4ff569f 892 0x00U, /* Measure delay is set to 0 excitation clock cycles.*/ \
Anna Bridge 160:5571c4ff569f 893 0x00U, /* ACMP threshold has been set to 0. */ \
Anna Bridge 160:5571c4ff569f 894 lesenseSampleModeACMP, /* ACMP output will be used in comparison. */ \
Anna Bridge 160:5571c4ff569f 895 lesenseSetIntNone, /* No interrupt is generated by the channel. */ \
Anna Bridge 160:5571c4ff569f 896 0x00U, /* Counter threshold has bee set to 0x00. */ \
Anna Bridge 160:5571c4ff569f 897 lesenseCompModeLess /* Compare mode has been set to trigger interrupt on "less". */ \
Anna Bridge 160:5571c4ff569f 898 }
AnnaBridge 156:ff21514d8981 899 #endif
AnnaBridge 156:ff21514d8981 900
AnnaBridge 156:ff21514d8981 901 /** Default configuration for all sensor channels. */
Anna Bridge 160:5571c4ff569f 902 #define LESENSE_SCAN_CONF_DEFAULT \
Anna Bridge 160:5571c4ff569f 903 { \
Anna Bridge 160:5571c4ff569f 904 { \
Anna Bridge 160:5571c4ff569f 905 LESENSE_CH_CONF_DEFAULT, /* Scan channel 0. */ \
Anna Bridge 160:5571c4ff569f 906 LESENSE_CH_CONF_DEFAULT, /* Scan channel 1. */ \
Anna Bridge 160:5571c4ff569f 907 LESENSE_CH_CONF_DEFAULT, /* Scan channel 2. */ \
Anna Bridge 160:5571c4ff569f 908 LESENSE_CH_CONF_DEFAULT, /* Scan channel 3. */ \
Anna Bridge 160:5571c4ff569f 909 LESENSE_CH_CONF_DEFAULT, /* Scan channel 4. */ \
Anna Bridge 160:5571c4ff569f 910 LESENSE_CH_CONF_DEFAULT, /* Scan channel 5. */ \
Anna Bridge 160:5571c4ff569f 911 LESENSE_CH_CONF_DEFAULT, /* Scan channel 6. */ \
Anna Bridge 160:5571c4ff569f 912 LESENSE_CH_CONF_DEFAULT, /* Scan channel 7. */ \
Anna Bridge 160:5571c4ff569f 913 LESENSE_CH_CONF_DEFAULT, /* Scan channel 8. */ \
Anna Bridge 160:5571c4ff569f 914 LESENSE_CH_CONF_DEFAULT, /* Scan channel 9. */ \
Anna Bridge 160:5571c4ff569f 915 LESENSE_CH_CONF_DEFAULT, /* Scan channel 10. */ \
Anna Bridge 160:5571c4ff569f 916 LESENSE_CH_CONF_DEFAULT, /* Scan channel 11. */ \
Anna Bridge 160:5571c4ff569f 917 LESENSE_CH_CONF_DEFAULT, /* Scan channel 12. */ \
Anna Bridge 160:5571c4ff569f 918 LESENSE_CH_CONF_DEFAULT, /* Scan channel 13. */ \
Anna Bridge 160:5571c4ff569f 919 LESENSE_CH_CONF_DEFAULT, /* Scan channel 14. */ \
Anna Bridge 160:5571c4ff569f 920 LESENSE_CH_CONF_DEFAULT, /* Scan channel 15. */ \
Anna Bridge 160:5571c4ff569f 921 } \
Anna Bridge 160:5571c4ff569f 922 }
AnnaBridge 156:ff21514d8981 923
AnnaBridge 156:ff21514d8981 924 /** Alternate excitation descriptor structure. */
Anna Bridge 160:5571c4ff569f 925 typedef struct {
AnnaBridge 156:ff21514d8981 926 /** Configure alternate excitation pins. If set, the corresponding alternate
AnnaBridge 156:ff21514d8981 927 * excitation pin/signal is enabled. */
AnnaBridge 156:ff21514d8981 928 bool enablePin;
AnnaBridge 156:ff21514d8981 929
AnnaBridge 156:ff21514d8981 930 /** Configure idle phase setup of alternate excitation pins.
Anna Bridge 160:5571c4ff569f 931 The idleConf parameter is not valid when altExMap==lesenseAltExMapACMP. */
AnnaBridge 156:ff21514d8981 932 LESENSE_AltExPinIdle_TypeDef idleConf;
AnnaBridge 156:ff21514d8981 933
AnnaBridge 156:ff21514d8981 934 /** Configure how to control the external alternate excitation pins. Only
Anna Bridge 160:5571c4ff569f 935 * applies if altExMap has been set to lesenseAltExMapALTEX.
Anna Bridge 160:5571c4ff569f 936 * If true, the excitation happens on the corresponding alternate excitation
Anna Bridge 160:5571c4ff569f 937 * pin during the excitation periods of all enabled channels.
Anna Bridge 160:5571c4ff569f 938 * If false, the excitation happens on the corresponding alternate excitation
Anna Bridge 160:5571c4ff569f 939 * pin ONLY during the excitation period of the corresponding channel.
Anna Bridge 160:5571c4ff569f 940 * The alwaysEx parameter is not valid when altExMap==lesenseAltExMapACMP. */
AnnaBridge 156:ff21514d8981 941 bool alwaysEx;
AnnaBridge 156:ff21514d8981 942 } LESENSE_AltExDesc_TypeDef;
AnnaBridge 156:ff21514d8981 943
AnnaBridge 156:ff21514d8981 944 /** Configuration structure for alternate excitation. */
Anna Bridge 160:5571c4ff569f 945 typedef struct {
AnnaBridge 156:ff21514d8981 946 /** Select alternate excitation mapping. */
AnnaBridge 156:ff21514d8981 947 LESENSE_AltExMap_TypeDef altExMap;
AnnaBridge 156:ff21514d8981 948
AnnaBridge 156:ff21514d8981 949 /** Alternate excitation channel descriptors.
AnnaBridge 156:ff21514d8981 950 * When altExMap==lesenseAltExMapALTEX only the 8 first descriptors are used.
AnnaBridge 156:ff21514d8981 951 * In this mode they describe the configuration of the LES_ALTEX0-7 pins.
AnnaBridge 156:ff21514d8981 952 * When altExMap==lesenseAltExMapACMP all 16 descriptors are used. In this
AnnaBridge 156:ff21514d8981 953 * mode they describe the configuration of the 16 possible ACMP0-1 excitation
AnnaBridge 156:ff21514d8981 954 * channels. Please refer to the user manual for a complete mapping of the
AnnaBridge 156:ff21514d8981 955 * routing.
AnnaBridge 156:ff21514d8981 956 * NOTE:
AnnaBridge 156:ff21514d8981 957 * Some parameters in the descriptors are not valid when
AnnaBridge 156:ff21514d8981 958 * altExMap==lesenseAltExMapACMP. Please refer to the definition of the
AnnaBridge 156:ff21514d8981 959 * LESENSE_AltExDesc_TypeDef structure for details regarding which parameters
AnnaBridge 156:ff21514d8981 960 * are valid. */
AnnaBridge 156:ff21514d8981 961 LESENSE_AltExDesc_TypeDef AltEx[16];
AnnaBridge 156:ff21514d8981 962 } LESENSE_ConfAltEx_TypeDef;
AnnaBridge 156:ff21514d8981 963
AnnaBridge 156:ff21514d8981 964 /** Default configuration for alternate excitation channel. */
Anna Bridge 160:5571c4ff569f 965 #define LESENSE_ALTEX_CH_CONF_DEFAULT \
Anna Bridge 160:5571c4ff569f 966 { \
Anna Bridge 160:5571c4ff569f 967 false, /* Alternate excitation disabled.*/ \
Anna Bridge 160:5571c4ff569f 968 lesenseAltExPinIdleDis,/* Alternate excitation pin is disabled in idle. */ \
Anna Bridge 160:5571c4ff569f 969 false /* Excite only for corresponding channel. */ \
Anna Bridge 160:5571c4ff569f 970 }
AnnaBridge 156:ff21514d8981 971
AnnaBridge 156:ff21514d8981 972 /** Default configuration for all alternate excitation channels. */
AnnaBridge 156:ff21514d8981 973 #if defined(_LESENSE_CTRL_ALTEXMAP_ACMP)
Anna Bridge 160:5571c4ff569f 974 #define LESENSE_ALTEX_CONF_DEFAULT \
Anna Bridge 160:5571c4ff569f 975 { \
Anna Bridge 160:5571c4ff569f 976 lesenseAltExMapACMP, \
Anna Bridge 160:5571c4ff569f 977 { \
Anna Bridge 160:5571c4ff569f 978 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 0. */ \
Anna Bridge 160:5571c4ff569f 979 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 1. */ \
Anna Bridge 160:5571c4ff569f 980 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 2. */ \
Anna Bridge 160:5571c4ff569f 981 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 3. */ \
Anna Bridge 160:5571c4ff569f 982 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 4. */ \
Anna Bridge 160:5571c4ff569f 983 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 5. */ \
Anna Bridge 160:5571c4ff569f 984 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 6. */ \
Anna Bridge 160:5571c4ff569f 985 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 7. */ \
Anna Bridge 160:5571c4ff569f 986 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 8. */ \
Anna Bridge 160:5571c4ff569f 987 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 9. */ \
Anna Bridge 160:5571c4ff569f 988 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 10. */ \
Anna Bridge 160:5571c4ff569f 989 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 11. */ \
Anna Bridge 160:5571c4ff569f 990 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 12. */ \
Anna Bridge 160:5571c4ff569f 991 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 13. */ \
Anna Bridge 160:5571c4ff569f 992 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 14. */ \
Anna Bridge 160:5571c4ff569f 993 LESENSE_ALTEX_CH_CONF_DEFAULT /* Alternate excitation channel 15. */ \
Anna Bridge 160:5571c4ff569f 994 } \
Anna Bridge 160:5571c4ff569f 995 }
AnnaBridge 156:ff21514d8981 996 #else
Anna Bridge 160:5571c4ff569f 997 #define LESENSE_ALTEX_CONF_DEFAULT \
Anna Bridge 160:5571c4ff569f 998 { \
Anna Bridge 160:5571c4ff569f 999 lesenseAltExMapCH, \
Anna Bridge 160:5571c4ff569f 1000 { \
Anna Bridge 160:5571c4ff569f 1001 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 0. */ \
Anna Bridge 160:5571c4ff569f 1002 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 1. */ \
Anna Bridge 160:5571c4ff569f 1003 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 2. */ \
Anna Bridge 160:5571c4ff569f 1004 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 3. */ \
Anna Bridge 160:5571c4ff569f 1005 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 4. */ \
Anna Bridge 160:5571c4ff569f 1006 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 5. */ \
Anna Bridge 160:5571c4ff569f 1007 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 6. */ \
Anna Bridge 160:5571c4ff569f 1008 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 7. */ \
Anna Bridge 160:5571c4ff569f 1009 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 8. */ \
Anna Bridge 160:5571c4ff569f 1010 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 9. */ \
Anna Bridge 160:5571c4ff569f 1011 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 10. */ \
Anna Bridge 160:5571c4ff569f 1012 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 11. */ \
Anna Bridge 160:5571c4ff569f 1013 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 12. */ \
Anna Bridge 160:5571c4ff569f 1014 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 13. */ \
Anna Bridge 160:5571c4ff569f 1015 LESENSE_ALTEX_CH_CONF_DEFAULT, /* Alternate excitation channel 14. */ \
Anna Bridge 160:5571c4ff569f 1016 LESENSE_ALTEX_CH_CONF_DEFAULT /* Alternate excitation channel 15. */ \
Anna Bridge 160:5571c4ff569f 1017 } \
Anna Bridge 160:5571c4ff569f 1018 }
AnnaBridge 156:ff21514d8981 1019 #endif
AnnaBridge 156:ff21514d8981 1020
AnnaBridge 156:ff21514d8981 1021 /** Decoder state condition descriptor structure. */
Anna Bridge 160:5571c4ff569f 1022 typedef struct {
AnnaBridge 156:ff21514d8981 1023 /** Configure compare value. State transition is triggered when sensor state
AnnaBridge 156:ff21514d8981 1024 * equals to this value. Valid range: 0-15 (4 bits). */
AnnaBridge 156:ff21514d8981 1025 uint8_t compVal;
AnnaBridge 156:ff21514d8981 1026
AnnaBridge 156:ff21514d8981 1027 /** Configure compare mask. Set bit X to exclude sensor X from evaluation.
AnnaBridge 156:ff21514d8981 1028 * Note: decoder can handle sensor inputs from up to 4 sensors, therefore
AnnaBridge 156:ff21514d8981 1029 * this mask is 4 bit long. */
AnnaBridge 156:ff21514d8981 1030 uint8_t compMask;
AnnaBridge 156:ff21514d8981 1031
AnnaBridge 156:ff21514d8981 1032 /** Configure index of state to be entered if the sensor state equals to
AnnaBridge 156:ff21514d8981 1033 * compVal. Valid range: 0-15 (4 bits). */
AnnaBridge 156:ff21514d8981 1034 uint8_t nextState;
AnnaBridge 156:ff21514d8981 1035
AnnaBridge 156:ff21514d8981 1036 /** Configure which PRS action to perform when sensor state equals to
AnnaBridge 156:ff21514d8981 1037 * compVal. */
AnnaBridge 156:ff21514d8981 1038 LESENSE_StTransAct_TypeDef prsAct;
AnnaBridge 156:ff21514d8981 1039
AnnaBridge 156:ff21514d8981 1040 /** If enabled, interrupt flag is set when sensor state equals to compVal. */
AnnaBridge 156:ff21514d8981 1041 bool setInt;
AnnaBridge 156:ff21514d8981 1042 } LESENSE_DecStCond_TypeDef;
AnnaBridge 156:ff21514d8981 1043
AnnaBridge 156:ff21514d8981 1044 /** Default configuration for decoder state condition. */
Anna Bridge 160:5571c4ff569f 1045 #define LESENSE_ST_CONF_DEFAULT \
Anna Bridge 160:5571c4ff569f 1046 { \
Anna Bridge 160:5571c4ff569f 1047 0x0FU, /* Compare value set to 0x0F. */ \
Anna Bridge 160:5571c4ff569f 1048 0x00U, /* All decoder inputs masked. */ \
Anna Bridge 160:5571c4ff569f 1049 0U, /* Next state is state 0. */ \
Anna Bridge 160:5571c4ff569f 1050 lesenseTransActNone, /* No PRS action performed on compare match. */ \
Anna Bridge 160:5571c4ff569f 1051 false /* No interrupt triggered on compare match. */ \
Anna Bridge 160:5571c4ff569f 1052 }
AnnaBridge 156:ff21514d8981 1053
AnnaBridge 156:ff21514d8981 1054 /** Decoder state x configuration structure. */
Anna Bridge 160:5571c4ff569f 1055 typedef struct {
AnnaBridge 156:ff21514d8981 1056 /** If enabled, the state descriptor pair in the next location will also be
AnnaBridge 156:ff21514d8981 1057 * evaluated. */
AnnaBridge 156:ff21514d8981 1058 bool chainDesc;
AnnaBridge 156:ff21514d8981 1059
AnnaBridge 156:ff21514d8981 1060 /** State condition descriptor A (high level descriptor of
AnnaBridge 156:ff21514d8981 1061 * LESENSE_STx_DECCONFA). */
AnnaBridge 156:ff21514d8981 1062 LESENSE_DecStCond_TypeDef confA;
AnnaBridge 156:ff21514d8981 1063
AnnaBridge 156:ff21514d8981 1064 /** State condition descriptor B (high level descriptor of
AnnaBridge 156:ff21514d8981 1065 * LESENSE_STx_DECCONFB). */
AnnaBridge 156:ff21514d8981 1066 LESENSE_DecStCond_TypeDef confB;
AnnaBridge 156:ff21514d8981 1067 } LESENSE_DecStDesc_TypeDef;
AnnaBridge 156:ff21514d8981 1068
AnnaBridge 156:ff21514d8981 1069 /** Configuration structure for the decoder. */
Anna Bridge 160:5571c4ff569f 1070 typedef struct {
AnnaBridge 156:ff21514d8981 1071 /** Descriptor of the 16 or 32 decoder states depending on the device. */
AnnaBridge 156:ff21514d8981 1072 LESENSE_DecStDesc_TypeDef St[LESENSE_NUM_DECODER_STATES];
AnnaBridge 156:ff21514d8981 1073 } LESENSE_DecStAll_TypeDef;
AnnaBridge 156:ff21514d8981 1074
AnnaBridge 156:ff21514d8981 1075 /** Default configuration for all decoder states. */
AnnaBridge 156:ff21514d8981 1076 #if defined(_SILICON_LABS_32B_SERIES_0)
Anna Bridge 160:5571c4ff569f 1077 #define LESENSE_DECODER_CONF_DEFAULT \
Anna Bridge 160:5571c4ff569f 1078 { /* chain | Descriptor A | Descriptor B */ \
Anna Bridge 160:5571c4ff569f 1079 { \
Anna Bridge 160:5571c4ff569f 1080 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 0. */ \
Anna Bridge 160:5571c4ff569f 1081 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 1. */ \
Anna Bridge 160:5571c4ff569f 1082 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 2. */ \
Anna Bridge 160:5571c4ff569f 1083 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 3. */ \
Anna Bridge 160:5571c4ff569f 1084 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 4. */ \
Anna Bridge 160:5571c4ff569f 1085 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 5. */ \
Anna Bridge 160:5571c4ff569f 1086 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 6. */ \
Anna Bridge 160:5571c4ff569f 1087 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 7. */ \
Anna Bridge 160:5571c4ff569f 1088 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 8. */ \
Anna Bridge 160:5571c4ff569f 1089 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 9. */ \
Anna Bridge 160:5571c4ff569f 1090 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 10. */ \
Anna Bridge 160:5571c4ff569f 1091 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 11. */ \
Anna Bridge 160:5571c4ff569f 1092 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 12. */ \
Anna Bridge 160:5571c4ff569f 1093 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 13. */ \
Anna Bridge 160:5571c4ff569f 1094 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 14. */ \
Anna Bridge 160:5571c4ff569f 1095 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT } /* Decoder state 15. */ \
Anna Bridge 160:5571c4ff569f 1096 } \
Anna Bridge 160:5571c4ff569f 1097 }
AnnaBridge 156:ff21514d8981 1098 #else
Anna Bridge 160:5571c4ff569f 1099 #define LESENSE_DECODER_CONF_DEFAULT \
Anna Bridge 160:5571c4ff569f 1100 { /* chain | Descriptor A | Descriptor B */ \
Anna Bridge 160:5571c4ff569f 1101 { \
Anna Bridge 160:5571c4ff569f 1102 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 0. */ \
Anna Bridge 160:5571c4ff569f 1103 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 1. */ \
Anna Bridge 160:5571c4ff569f 1104 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 2. */ \
Anna Bridge 160:5571c4ff569f 1105 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 3. */ \
Anna Bridge 160:5571c4ff569f 1106 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 4. */ \
Anna Bridge 160:5571c4ff569f 1107 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 5. */ \
Anna Bridge 160:5571c4ff569f 1108 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 6. */ \
Anna Bridge 160:5571c4ff569f 1109 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 7. */ \
Anna Bridge 160:5571c4ff569f 1110 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 8. */ \
Anna Bridge 160:5571c4ff569f 1111 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 9. */ \
Anna Bridge 160:5571c4ff569f 1112 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 10. */ \
Anna Bridge 160:5571c4ff569f 1113 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 11. */ \
Anna Bridge 160:5571c4ff569f 1114 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 12. */ \
Anna Bridge 160:5571c4ff569f 1115 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 13. */ \
Anna Bridge 160:5571c4ff569f 1116 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 14. */ \
Anna Bridge 160:5571c4ff569f 1117 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 15. */ \
Anna Bridge 160:5571c4ff569f 1118 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 16. */ \
Anna Bridge 160:5571c4ff569f 1119 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 17. */ \
Anna Bridge 160:5571c4ff569f 1120 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 18. */ \
Anna Bridge 160:5571c4ff569f 1121 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 19. */ \
Anna Bridge 160:5571c4ff569f 1122 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 20. */ \
Anna Bridge 160:5571c4ff569f 1123 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 21. */ \
Anna Bridge 160:5571c4ff569f 1124 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 22. */ \
Anna Bridge 160:5571c4ff569f 1125 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 23. */ \
Anna Bridge 160:5571c4ff569f 1126 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 24. */ \
Anna Bridge 160:5571c4ff569f 1127 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 25. */ \
Anna Bridge 160:5571c4ff569f 1128 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 26. */ \
Anna Bridge 160:5571c4ff569f 1129 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 27. */ \
Anna Bridge 160:5571c4ff569f 1130 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 28. */ \
Anna Bridge 160:5571c4ff569f 1131 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 29. */ \
Anna Bridge 160:5571c4ff569f 1132 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, /* Decoder state 30. */ \
Anna Bridge 160:5571c4ff569f 1133 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT } /* Decoder state 31. */ \
Anna Bridge 160:5571c4ff569f 1134 } \
Anna Bridge 160:5571c4ff569f 1135 }
AnnaBridge 156:ff21514d8981 1136 #endif
AnnaBridge 156:ff21514d8981 1137
AnnaBridge 156:ff21514d8981 1138 /*******************************************************************************
AnnaBridge 156:ff21514d8981 1139 ***************************** PROTOTYPES **********************************
AnnaBridge 156:ff21514d8981 1140 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1141 void LESENSE_Init(const LESENSE_Init_TypeDef * init, bool reqReset);
AnnaBridge 156:ff21514d8981 1142 void LESENSE_Reset(void);
AnnaBridge 156:ff21514d8981 1143
AnnaBridge 156:ff21514d8981 1144 uint32_t LESENSE_ScanFreqSet(uint32_t refFreq, uint32_t scanFreq);
AnnaBridge 156:ff21514d8981 1145 void LESENSE_ScanModeSet(LESENSE_ScanMode_TypeDef scanMode, bool start);
AnnaBridge 156:ff21514d8981 1146 void LESENSE_StartDelaySet(uint8_t startDelay);
AnnaBridge 156:ff21514d8981 1147 void LESENSE_ClkDivSet(LESENSE_ChClk_TypeDef clk,
AnnaBridge 156:ff21514d8981 1148 LESENSE_ClkPresc_TypeDef clkDiv);
AnnaBridge 156:ff21514d8981 1149
AnnaBridge 156:ff21514d8981 1150 void LESENSE_ChannelAllConfig(const LESENSE_ChAll_TypeDef * confChAll);
AnnaBridge 156:ff21514d8981 1151 void LESENSE_ChannelConfig(const LESENSE_ChDesc_TypeDef * confCh,
AnnaBridge 156:ff21514d8981 1152 uint32_t chIdx);
AnnaBridge 156:ff21514d8981 1153 void LESENSE_ChannelEnable(uint8_t chIdx,
AnnaBridge 156:ff21514d8981 1154 bool enaScanCh,
AnnaBridge 156:ff21514d8981 1155 bool enaPin);
AnnaBridge 156:ff21514d8981 1156 void LESENSE_ChannelEnableMask(uint16_t chMask, uint16_t pinMask);
AnnaBridge 156:ff21514d8981 1157 void LESENSE_ChannelTimingSet(uint8_t chIdx,
AnnaBridge 156:ff21514d8981 1158 uint8_t exTime,
AnnaBridge 156:ff21514d8981 1159 uint8_t sampleDelay,
AnnaBridge 156:ff21514d8981 1160 uint16_t measDelay);
AnnaBridge 156:ff21514d8981 1161 void LESENSE_ChannelThresSet(uint8_t chIdx,
AnnaBridge 156:ff21514d8981 1162 uint16_t acmpThres,
AnnaBridge 156:ff21514d8981 1163 uint16_t cntThres);
AnnaBridge 156:ff21514d8981 1164 #if defined(_LESENSE_CH_EVAL_MODE_MASK)
AnnaBridge 156:ff21514d8981 1165 void LESENSE_ChannelSlidingWindow(uint8_t chIdx,
AnnaBridge 156:ff21514d8981 1166 uint32_t windowSize,
AnnaBridge 156:ff21514d8981 1167 uint32_t initValue);
AnnaBridge 156:ff21514d8981 1168 void LESENSE_ChannelStepDetection(uint8_t chIdx,
AnnaBridge 156:ff21514d8981 1169 uint32_t stepSize,
AnnaBridge 156:ff21514d8981 1170 uint32_t initValue);
AnnaBridge 156:ff21514d8981 1171 void LESENSE_WindowSizeSet(uint32_t windowSize);
AnnaBridge 156:ff21514d8981 1172 void LESENSE_StepSizeSet(uint32_t stepSize);
AnnaBridge 156:ff21514d8981 1173 #endif
AnnaBridge 156:ff21514d8981 1174
AnnaBridge 156:ff21514d8981 1175 void LESENSE_AltExConfig(const LESENSE_ConfAltEx_TypeDef * confAltEx);
AnnaBridge 156:ff21514d8981 1176
AnnaBridge 156:ff21514d8981 1177 void LESENSE_DecoderStateAllConfig(const LESENSE_DecStAll_TypeDef * confDecStAll);
AnnaBridge 156:ff21514d8981 1178 void LESENSE_DecoderStateConfig(const LESENSE_DecStDesc_TypeDef * confDecSt,
AnnaBridge 156:ff21514d8981 1179 uint32_t decSt);
AnnaBridge 156:ff21514d8981 1180 void LESENSE_DecoderStateSet(uint32_t decSt);
AnnaBridge 156:ff21514d8981 1181 uint32_t LESENSE_DecoderStateGet(void);
AnnaBridge 156:ff21514d8981 1182 #if defined(_LESENSE_PRSCTRL_MASK)
AnnaBridge 156:ff21514d8981 1183 void LESENSE_DecoderPrsOut(bool enable, uint32_t decMask, uint32_t decCmp);
AnnaBridge 156:ff21514d8981 1184 #endif
AnnaBridge 156:ff21514d8981 1185
AnnaBridge 156:ff21514d8981 1186 void LESENSE_ScanStart(void);
AnnaBridge 156:ff21514d8981 1187 void LESENSE_ScanStop(void);
AnnaBridge 156:ff21514d8981 1188 void LESENSE_DecoderStart(void);
AnnaBridge 156:ff21514d8981 1189 void LESENSE_ResultBufferClear(void);
AnnaBridge 156:ff21514d8981 1190
AnnaBridge 156:ff21514d8981 1191 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1192 * @brief
AnnaBridge 156:ff21514d8981 1193 * Stop LESENSE decoder.
AnnaBridge 156:ff21514d8981 1194 *
AnnaBridge 156:ff21514d8981 1195 * @details
AnnaBridge 156:ff21514d8981 1196 * This function disables the LESENSE decoder by setting the command to the
AnnaBridge 156:ff21514d8981 1197 * LESENSE_DECCTRL register.
AnnaBridge 156:ff21514d8981 1198 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1199 __STATIC_INLINE void LESENSE_DecoderStop(void)
AnnaBridge 156:ff21514d8981 1200 {
AnnaBridge 156:ff21514d8981 1201 /* Stop the decoder */
AnnaBridge 156:ff21514d8981 1202 LESENSE->DECCTRL |= LESENSE_DECCTRL_DISABLE;
AnnaBridge 156:ff21514d8981 1203 }
AnnaBridge 156:ff21514d8981 1204
AnnaBridge 156:ff21514d8981 1205 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1206 * @brief
AnnaBridge 156:ff21514d8981 1207 * Get the current status of LESENSE.
AnnaBridge 156:ff21514d8981 1208 *
AnnaBridge 156:ff21514d8981 1209 * @return
AnnaBridge 156:ff21514d8981 1210 * This function returns the value of LESENSE_STATUS register that
AnnaBridge 156:ff21514d8981 1211 * contains the OR combination of the following status bits:
AnnaBridge 156:ff21514d8981 1212 * @li LESENSE_STATUS_RESV - Result data valid. Set when data is available
AnnaBridge 156:ff21514d8981 1213 * in the result buffer. Cleared when the buffer is empty.
AnnaBridge 156:ff21514d8981 1214 * @li LESENSE_STATUS_RESFULL - Result buffer full. Set when the result
AnnaBridge 156:ff21514d8981 1215 * buffer is full.
AnnaBridge 156:ff21514d8981 1216 * @li LESENSE_STATUS_RUNNING - LESENSE is active.
AnnaBridge 156:ff21514d8981 1217 * @li LESENSE_STATUS_SCANACTIVE - LESENSE is currently interfacing sensors.
AnnaBridge 156:ff21514d8981 1218 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1219 __STATIC_INLINE uint32_t LESENSE_StatusGet(void)
AnnaBridge 156:ff21514d8981 1220 {
AnnaBridge 156:ff21514d8981 1221 return LESENSE->STATUS;
AnnaBridge 156:ff21514d8981 1222 }
AnnaBridge 156:ff21514d8981 1223
AnnaBridge 156:ff21514d8981 1224 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1225 * @brief
AnnaBridge 156:ff21514d8981 1226 * Wait until the status of LESENSE is equal to what requested.
AnnaBridge 156:ff21514d8981 1227 *
AnnaBridge 156:ff21514d8981 1228 * @details
AnnaBridge 156:ff21514d8981 1229 * This function is polling the LESENSE_STATUS register and waits until the
AnnaBridge 156:ff21514d8981 1230 * requested combination of flags are set.
AnnaBridge 156:ff21514d8981 1231 *
AnnaBridge 156:ff21514d8981 1232 * @param[in] flag
AnnaBridge 156:ff21514d8981 1233 * The OR combination of the following status bits:
AnnaBridge 156:ff21514d8981 1234 * @li LESENSE_STATUS_BUFDATAV - Result data valid. Set when data is available
AnnaBridge 156:ff21514d8981 1235 * in the result buffer. Cleared when the buffer is empty.
AnnaBridge 156:ff21514d8981 1236 * @li LESENSE_STATUS_BUFHALFFULL - Result buffer half full. Set when the
AnnaBridge 156:ff21514d8981 1237 * result buffer is half full.
AnnaBridge 156:ff21514d8981 1238 * @li LESENSE_STATUS_BUFFULL - Result buffer full. Set when the result
AnnaBridge 156:ff21514d8981 1239 * buffer is full.
AnnaBridge 156:ff21514d8981 1240 * @li LESENSE_STATUS_RUNNING - LESENSE is active.
AnnaBridge 156:ff21514d8981 1241 * @li LESENSE_STATUS_SCANACTIVE - LESENSE is currently interfacing sensors.
AnnaBridge 156:ff21514d8981 1242 * @li LESENSE_STATUS_DACACTIVE - The DAC interface is currently active.
AnnaBridge 156:ff21514d8981 1243 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1244 __STATIC_INLINE void LESENSE_StatusWait(uint32_t flag)
AnnaBridge 156:ff21514d8981 1245 {
AnnaBridge 156:ff21514d8981 1246 while (!(LESENSE->STATUS & flag))
AnnaBridge 156:ff21514d8981 1247 ;
AnnaBridge 156:ff21514d8981 1248 }
AnnaBridge 156:ff21514d8981 1249
AnnaBridge 156:ff21514d8981 1250 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1251 * @brief
AnnaBridge 156:ff21514d8981 1252 * Get the currently active channel index.
AnnaBridge 156:ff21514d8981 1253 *
AnnaBridge 156:ff21514d8981 1254 * @return
AnnaBridge 156:ff21514d8981 1255 * This function returns the value of LESENSE_CHINDEX register that
AnnaBridge 156:ff21514d8981 1256 * contains the index of the currently active channel (0-15).
AnnaBridge 156:ff21514d8981 1257 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1258 __STATIC_INLINE uint32_t LESENSE_ChannelActiveGet(void)
AnnaBridge 156:ff21514d8981 1259 {
AnnaBridge 156:ff21514d8981 1260 return LESENSE->CURCH;
AnnaBridge 156:ff21514d8981 1261 }
AnnaBridge 156:ff21514d8981 1262
AnnaBridge 156:ff21514d8981 1263 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1264 * @brief
AnnaBridge 156:ff21514d8981 1265 * Get the latest scan comparison result (1 bit / channel).
AnnaBridge 156:ff21514d8981 1266 *
AnnaBridge 156:ff21514d8981 1267 * @return
AnnaBridge 156:ff21514d8981 1268 * This function returns the value of LESENSE_SCANRES register that
AnnaBridge 156:ff21514d8981 1269 * contains the comparison result of the last scan on all channels.
AnnaBridge 156:ff21514d8981 1270 * Bit x is set if a comparison triggered on channel x, which means that the
AnnaBridge 156:ff21514d8981 1271 * LESENSE counter met the comparison criteria set in LESENSE_CHx_EVAL by
AnnaBridge 156:ff21514d8981 1272 * COMPMODE and CNTTHRES.
AnnaBridge 156:ff21514d8981 1273 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1274 __STATIC_INLINE uint32_t LESENSE_ScanResultGet(void)
AnnaBridge 156:ff21514d8981 1275 {
AnnaBridge 156:ff21514d8981 1276 return LESENSE->SCANRES & _LESENSE_SCANRES_SCANRES_MASK;
AnnaBridge 156:ff21514d8981 1277 }
AnnaBridge 156:ff21514d8981 1278
AnnaBridge 156:ff21514d8981 1279 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1280 * @brief
AnnaBridge 156:ff21514d8981 1281 * Get the oldest unread data from the result buffer.
AnnaBridge 156:ff21514d8981 1282 *
AnnaBridge 156:ff21514d8981 1283 * @note
AnnaBridge 156:ff21514d8981 1284 * Make sure that the STORERES bit is set in LESENSE_CHx_EVAL, or
AnnaBridge 156:ff21514d8981 1285 * STRSCANRES bit is set in LESENSE_CTRL, otherwise this function will return
AnnaBridge 156:ff21514d8981 1286 * undefined value.
AnnaBridge 156:ff21514d8981 1287 *
AnnaBridge 156:ff21514d8981 1288 * @return
AnnaBridge 156:ff21514d8981 1289 * This function returns the value of LESENSE_RESDATA register that
AnnaBridge 156:ff21514d8981 1290 * contains the oldest unread counter result from the result buffer.
AnnaBridge 156:ff21514d8981 1291 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1292 __STATIC_INLINE uint32_t LESENSE_ScanResultDataGet(void)
AnnaBridge 156:ff21514d8981 1293 {
AnnaBridge 156:ff21514d8981 1294 return LESENSE->BUFDATA;
AnnaBridge 156:ff21514d8981 1295 }
AnnaBridge 156:ff21514d8981 1296
AnnaBridge 156:ff21514d8981 1297 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1298 * @brief
AnnaBridge 156:ff21514d8981 1299 * Get data from the result data buffer.
AnnaBridge 156:ff21514d8981 1300 *
AnnaBridge 156:ff21514d8981 1301 * @note
AnnaBridge 156:ff21514d8981 1302 * Make sure that the STORERES bit is set in LESENSE_CHx_EVAL, or
AnnaBridge 156:ff21514d8981 1303 * STRSCANRES bit is set in LESENSE_CTRL, otherwise this function will return
AnnaBridge 156:ff21514d8981 1304 * undefined value.
AnnaBridge 156:ff21514d8981 1305 *
AnnaBridge 156:ff21514d8981 1306 * @param[in] idx
AnnaBridge 156:ff21514d8981 1307 * Result data buffer index. Valid range: 0-15.
AnnaBridge 156:ff21514d8981 1308 *
AnnaBridge 156:ff21514d8981 1309 * @return
AnnaBridge 156:ff21514d8981 1310 * This function returns the selected word from the result data buffer.
AnnaBridge 156:ff21514d8981 1311 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1312 __STATIC_INLINE uint32_t LESENSE_ScanResultDataBufferGet(uint32_t idx)
AnnaBridge 156:ff21514d8981 1313 {
AnnaBridge 156:ff21514d8981 1314 /* Note: masking is needed to avoid over-indexing! */
AnnaBridge 156:ff21514d8981 1315 return LESENSE->BUF[idx & 0x0FU].DATA;
AnnaBridge 156:ff21514d8981 1316 }
AnnaBridge 156:ff21514d8981 1317
AnnaBridge 156:ff21514d8981 1318 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1319 * @brief
AnnaBridge 156:ff21514d8981 1320 * Get the current state of the LESENSE sensor.
AnnaBridge 156:ff21514d8981 1321 *
AnnaBridge 156:ff21514d8981 1322 * @return
AnnaBridge 156:ff21514d8981 1323 * This function returns the value of LESENSE_SENSORSTATE register that
AnnaBridge 156:ff21514d8981 1324 * represents the current state of the LESENSE sensor.
AnnaBridge 156:ff21514d8981 1325 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1326 __STATIC_INLINE uint32_t LESENSE_SensorStateGet(void)
AnnaBridge 156:ff21514d8981 1327 {
AnnaBridge 156:ff21514d8981 1328 return LESENSE->SENSORSTATE;
AnnaBridge 156:ff21514d8981 1329 }
AnnaBridge 156:ff21514d8981 1330
AnnaBridge 156:ff21514d8981 1331 #if defined(LESENSE_POWERDOWN_RAM)
AnnaBridge 156:ff21514d8981 1332 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1333 * @brief
AnnaBridge 156:ff21514d8981 1334 * Shut off power to the LESENSE RAM, disables LESENSE.
AnnaBridge 156:ff21514d8981 1335 *
AnnaBridge 156:ff21514d8981 1336 * @details
AnnaBridge 156:ff21514d8981 1337 * This function shuts off the LESENSE RAM in order to decrease the leakage
AnnaBridge 156:ff21514d8981 1338 * current of the mcu if LESENSE is not used in your application.
AnnaBridge 156:ff21514d8981 1339 *
AnnaBridge 156:ff21514d8981 1340 * @note
AnnaBridge 156:ff21514d8981 1341 * Warning! Once the LESENSE RAM is powered down, it cannot be powered up
AnnaBridge 156:ff21514d8981 1342 * again.
AnnaBridge 156:ff21514d8981 1343 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1344 __STATIC_INLINE void LESENSE_RAMPowerDown(void)
AnnaBridge 156:ff21514d8981 1345 {
AnnaBridge 156:ff21514d8981 1346 /* Power down LESENSE RAM */
AnnaBridge 156:ff21514d8981 1347 LESENSE->POWERDOWN = LESENSE_POWERDOWN_RAM;
AnnaBridge 156:ff21514d8981 1348 }
AnnaBridge 156:ff21514d8981 1349 #endif
AnnaBridge 156:ff21514d8981 1350
AnnaBridge 156:ff21514d8981 1351 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1352 * @brief
AnnaBridge 156:ff21514d8981 1353 * Clear one or more pending LESENSE interrupts.
AnnaBridge 156:ff21514d8981 1354 *
AnnaBridge 156:ff21514d8981 1355 * @param[in] flags
AnnaBridge 156:ff21514d8981 1356 * Pending LESENSE interrupt sources to clear. Use a set of interrupt flags
AnnaBridge 156:ff21514d8981 1357 * OR-ed together to clear multiple interrupt sources of the LESENSE module
AnnaBridge 156:ff21514d8981 1358 * (LESENSE_IF_nnn).
AnnaBridge 156:ff21514d8981 1359 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1360 __STATIC_INLINE void LESENSE_IntClear(uint32_t flags)
AnnaBridge 156:ff21514d8981 1361 {
AnnaBridge 156:ff21514d8981 1362 LESENSE->IFC = flags;
AnnaBridge 156:ff21514d8981 1363 }
AnnaBridge 156:ff21514d8981 1364
AnnaBridge 156:ff21514d8981 1365 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1366 * @brief
AnnaBridge 156:ff21514d8981 1367 * Enable one or more LESENSE interrupts.
AnnaBridge 156:ff21514d8981 1368 *
AnnaBridge 156:ff21514d8981 1369 * @param[in] flags
AnnaBridge 156:ff21514d8981 1370 * LESENSE interrupt sources to enable. Use a set of interrupt flags OR-ed
AnnaBridge 156:ff21514d8981 1371 * together to enable multiple interrupt sources of the LESENSE module
AnnaBridge 156:ff21514d8981 1372 * (LESENSE_IF_nnn).
AnnaBridge 156:ff21514d8981 1373 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1374 __STATIC_INLINE void LESENSE_IntEnable(uint32_t flags)
AnnaBridge 156:ff21514d8981 1375 {
AnnaBridge 156:ff21514d8981 1376 LESENSE->IEN |= flags;
AnnaBridge 156:ff21514d8981 1377 }
AnnaBridge 156:ff21514d8981 1378
AnnaBridge 156:ff21514d8981 1379 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1380 * @brief
AnnaBridge 156:ff21514d8981 1381 * Disable one or more LESENSE interrupts.
AnnaBridge 156:ff21514d8981 1382 *
AnnaBridge 156:ff21514d8981 1383 * @param[in] flags
AnnaBridge 156:ff21514d8981 1384 * LESENSE interrupt sources to disable. Use a set of interrupt flags OR-ed
AnnaBridge 156:ff21514d8981 1385 * together to disable multiple interrupt sources of the LESENSE module
AnnaBridge 156:ff21514d8981 1386 * (LESENSE_IF_nnn).
AnnaBridge 156:ff21514d8981 1387 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1388 __STATIC_INLINE void LESENSE_IntDisable(uint32_t flags)
AnnaBridge 156:ff21514d8981 1389 {
AnnaBridge 156:ff21514d8981 1390 LESENSE->IEN &= ~flags;
AnnaBridge 156:ff21514d8981 1391 }
AnnaBridge 156:ff21514d8981 1392
AnnaBridge 156:ff21514d8981 1393 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1394 * @brief
AnnaBridge 156:ff21514d8981 1395 * Set one or more pending LESENSE interrupts from SW.
AnnaBridge 156:ff21514d8981 1396 *
AnnaBridge 156:ff21514d8981 1397 * @param[in] flags
AnnaBridge 156:ff21514d8981 1398 * LESENSE interrupt sources to set to pending. Use a set of interrupt
AnnaBridge 156:ff21514d8981 1399 * flags OR-ed together to set multiple interrupt sources of the LESENSE
AnnaBridge 156:ff21514d8981 1400 * module (LESENSE_IFS_nnn).
AnnaBridge 156:ff21514d8981 1401 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1402 __STATIC_INLINE void LESENSE_IntSet(uint32_t flags)
AnnaBridge 156:ff21514d8981 1403 {
AnnaBridge 156:ff21514d8981 1404 LESENSE->IFS = flags;
AnnaBridge 156:ff21514d8981 1405 }
AnnaBridge 156:ff21514d8981 1406
AnnaBridge 156:ff21514d8981 1407 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1408 * @brief
AnnaBridge 156:ff21514d8981 1409 * Get pending LESENSE interrupt flags.
AnnaBridge 156:ff21514d8981 1410 *
AnnaBridge 156:ff21514d8981 1411 * @note
AnnaBridge 156:ff21514d8981 1412 * The event bits are not cleared by the use of this function.
AnnaBridge 156:ff21514d8981 1413 *
AnnaBridge 156:ff21514d8981 1414 * @return
AnnaBridge 156:ff21514d8981 1415 * Pending LESENSE interrupt sources. The OR combination of valid interrupt
AnnaBridge 156:ff21514d8981 1416 * flags of the LESENSE module (LESENSE_IF_nnn).
AnnaBridge 156:ff21514d8981 1417 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1418 __STATIC_INLINE uint32_t LESENSE_IntGet(void)
AnnaBridge 156:ff21514d8981 1419 {
AnnaBridge 156:ff21514d8981 1420 return LESENSE->IF;
AnnaBridge 156:ff21514d8981 1421 }
AnnaBridge 156:ff21514d8981 1422
AnnaBridge 156:ff21514d8981 1423 /***************************************************************************//**
AnnaBridge 156:ff21514d8981 1424 * @brief
AnnaBridge 156:ff21514d8981 1425 * Get enabled and pending LESENSE interrupt flags.
AnnaBridge 156:ff21514d8981 1426 *
AnnaBridge 156:ff21514d8981 1427 * @details
AnnaBridge 156:ff21514d8981 1428 * Useful for handling more interrupt sources in the same interrupt handler.
AnnaBridge 156:ff21514d8981 1429 *
AnnaBridge 156:ff21514d8981 1430 * @note
AnnaBridge 156:ff21514d8981 1431 * The event bits are not cleared by the use of this function.
AnnaBridge 156:ff21514d8981 1432 *
AnnaBridge 156:ff21514d8981 1433 * @return
AnnaBridge 156:ff21514d8981 1434 * Pending and enabled LESENSE interrupt sources.
AnnaBridge 156:ff21514d8981 1435 * The return value is the bitwise AND combination of
AnnaBridge 156:ff21514d8981 1436 * - the OR combination of enabled interrupt sources in LESENSE_IEN_nnn
AnnaBridge 156:ff21514d8981 1437 * register (LESENSE_IEN_nnn) and
AnnaBridge 156:ff21514d8981 1438 * - the OR combination of valid interrupt flags of the LESENSE module
AnnaBridge 156:ff21514d8981 1439 * (LESENSE_IF_nnn).
AnnaBridge 156:ff21514d8981 1440 ******************************************************************************/
AnnaBridge 156:ff21514d8981 1441 __STATIC_INLINE uint32_t LESENSE_IntGetEnabled(void)
AnnaBridge 156:ff21514d8981 1442 {
AnnaBridge 156:ff21514d8981 1443 uint32_t tmp;
AnnaBridge 156:ff21514d8981 1444
AnnaBridge 156:ff21514d8981 1445 /* Store LESENSE->IEN in temporary variable in order to define explicit order
AnnaBridge 156:ff21514d8981 1446 * of volatile accesses. */
AnnaBridge 156:ff21514d8981 1447 tmp = LESENSE->IEN;
AnnaBridge 156:ff21514d8981 1448
AnnaBridge 156:ff21514d8981 1449 /* Bitwise AND of pending and enabled interrupts */
AnnaBridge 156:ff21514d8981 1450 return LESENSE->IF & tmp;
AnnaBridge 156:ff21514d8981 1451 }
AnnaBridge 156:ff21514d8981 1452
AnnaBridge 156:ff21514d8981 1453 /** @} (end addtogroup LESENSE) */
AnnaBridge 156:ff21514d8981 1454 /** @} (end addtogroup emlib) */
AnnaBridge 156:ff21514d8981 1455
AnnaBridge 156:ff21514d8981 1456 #ifdef __cplusplus
AnnaBridge 156:ff21514d8981 1457 }
AnnaBridge 156:ff21514d8981 1458 #endif
AnnaBridge 156:ff21514d8981 1459
AnnaBridge 156:ff21514d8981 1460 #endif /* defined(LESENSE_COUNT) && (LESENSE_COUNT > 0) */
AnnaBridge 156:ff21514d8981 1461
AnnaBridge 156:ff21514d8981 1462 #endif /* EM_LESENSE_H */