33 #ifndef __SILICON_LABS_EM_LESENSE_H__
34 #define __SILICON_LABS_EM_LESENSE_H__
38 #if defined(LESENSE_COUNT) && (LESENSE_COUNT > 0)
81 } LESENSE_ClkPresc_TypeDef;
88 lesenseScanStartPeriodic = LESENSE_CTRL_SCANMODE_PERIODIC,
91 lesenseScanStartOneShot = LESENSE_CTRL_SCANMODE_ONESHOT,
94 lesenseScanStartPRS = LESENSE_CTRL_SCANMODE_PRS
95 } LESENSE_ScanMode_TypeDef;
107 #if defined( LESENSE_CTRL_PRSSEL_PRSCH4 )
110 #if defined( LESENSE_CTRL_PRSSEL_PRSCH5 )
113 #if defined( LESENSE_CTRL_PRSSEL_PRSCH6 )
116 #if defined( LESENSE_CTRL_PRSSEL_PRSCH7 )
119 #if defined( LESENSE_CTRL_PRSSEL_PRSCH8 )
122 #if defined( LESENSE_CTRL_PRSSEL_PRSCH9 )
125 #if defined( LESENSE_CTRL_PRSSEL_PRSCH10 )
128 #if defined( LESENSE_CTRL_PRSSEL_PRSCH11 )
131 } LESENSE_PRSSel_TypeDef;
138 lesenseAltExMapALTEX = _LESENSE_CTRL_ALTEXMAP_ALTEX,
141 lesenseAltExMapACMP = _LESENSE_CTRL_ALTEXMAP_ACMP
142 } LESENSE_AltExMap_TypeDef;
149 lesenseBufTrigHalf = LESENSE_CTRL_BUFIDL_HALFFULL,
152 lesenseBufTrigFull = LESENSE_CTRL_BUFIDL_FULL
153 } LESENSE_BufTrigLevel_TypeDef;
160 lesenseDMAWakeUpDisable = LESENSE_CTRL_DMAWU_DISABLE,
163 lesenseDMAWakeUpBufValid = LESENSE_CTRL_DMAWU_BUFDATAV,
168 lesenseDMAWakeUpBufLevel = LESENSE_CTRL_DMAWU_BUFLEVEL
169 } LESENSE_DMAWakeUp_TypeDef;
176 lesenseBiasModeDutyCycle = LESENSE_BIASCTRL_BIASMODE_DUTYCYCLE,
179 lesenseBiasModeHighAcc = LESENSE_BIASCTRL_BIASMODE_HIGHACC,
182 lesenseBiasModeDontTouch = LESENSE_BIASCTRL_BIASMODE_DONTTOUCH
183 } LESENSE_BiasMode_TypeDef;
191 lesenseScanConfDirMap = LESENSE_CTRL_SCANCONF_DIRMAP,
195 lesenseScanConfInvMap = LESENSE_CTRL_SCANCONF_INVMAP,
199 lesenseScanConfToggle = LESENSE_CTRL_SCANCONF_TOGGLE,
203 lesenseScanConfDecDef = LESENSE_CTRL_SCANCONF_DECDEF
204 } LESENSE_ScanConfSel_TypeDef;
212 lesenseDACIfData = _LESENSE_PERCTRL_DACCH0DATA_DACDATA,
216 lesenseACMPThres = _LESENSE_PERCTRL_DACCH0DATA_ACMPTHRES
217 } LESENSE_ControlDACData_TypeDef;
225 lesenseDACConvModeDisable = _LESENSE_PERCTRL_DACCH0CONV_DISABLE,
229 lesenseDACConvModeContinuous = _LESENSE_PERCTRL_DACCH0CONV_CONTINUOUS,
233 lesenseDACConvModeSampleHold = _LESENSE_PERCTRL_DACCH0CONV_SAMPLEHOLD,
237 lesenseDACConvModeSampleOff = _LESENSE_PERCTRL_DACCH0CONV_SAMPLEOFF
238 } LESENSE_ControlDACConv_TypeDef;
246 lesenseDACOutModeDisable = _LESENSE_PERCTRL_DACCH0OUT_DISABLE,
250 lesenseDACOutModePin = _LESENSE_PERCTRL_DACCH0OUT_PIN,
254 lesenseDACOutModeADCACMP = _LESENSE_PERCTRL_DACCH0OUT_ADCACMP,
258 lesenseDACOutModePinADCACMP = _LESENSE_PERCTRL_DACCH0OUT_PINADCACMP
259 } LESENSE_ControlDACOut_TypeDef;
266 lesenseDACRefVdd = LESENSE_PERCTRL_DACREF_VDD,
269 lesenseDACRefBandGap = LESENSE_PERCTRL_DACREF_BANDGAP
270 } LESENSE_DACRef_TypeDef;
278 lesenseACMPModeDisable = _LESENSE_PERCTRL_ACMP0MODE_DISABLE,
282 lesenseACMPModeMux = _LESENSE_PERCTRL_ACMP0MODE_MUX,
286 lesenseACMPModeMuxThres = _LESENSE_PERCTRL_ACMP0MODE_MUXTHRES
287 } LESENSE_ControlACMP_TypeDef;
294 lesenseWarmupModeNormal = LESENSE_PERCTRL_WARMUPMODE_NORMAL,
297 lesenseWarmupModeACMP = LESENSE_PERCTRL_WARMUPMODE_KEEPACMPWARM,
300 lesenseWarmupModeDAC = LESENSE_PERCTRL_WARMUPMODE_KEEPDACWARM,
303 lesenseWarmupModeKeepWarm = LESENSE_PERCTRL_WARMUPMODE_KEEPACMPDACWARM
304 } LESENSE_WarmupMode_TypeDef;
311 lesenseDecInputSensorSt = LESENSE_DECCTRL_INPUT_SENSORSTATE,
314 lesenseDecInputPRS = LESENSE_DECCTRL_INPUT_PRS
315 } LESENSE_DecInput_TypeDef;
322 lesenseSampleModeCounter = LESENSE_CH_INTERACT_SAMPLE_COUNTER,
325 lesenseSampleModeACMP = LESENSE_CH_INTERACT_SAMPLE_ACMP
326 } LESENSE_ChSampleMode_TypeDef;
333 lesenseSetIntNone = LESENSE_CH_INTERACT_SETIF_NONE,
336 lesenseSetIntLevel = LESENSE_CH_INTERACT_SETIF_LEVEL,
339 lesenseSetIntPosEdge = LESENSE_CH_INTERACT_SETIF_POSEDGE,
342 lesenseSetIntNegEdge = LESENSE_CH_INTERACT_SETIF_NEGEDGE
343 } LESENSE_ChIntMode_TypeDef;
350 lesenseChPinExDis = LESENSE_CH_INTERACT_EXMODE_DISABLE,
353 lesenseChPinExHigh = LESENSE_CH_INTERACT_EXMODE_HIGH,
356 lesenseChPinExLow = LESENSE_CH_INTERACT_EXMODE_LOW,
359 lesenseChPinExDACOut = LESENSE_CH_INTERACT_EXMODE_DACOUT
360 } LESENSE_ChPinExMode_TypeDef;
368 lesenseChPinIdleDis = _LESENSE_IDLECONF_CH0_DISABLE,
372 lesenseChPinIdleHigh = _LESENSE_IDLECONF_CH0_HIGH,
376 lesenseChPinIdleLow = _LESENSE_IDLECONF_CH0_LOW,
380 lesenseChPinIdleDACCh0 = _LESENSE_IDLECONF_CH0_DACCH0,
384 lesenseChPinIdleDACCh1 = _LESENSE_IDLECONF_CH12_DACCH1
385 } LESENSE_ChPinIdleMode_TypeDef;
392 lesenseClkLF = _LESENSE_CH_INTERACT_EXCLK_LFACLK,
395 lesenseClkHF = _LESENSE_CH_INTERACT_EXCLK_AUXHFRCO
396 } LESENSE_ChClk_TypeDef;
404 lesenseCompModeLess = LESENSE_CH_EVAL_COMP_LESS,
408 lesenseCompModeGreaterOrEq = LESENSE_CH_EVAL_COMP_GE
409 } LESENSE_ChCompMode_TypeDef;
417 lesenseAltExPinIdleDis = _LESENSE_ALTEXCONF_IDLECONF0_DISABLE,
421 lesenseAltExPinIdleHigh = _LESENSE_ALTEXCONF_IDLECONF0_HIGH,
425 lesenseAltExPinIdleLow = _LESENSE_ALTEXCONF_IDLECONF0_LOW
426 } LESENSE_AltExPinIdle_TypeDef;
434 lesenseTransActNone = LESENSE_ST_TCONFA_PRSACT_NONE,
437 lesenseTransActPRS0 = LESENSE_ST_TCONFA_PRSACT_PRS0,
440 lesenseTransActPRS1 = LESENSE_ST_TCONFA_PRSACT_PRS1,
443 lesenseTransActPRS01 = LESENSE_ST_TCONFA_PRSACT_PRS01,
446 lesenseTransActPRS2 = LESENSE_ST_TCONFA_PRSACT_PRS2,
449 lesenseTransActPRS02 = LESENSE_ST_TCONFA_PRSACT_PRS02,
452 lesenseTransActPRS12 = LESENSE_ST_TCONFA_PRSACT_PRS12,
455 lesenseTransActPRS012 = LESENSE_ST_TCONFA_PRSACT_PRS012,
458 lesenseTransActUp = LESENSE_ST_TCONFA_PRSACT_UP,
461 lesenseTransActDown = LESENSE_ST_TCONFA_PRSACT_DOWN,
464 lesenseTransActUpAndPRS2 = LESENSE_ST_TCONFA_PRSACT_UPANDPRS2,
467 lesenseTransActDownAndPRS2 = LESENSE_ST_TCONFA_PRSACT_DOWNANDPRS2
468 } LESENSE_StTransAct_TypeDef;
479 LESENSE_ScanMode_TypeDef scanStart;
482 LESENSE_PRSSel_TypeDef prsSel;
485 LESENSE_ScanConfSel_TypeDef scanConfSel;
505 LESENSE_BufTrigLevel_TypeDef bufTrigLevel;
508 LESENSE_DMAWakeUp_TypeDef wakeupOnDMA;
511 LESENSE_BiasMode_TypeDef biasMode;
515 } LESENSE_CoreCtrlDesc_TypeDef;
518 #define LESENSE_CORECTRL_DESC_DEFAULT \
520 lesenseScanStartPeriodic, \
522 lesenseScanConfDirMap, \
528 lesenseBufTrigHalf, \
529 lesenseDMAWakeUpDisable, \
530 lesenseBiasModeDontTouch, \
541 } LESENSE_TimeCtrlDesc_TypeDef;
544 #define LESENSE_TIMECTRL_DESC_DEFAULT \
554 LESENSE_ControlDACData_TypeDef dacCh0Data;
557 LESENSE_ControlDACConv_TypeDef dacCh0ConvMode;
560 LESENSE_ControlDACOut_TypeDef dacCh0OutMode;
563 LESENSE_ControlDACData_TypeDef dacCh1Data;
566 LESENSE_ControlDACConv_TypeDef dacCh1ConvMode;
569 LESENSE_ControlDACOut_TypeDef dacCh1OutMode;
577 LESENSE_DACRef_TypeDef dacRef;
580 LESENSE_ControlACMP_TypeDef acmp0Mode;
583 LESENSE_ControlACMP_TypeDef acmp1Mode;
586 LESENSE_WarmupMode_TypeDef warmupMode;
587 } LESENSE_PerCtrlDesc_TypeDef;
590 #define LESENSE_PERCTRL_DESC_DEFAULT \
593 lesenseDACConvModeDisable, \
594 lesenseDACOutModeDisable, \
596 lesenseDACConvModeDisable, \
597 lesenseDACOutModeDisable, \
600 lesenseACMPModeMuxThres, \
601 lesenseACMPModeMuxThres, \
602 lesenseWarmupModeKeepWarm, \
610 LESENSE_DecInput_TypeDef decInput;
644 LESENSE_PRSSel_TypeDef prsChSel0;
647 LESENSE_PRSSel_TypeDef prsChSel1;
650 LESENSE_PRSSel_TypeDef prsChSel2;
653 LESENSE_PRSSel_TypeDef prsChSel3;
654 } LESENSE_DecCtrlDesc_TypeDef;
657 #define LESENSE_DECCTRL_DESC_DEFAULT \
659 lesenseDecInputSensorSt, \
679 LESENSE_CoreCtrlDesc_TypeDef coreCtrl;
682 LESENSE_TimeCtrlDesc_TypeDef timeCtrl;
685 LESENSE_PerCtrlDesc_TypeDef perCtrl;
688 LESENSE_DecCtrlDesc_TypeDef decCtrl;
689 } LESENSE_Init_TypeDef;
692 #define LESENSE_INIT_DEFAULT \
694 .coreCtrl = LESENSE_CORECTRL_DESC_DEFAULT, \
695 .timeCtrl = LESENSE_TIMECTRL_DESC_DEFAULT, \
696 .perCtrl = LESENSE_PERCTRL_DESC_DEFAULT, \
697 .decCtrl = LESENSE_DECCTRL_DESC_DEFAULT \
716 LESENSE_ChPinExMode_TypeDef chPinExMode;
719 LESENSE_ChPinIdleMode_TypeDef chPinIdleMode;
736 LESENSE_ChClk_TypeDef exClk;
739 LESENSE_ChClk_TypeDef sampleClk;
765 LESENSE_ChSampleMode_TypeDef sampleMode;
768 LESENSE_ChIntMode_TypeDef intMode;
775 LESENSE_ChCompMode_TypeDef compMode;
776 } LESENSE_ChDesc_TypeDef;
783 LESENSE_ChDesc_TypeDef Ch[16];
784 } LESENSE_ChAll_TypeDef;
787 #define LESENSE_CH_CONF_DEFAULT \
792 lesenseChPinExHigh, \
793 lesenseChPinIdleLow, \
804 lesenseSampleModeACMP, \
807 lesenseCompModeLess \
811 #define LESENSE_SCAN_CONF_DEFAULT \
814 LESENSE_CH_CONF_DEFAULT, \
815 LESENSE_CH_CONF_DEFAULT, \
816 LESENSE_CH_CONF_DEFAULT, \
817 LESENSE_CH_CONF_DEFAULT, \
818 LESENSE_CH_CONF_DEFAULT, \
819 LESENSE_CH_CONF_DEFAULT, \
820 LESENSE_CH_CONF_DEFAULT, \
821 LESENSE_CH_CONF_DEFAULT, \
822 LESENSE_CH_CONF_DEFAULT, \
823 LESENSE_CH_CONF_DEFAULT, \
824 LESENSE_CH_CONF_DEFAULT, \
825 LESENSE_CH_CONF_DEFAULT, \
826 LESENSE_CH_CONF_DEFAULT, \
827 LESENSE_CH_CONF_DEFAULT, \
828 LESENSE_CH_CONF_DEFAULT, \
829 LESENSE_CH_CONF_DEFAULT, \
843 LESENSE_AltExPinIdle_TypeDef idleConf;
853 } LESENSE_AltExDesc_TypeDef;
860 LESENSE_AltExMap_TypeDef altExMap;
874 LESENSE_AltExDesc_TypeDef AltEx[16];
876 } LESENSE_ConfAltEx_TypeDef;
880 #define LESENSE_ALTEX_CH_CONF_DEFAULT \
883 lesenseAltExPinIdleDis, \
888 #define LESENSE_ALTEX_CONF_DEFAULT \
890 lesenseAltExMapACMP, \
892 LESENSE_ALTEX_CH_CONF_DEFAULT, \
893 LESENSE_ALTEX_CH_CONF_DEFAULT, \
894 LESENSE_ALTEX_CH_CONF_DEFAULT, \
895 LESENSE_ALTEX_CH_CONF_DEFAULT, \
896 LESENSE_ALTEX_CH_CONF_DEFAULT, \
897 LESENSE_ALTEX_CH_CONF_DEFAULT, \
898 LESENSE_ALTEX_CH_CONF_DEFAULT, \
899 LESENSE_ALTEX_CH_CONF_DEFAULT, \
900 LESENSE_ALTEX_CH_CONF_DEFAULT, \
901 LESENSE_ALTEX_CH_CONF_DEFAULT, \
902 LESENSE_ALTEX_CH_CONF_DEFAULT, \
903 LESENSE_ALTEX_CH_CONF_DEFAULT, \
904 LESENSE_ALTEX_CH_CONF_DEFAULT, \
905 LESENSE_ALTEX_CH_CONF_DEFAULT, \
906 LESENSE_ALTEX_CH_CONF_DEFAULT, \
907 LESENSE_ALTEX_CH_CONF_DEFAULT \
930 LESENSE_StTransAct_TypeDef prsAct;
934 } LESENSE_DecStCond_TypeDef;
937 #define LESENSE_ST_CONF_DEFAULT \
942 lesenseTransActNone, \
956 LESENSE_DecStCond_TypeDef confA;
960 LESENSE_DecStCond_TypeDef confB;
961 } LESENSE_DecStDesc_TypeDef;
968 LESENSE_DecStDesc_TypeDef St[16];
969 } LESENSE_DecStAll_TypeDef;
972 #define LESENSE_DECODER_CONF_DEFAULT \
975 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, \
976 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, \
977 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, \
978 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, \
979 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, \
980 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, \
981 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, \
982 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, \
983 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, \
984 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, \
985 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, \
986 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, \
987 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, \
988 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, \
989 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT }, \
990 { false, LESENSE_ST_CONF_DEFAULT, LESENSE_ST_CONF_DEFAULT } \
997 void LESENSE_Init(LESENSE_Init_TypeDef
const *init,
bool const reqReset);
998 void LESENSE_Reset(
void);
1000 uint32_t LESENSE_ScanFreqSet(uint32_t refFreq, uint32_t
const scanFreq);
1001 void LESENSE_ScanModeSet(LESENSE_ScanMode_TypeDef
const scanMode,
1004 void LESENSE_StartDelaySet(uint8_t
const startDelay);
1006 void LESENSE_ClkDivSet(LESENSE_ChClk_TypeDef
const clk,
1007 LESENSE_ClkPresc_TypeDef
const clkDiv);
1009 void LESENSE_ChannelAllConfig(LESENSE_ChAll_TypeDef
const *confChAll);
1010 void LESENSE_ChannelConfig(LESENSE_ChDesc_TypeDef
const *confCh,
1011 uint32_t
const chIdx);
1012 void LESENSE_ChannelEnable(uint8_t
const chIdx,
1013 bool const enaScanCh,
1015 void LESENSE_ChannelEnableMask(uint16_t chMask, uint16_t pinMask);
1016 void LESENSE_ChannelTimingSet(uint8_t
const chIdx,
1017 uint8_t
const exTime,
1018 uint8_t
const sampleDelay,
1019 uint8_t
const measDelay);
1020 void LESENSE_ChannelThresSet(uint8_t
const chIdx,
1021 uint16_t
const acmpThres,
1022 uint16_t
const cntThres);
1024 void LESENSE_AltExConfig(LESENSE_ConfAltEx_TypeDef
const *confAltEx);
1026 void LESENSE_DecoderStateAllConfig(LESENSE_DecStAll_TypeDef
const *confDecStAll);
1027 void LESENSE_DecoderStateConfig(LESENSE_DecStDesc_TypeDef
const *confDecSt,
1028 uint32_t
const decSt);
1029 void LESENSE_DecoderStateSet(uint32_t decSt);
1030 uint32_t LESENSE_DecoderStateGet(
void);
1032 void LESENSE_ScanStart(
void);
1033 void LESENSE_ScanStop(
void);
1034 void LESENSE_DecoderStart(
void);
1035 void LESENSE_ResultBufferClear(
void);
1046 __STATIC_INLINE
void LESENSE_DecoderStop(
void)
1049 LESENSE->DECCTRL |= LESENSE_DECCTRL_DISABLE;
1067 __STATIC_INLINE uint32_t LESENSE_StatusGet(
void)
1069 return LESENSE->STATUS;
1093 __STATIC_INLINE
void LESENSE_StatusWait(uint32_t flag)
1095 while (!(LESENSE->STATUS & flag))
1108 __STATIC_INLINE uint32_t LESENSE_ChannelActiveGet(
void)
1110 return LESENSE->CURCH;
1125 __STATIC_INLINE uint32_t LESENSE_ScanResultGet(
void)
1127 return LESENSE->SCANRES;
1144 __STATIC_INLINE uint32_t LESENSE_ScanResultDataGet(
void)
1146 return LESENSE->BUFDATA;
1165 __STATIC_INLINE uint32_t LESENSE_ScanResultDataBufferGet(uint32_t idx)
1168 return LESENSE->BUF[idx & 0x0FU].DATA;
1179 __STATIC_INLINE uint32_t LESENSE_SensorStateGet(
void)
1181 return LESENSE->SENSORSTATE;
1197 __STATIC_INLINE
void LESENSE_RAMPowerDown(
void)
1200 LESENSE->POWERDOWN = LESENSE_POWERDOWN_RAM;
1213 __STATIC_INLINE
void LESENSE_IntClear(uint32_t flags)
1215 LESENSE->IFC = flags;
1228 __STATIC_INLINE
void LESENSE_IntEnable(uint32_t flags)
1230 LESENSE->IEN |= flags;
1243 __STATIC_INLINE
void LESENSE_IntDisable(uint32_t flags)
1245 LESENSE->IEN &= ~flags;
1258 __STATIC_INLINE
void LESENSE_IntSet(uint32_t flags)
1260 LESENSE->IFS = flags;
1275 __STATIC_INLINE uint32_t LESENSE_IntGet(
void)
1299 __STATIC_INLINE uint32_t LESENSE_IntGetEnabled(
void)
1308 return LESENSE->IF & tmp;
CMSIS Cortex-M Peripheral Access Layer for Silicon Laboratories microcontroller devices.