33 #ifndef __SILICON_LABS_EM_LESENSE_H__
34 #define __SILICON_LABS_EM_LESENSE_H__
38 #if defined(LESENSE_COUNT) && (LESENSE_COUNT > 0)
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 )
518 #define LESENSE_CORECTRL_DESC_DEFAULT \
520 lesenseScanStartPeriodic, \
522 lesenseScanConfDirMap, \
528 lesenseBufTrigHalf, \
529 lesenseDMAWakeUpDisable, \
530 lesenseBiasModeDontTouch, \
544 #define LESENSE_TIMECTRL_DESC_DEFAULT \
590 #define LESENSE_PERCTRL_DESC_DEFAULT \
593 lesenseDACConvModeDisable, \
594 lesenseDACOutModeDisable, \
596 lesenseDACConvModeDisable, \
597 lesenseDACOutModeDisable, \
600 lesenseACMPModeMuxThres, \
601 lesenseACMPModeMuxThres, \
602 lesenseWarmupModeKeepWarm, \
657 #define LESENSE_DECCTRL_DESC_DEFAULT \
659 lesenseDecInputSensorSt, \
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 \
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, \
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 \
937 #define LESENSE_ST_CONF_DEFAULT \
942 lesenseTransActNone, \
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 } \
1011 uint32_t
const chIdx);
1013 bool const enaScanCh,
1017 uint8_t
const exTime,
1018 uint8_t
const sampleDelay,
1019 uint8_t
const measDelay);
1021 uint16_t
const acmpThres,
1022 uint16_t
const cntThres);
1028 uint32_t
const decSt);
1095 while (!(
LESENSE->STATUS & flag))
1168 return LESENSE->BUF[idx & 0x0FU].DATA;
__STATIC_INLINE uint32_t LESENSE_IntGetEnabled(void)
Get enabled and pending LESENSE interrupt flags.
__STATIC_INLINE void LESENSE_StatusWait(uint32_t flag)
Wait until the status of LESENSE is equal to what requested.
LESENSE_PRSSel_TypeDef prsChSel3
__STATIC_INLINE void LESENSE_IntClear(uint32_t flags)
Clear one or more pending LESENSE interrupts.
#define _LESENSE_CH_INTERACT_EXCLK_AUXHFRCO
LESENSE_TimeCtrlDesc_TypeDef timeCtrl
void LESENSE_ChannelTimingSet(uint8_t const chIdx, uint8_t const exTime, uint8_t const sampleDelay, uint8_t const measDelay)
Set LESENSE channel timing parameters.
LESENSE_ControlACMP_TypeDef acmp1Mode
#define LESENSE_CTRL_DMAWU_DISABLE
#define LESENSE_CTRL_BUFIDL_HALFFULL
#define LESENSE_PERCTRL_WARMUPMODE_KEEPDACWARM
LESENSE_ControlACMP_TypeDef
void LESENSE_DecoderStart(void)
Start LESENSE decoder.
#define LESENSE_CTRL_SCANCONF_TOGGLE
void LESENSE_ChannelAllConfig(LESENSE_ChAll_TypeDef const *confChAll)
Configure all (16) LESENSE sensor channels.
LESENSE_ChSampleMode_TypeDef
LESENSE_ControlDACData_TypeDef dacCh0Data
void LESENSE_ChannelThresSet(uint8_t const chIdx, uint16_t const acmpThres, uint16_t const cntThres)
Set LESENSE channel threshold parameters.
#define _LESENSE_PERCTRL_DACCH0DATA_DACDATA
#define _LESENSE_IDLECONF_CH0_LOW
#define _LESENSE_PERCTRL_DACCH0OUT_DISABLE
#define _LESENSE_PERCTRL_DACCH0OUT_PIN
LESENSE_DecStCond_TypeDef confA
#define LESENSE_CH_INTERACT_SETIF_LEVEL
LESENSE_BufTrigLevel_TypeDef
LESENSE_DecCtrlDesc_TypeDef decCtrl
#define _LESENSE_PERCTRL_DACCH0OUT_PINADCACMP
#define LESENSE_CTRL_BUFIDL_FULL
#define LESENSE_ST_TCONFA_PRSACT_PRS0
LESENSE_ControlDACData_TypeDef dacCh1Data
void LESENSE_AltExConfig(LESENSE_ConfAltEx_TypeDef const *confAltEx)
Configure the LESENSE alternate excitation modes.
LESENSE_ChPinIdleMode_TypeDef chPinIdleMode
#define LESENSE_PERCTRL_DACREF_BANDGAP
#define LESENSE_CH_INTERACT_EXMODE_DACOUT
LESENSE_ScanConfSel_TypeDef
#define LESENSE_ST_TCONFA_PRSACT_PRS1
LESENSE_ControlDACOut_TypeDef
#define LESENSE_ST_TCONFA_PRSACT_DOWNANDPRS2
uint32_t LESENSE_ScanFreqSet(uint32_t refFreq, uint32_t const scanFreq)
Set scan frequency for periodic scanning.
__STATIC_INLINE uint32_t LESENSE_SensorStateGet(void)
Get the current state of the LESENSE sensor.
void LESENSE_Reset(void)
Reset the LESENSE module.
#define LESENSE_CH_EVAL_COMP_GE
LESENSE_DMAWakeUp_TypeDef
void LESENSE_ResultBufferClear(void)
Clear result buffer.
CMSIS Cortex-M Peripheral Access Layer for Silicon Laboratories microcontroller devices.
void LESENSE_ChannelEnable(uint8_t const chIdx, bool const enaScanCh, bool const enaPin)
Enable/disable LESENSE scan channel and the pin assigned to it.
#define LESENSE_CTRL_SCANMODE_PERIODIC
#define _LESENSE_ALTEXCONF_IDLECONF0_LOW
#define LESENSE_ST_TCONFA_PRSACT_PRS12
#define LESENSE_ST_TCONFA_PRSACT_UPANDPRS2
LESENSE_PRSSel_TypeDef prsChSel0
#define LESENSE_CH_INTERACT_SAMPLE_ACMP
void LESENSE_ChannelConfig(LESENSE_ChDesc_TypeDef const *confCh, uint32_t const chIdx)
Configure a single LESENSE sensor channel.
#define _LESENSE_IDLECONF_CH0_DISABLE
#define _LESENSE_CTRL_ALTEXMAP_ACMP
LESENSE_ControlDACOut_TypeDef dacCh0OutMode
#define LESENSE_ST_TCONFA_PRSACT_DOWN
#define _LESENSE_PERCTRL_DACCH0CONV_CONTINUOUS
void LESENSE_DecoderStateSet(uint32_t decSt)
Set LESENSE decoder state.
#define LESENSE_CTRL_DMAWU_BUFLEVEL
#define LESENSE_ST_TCONFA_PRSACT_NONE
LESENSE_PRSSel_TypeDef prsSel
#define _LESENSE_PERCTRL_DACCH0CONV_SAMPLEOFF
#define LESENSE_DECCTRL_INPUT_PRS
#define LESENSE_CH_INTERACT_SETIF_POSEDGE
LESENSE_AltExPinIdle_TypeDef
#define LESENSE_ST_TCONFA_PRSACT_PRS2
#define LESENSE_CTRL_SCANCONF_INVMAP
#define LESENSE_BIASCTRL_BIASMODE_HIGHACC
LESENSE_ChClk_TypeDef exClk
#define _LESENSE_CH_INTERACT_EXCLK_LFACLK
#define _LESENSE_PERCTRL_ACMP0MODE_DISABLE
#define LESENSE_CH_INTERACT_EXMODE_LOW
#define _LESENSE_PERCTRL_DACCH0CONV_DISABLE
#define LESENSE_CTRL_SCANMODE_PRS
__STATIC_INLINE void LESENSE_IntDisable(uint32_t flags)
Disable one or more LESENSE interrupts.
LESENSE_DMAWakeUp_TypeDef wakeupOnDMA
LESENSE_ControlDACConv_TypeDef dacCh1ConvMode
#define _LESENSE_IDLECONF_CH12_DACCH1
#define LESENSE_CH_INTERACT_SETIF_NONE
#define _LESENSE_PERCTRL_ACMP0MODE_MUX
#define LESENSE_DECCTRL_INPUT_SENSORSTATE
#define _LESENSE_ALTEXCONF_IDLECONF0_HIGH
#define _LESENSE_IDLECONF_CH0_HIGH
__STATIC_INLINE uint32_t LESENSE_ScanResultDataBufferGet(uint32_t idx)
Get data from the result data buffer.
#define LESENSE_CTRL_SCANMODE_ONESHOT
LESENSE_StTransAct_TypeDef
#define _LESENSE_PERCTRL_ACMP0MODE_MUXTHRES
LESENSE_ChCompMode_TypeDef compMode
#define LESENSE_CH_EVAL_COMP_LESS
#define _LESENSE_ALTEXCONF_IDLECONF0_DISABLE
void LESENSE_ClkDivSet(LESENSE_ChClk_TypeDef const clk, LESENSE_ClkPresc_TypeDef const clkDiv)
Set clock division for LESENSE timers.
__STATIC_INLINE uint32_t LESENSE_StatusGet(void)
Get the current status of LESENSE.
#define _LESENSE_CTRL_ALTEXMAP_ALTEX
#define LESENSE_CH_INTERACT_SETIF_NEGEDGE
#define LESENSE_CH_INTERACT_EXMODE_HIGH
LESENSE_PRSSel_TypeDef prsChSel2
#define LESENSE_ST_TCONFA_PRSACT_PRS012
#define LESENSE_PERCTRL_WARMUPMODE_KEEPACMPWARM
LESENSE_DACRef_TypeDef dacRef
#define _LESENSE_PERCTRL_DACCH0OUT_ADCACMP
LESENSE_WarmupMode_TypeDef
__STATIC_INLINE uint32_t LESENSE_ScanResultGet(void)
Get the latest scan comparison result (1 bit / channel).
#define LESENSE_PERCTRL_WARMUPMODE_KEEPACMPDACWARM
#define LESENSE_PERCTRL_DACREF_VDD
LESENSE_PerCtrlDesc_TypeDef perCtrl
LESENSE_ScanConfSel_TypeDef scanConfSel
uint32_t LESENSE_DecoderStateGet(void)
Get the current state of the LESENSE decoder.
#define LESENSE_CH_INTERACT_EXMODE_DISABLE
void LESENSE_Init(LESENSE_Init_TypeDef const *init, bool const reqReset)
Initialize the LESENSE module.
LESENSE_ControlACMP_TypeDef acmp0Mode
LESENSE_ChCompMode_TypeDef
LESENSE_ControlDACConv_TypeDef
__STATIC_INLINE uint32_t LESENSE_IntGet(void)
Get pending LESENSE interrupt flags.
LESENSE_ChPinExMode_TypeDef
LESENSE_ControlDACConv_TypeDef dacCh0ConvMode
#define LESENSE_ST_TCONFA_PRSACT_PRS02
LESENSE_ControlDACOut_TypeDef dacCh1OutMode
LESENSE_DecStCond_TypeDef confB
#define LESENSE_CTRL_DMAWU_BUFDATAV
LESENSE_ChClk_TypeDef sampleClk
LESENSE_CoreCtrlDesc_TypeDef coreCtrl
LESENSE_ScanMode_TypeDef scanStart
__STATIC_INLINE uint32_t LESENSE_ScanResultDataGet(void)
Get the oldest unread data from the result buffer.
LESENSE_AltExMap_TypeDef altExMap
void LESENSE_DecoderStateAllConfig(LESENSE_DecStAll_TypeDef const *confDecStAll)
Configure all LESENSE decoder states.
#define LESENSE_CTRL_SCANCONF_DECDEF
#define LESENSE_CH_INTERACT_SAMPLE_COUNTER
#define LESENSE_ST_TCONFA_PRSACT_UP
#define LESENSE_BIASCTRL_BIASMODE_DUTYCYCLE
LESENSE_ControlDACData_TypeDef
LESENSE_DecInput_TypeDef decInput
#define _LESENSE_PERCTRL_DACCH0CONV_SAMPLEHOLD
LESENSE_ChIntMode_TypeDef
#define LESENSE_ST_TCONFA_PRSACT_PRS01
LESENSE_WarmupMode_TypeDef warmupMode
LESENSE_StTransAct_TypeDef prsAct
LESENSE_BiasMode_TypeDef biasMode
LESENSE_AltExPinIdle_TypeDef idleConf
void LESENSE_ChannelEnableMask(uint16_t chMask, uint16_t pinMask)
Enable/disable LESENSE scan channel and the pin assigned to it.
void LESENSE_ScanStart(void)
Start scanning of sensors.
#define LESENSE_POWERDOWN_RAM
#define LESENSE_CTRL_SCANCONF_DIRMAP
void LESENSE_DecoderStateConfig(LESENSE_DecStDesc_TypeDef const *confDecSt, uint32_t const decSt)
Configure a single LESENSE decoder state.
__STATIC_INLINE void LESENSE_DecoderStop(void)
Stop LESENSE decoder.
#define LESENSE_BIASCTRL_BIASMODE_DONTTOUCH
void LESENSE_ScanStop(void)
Stop scanning of sensors.
__STATIC_INLINE uint32_t LESENSE_ChannelActiveGet(void)
Get the currently active channel index.
#define LESENSE_DECCTRL_DISABLE
#define LESENSE_PERCTRL_WARMUPMODE_NORMAL
__STATIC_INLINE void LESENSE_IntEnable(uint32_t flags)
Enable one or more LESENSE interrupts.
#define _LESENSE_PERCTRL_DACCH0DATA_ACMPTHRES
LESENSE_ChPinIdleMode_TypeDef
void LESENSE_ScanModeSet(LESENSE_ScanMode_TypeDef const scanMode, bool const start)
Set scan mode of the LESENSE channels.
__STATIC_INLINE void LESENSE_RAMPowerDown(void)
Shut off power to the LESENSE RAM, disables LESENSE.
#define _LESENSE_IDLECONF_CH0_DACCH0
LESENSE_ChIntMode_TypeDef intMode
LESENSE_ChPinExMode_TypeDef chPinExMode
LESENSE_BufTrigLevel_TypeDef bufTrigLevel
LESENSE_PRSSel_TypeDef prsChSel1
void LESENSE_StartDelaySet(uint8_t const startDelay)
Set start delay of sensor interaction on each channel.
LESENSE_ChSampleMode_TypeDef sampleMode
__STATIC_INLINE void LESENSE_IntSet(uint32_t flags)
Set one or more pending LESENSE interrupts from SW.