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:
Wed Nov 08 17:18:06 2017 +0000
Revision:
156:ff21514d8981
Child:
159:7130f322cb7e
Reverting back to release 154 of the mbed library

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