The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.
Dependents: hello SerialTestv11 SerialTestv12 Sierpinski ... more
mbed 2
This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.
TARGET_EFM32GG_STK3700/TARGET_Silicon_Labs/TARGET_EFM32/emlib/inc/em_lesense.h@156:ff21514d8981, 2017-11-08 (annotated)
- 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?
User | Revision | Line number | New 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 */ |