LESENSE - Low Energy Sensor

Description

Low Energy Sensor (LESENSE) Peripheral API.

This module contains functions to control the LESENSE peripheral of Silicon Labs 32-bit MCUs and SoCs. LESENSE is a low-energy sensor interface capable of autonomously collecting and processing data from multiple sensors even when in EM2.

Data Structures

struct LESENSE_CoreCtrlDesc_TypeDef
Core control (LESENSE_CTRL) descriptor structure.
struct LESENSE_TimeCtrlDesc_TypeDef
LESENSE timing control descriptor structure.
struct LESENSE_PerCtrlDesc_TypeDef
LESENSE peripheral control descriptor structure.
struct LESENSE_DecCtrlDesc_TypeDef
LESENSE decoder control descriptor structure.
struct LESENSE_Init_TypeDef
LESENSE module initialization structure.
struct LESENSE_ChDesc_TypeDef
Channel descriptor structure.
struct LESENSE_ChAll_TypeDef
Configuration structure for all the scan channels.
struct LESENSE_AltExDesc_TypeDef
Alternate excitation descriptor structure.
struct LESENSE_ConfAltEx_TypeDef
Configuration structure for the alternate excitation.
struct LESENSE_DecStCond_TypeDef
Decoder state condition descriptor structure.
struct LESENSE_DecStDesc_TypeDef
Decoder state x configuration structure.
struct LESENSE_DecStAll_TypeDef
Configuration structure for decoder.

Functions

void LESENSE_Init (const LESENSE_Init_TypeDef *init, bool reqReset)
Initialize the LESENSE module.
uint32_t LESENSE_ScanFreqSet (uint32_t refFreq, uint32_t scanFreq)
Set the scan frequency for periodic scanning.
void LESENSE_ScanModeSet ( LESENSE_ScanMode_TypeDef scanMode, bool start)
Set scan mode of the LESENSE channels.
void LESENSE_StartDelaySet (uint8_t startDelay)
Set the start delay of the sensor interaction on each channel.
void LESENSE_ClkDivSet ( LESENSE_ChClk_TypeDef clk, LESENSE_ClkPresc_TypeDef clkDiv)
Set the clock division for LESENSE timers.
void LESENSE_ChannelAllConfig (const LESENSE_ChAll_TypeDef *confChAll)
Configure all (16) LESENSE sensor channels.
void LESENSE_ChannelConfig (const LESENSE_ChDesc_TypeDef *confCh, uint32_t chIdx)
Configure a single LESENSE sensor channel.
void LESENSE_AltExConfig (const LESENSE_ConfAltEx_TypeDef *confAltEx)
Configure the LESENSE alternate excitation modes.
void LESENSE_ChannelEnable (uint8_t chIdx, bool enaScanCh, bool enaPin)
Enable/disable LESENSE scan channel and the pin assigned to it.
void LESENSE_ChannelEnableMask (uint16_t chMask, uint16_t pinMask)
Enable/disable LESENSE scan channel and the pin assigned to it.
void LESENSE_ChannelTimingSet (uint8_t chIdx, uint8_t exTime, uint8_t sampleDelay, uint16_t measDelay)
Set LESENSE channel timing parameters.
void LESENSE_ChannelThresSet (uint8_t chIdx, uint16_t acmpThres, uint16_t cntThres)
Set LESENSE channel threshold parameters.
void LESENSE_DecoderStateAllConfig (const LESENSE_DecStAll_TypeDef *confDecStAll)
Configure all LESENSE decoder states.
void LESENSE_DecoderStateConfig (const LESENSE_DecStDesc_TypeDef *confDecSt, uint32_t decSt)
Configure a single LESENSE decoder state.
void LESENSE_DecoderStateSet (uint32_t decSt)
Set the LESENSE decoder state.
uint32_t LESENSE_DecoderStateGet (void)
Get the current state of the LESENSE decoder.
void LESENSE_ScanStart (void)
Start scanning sensors.
void LESENSE_ScanStop (void)
Stop scanning sensors.
void LESENSE_DecoderStart (void)
Start the LESENSE decoder.
void LESENSE_ResultBufferClear (void)
Clear the result buffer.
void LESENSE_Reset (void)
Reset the LESENSE module.
void LESENSE_DecoderStop (void)
Stop LESENSE decoder.
uint32_t LESENSE_StatusGet (void)
Get the current status of LESENSE.
void LESENSE_StatusWait (uint32_t flag)
Wait until status of LESENSE is equal to what was requested.
uint32_t LESENSE_ChannelActiveGet (void)
Get the currently active channel index.
uint32_t LESENSE_ScanResultGet (void)
Get the latest scan comparison result (1 bit / channel).
uint32_t LESENSE_ScanResultDataGet (void)
Get the oldest unread data from result buffer.
uint32_t LESENSE_ScanResultDataBufferGet (uint32_t idx)
Get the data from result data buffer.
uint32_t LESENSE_SensorStateGet (void)
Get the current state of LESENSE sensor.
void LESENSE_RAMPowerDown (void)
Shut off the power to the LESENSE RAM, disables LESENSE.
void LESENSE_IntClear (uint32_t flags)
Clear one or more pending LESENSE interrupts.
void LESENSE_IntEnable (uint32_t flags)
Enable one or more LESENSE interrupts.
void LESENSE_IntDisable (uint32_t flags)
Disable one or more LESENSE interrupts.
void LESENSE_IntSet (uint32_t flags)
Set one or more pending LESENSE interrupts from SW.
uint32_t LESENSE_IntGet (void)
Get pending LESENSE interrupt flags.
uint32_t LESENSE_IntGetEnabled (void)
Get enabled and pending LESENSE interrupt flags.

Macros

#define LESENSE_NUM_DECODER_STATES (_LESENSE_DECSTATE_DECSTATE_MASK + 1)
Number of decoder states supported by current device.
#define LESENSE_NUM_CHANNELS 16
Number of LESENSE channels.
#define LESENSE_CORECTRL_DESC_DEFAULT
Default configuration for LESENSE_CtrlDesc_TypeDef structure.
#define LESENSE_TIMECTRL_DESC_DEFAULT
Default configuration for LESENSE_TimeCtrlDesc_TypeDef structure.
#define LESENSE_PERCTRL_DESC_DEFAULT
Default configuration for LESENSE_PerCtrl_TypeDef structure.
#define LESENSE_DECCTRL_DESC_DEFAULT
Default configuration for LESENSE_PerCtrl_TypeDef structure.
#define LESENSE_INIT_DEFAULT
Default configuration for LESENSE_Init_TypeDef structure.
#define LESENSE_CH_CONF_DEFAULT
Default configuration for the scan channel.
#define LESENSE_SCAN_CONF_DEFAULT
Default configuration for all the sensor channels.
#define LESENSE_ALTEX_CH_CONF_DEFAULT
Default configuration for the alternate excitation channel.
#define LESENSE_ALTEX_CONF_DEFAULT
Default configuration for all the alternate excitation channels.
#define LESENSE_ST_CONF_DEFAULT
Default configuration for the decoder state condition.
#define LESENSE_DECODER_CONF_DEFAULT
Default configuration for all decoder states.

Enumerations

enum LESENSE_ClkPresc_TypeDef {
lesenseClkDiv_1 = 0,
lesenseClkDiv_2 = 1,
lesenseClkDiv_4 = 2,
lesenseClkDiv_8 = 3,
lesenseClkDiv_16 = 4,
lesenseClkDiv_32 = 5,
lesenseClkDiv_64 = 6,
lesenseClkDiv_128 = 7
}
Clock divisors for controlling the prescaling factor of the period counter.
enum LESENSE_ScanMode_TypeDef {
lesenseScanStartPeriodic = LESENSE_CTRL_SCANMODE_PERIODIC,
lesenseScanStartOneShot = LESENSE_CTRL_SCANMODE_ONESHOT,
lesenseScanStartPRS = LESENSE_CTRL_SCANMODE_PRS
}
Scan modes.
enum LESENSE_PRSSel_TypeDef {
lesensePRSCh0 = 0,
lesensePRSCh1 = 1,
lesensePRSCh2 = 2,
lesensePRSCh3 = 3,
lesensePRSCh4 = 4,
lesensePRSCh5 = 5,
lesensePRSCh6 = 6,
lesensePRSCh7 = 7,
lesensePRSCh8 = 8,
lesensePRSCh9 = 9,
lesensePRSCh10 = 10,
lesensePRSCh11 = 11
}
PRS sources.
enum LESENSE_AltExMap_TypeDef {
lesenseAltExMapALTEX = _LESENSE_CTRL_ALTEXMAP_ALTEX,
lesenseAltExMapACMP = _LESENSE_CTRL_ALTEXMAP_ACMP
}
Locations of the alternate excitation function.
enum LESENSE_BufTrigLevel_TypeDef {
lesenseBufTrigHalf = LESENSE_CTRL_BUFIDL_HALFFULL,
lesenseBufTrigFull = LESENSE_CTRL_BUFIDL_FULL
}
Result buffer interrupt and DMA trigger levels.
enum LESENSE_DMAWakeUp_TypeDef {
lesenseDMAWakeUpDisable = LESENSE_CTRL_DMAWU_DISABLE,
lesenseDMAWakeUpBufValid = LESENSE_CTRL_DMAWU_BUFDATAV,
lesenseDMAWakeUpBufLevel = LESENSE_CTRL_DMAWU_BUFLEVEL
}
Modes of operation for DMA wakeup from EM2.
enum LESENSE_BiasMode_TypeDef {
lesenseBiasModeDutyCycle = LESENSE_BIASCTRL_BIASMODE_DUTYCYCLE,
lesenseBiasModeHighAcc = LESENSE_BIASCTRL_BIASMODE_HIGHACC,
lesenseBiasModeDontTouch = LESENSE_BIASCTRL_BIASMODE_DONTTOUCH
}
Bias modes.
enum LESENSE_ScanConfSel_TypeDef {
lesenseScanConfDirMap = LESENSE_CTRL_SCANCONF_DIRMAP,
lesenseScanConfInvMap = LESENSE_CTRL_SCANCONF_INVMAP,
lesenseScanConfToggle = LESENSE_CTRL_SCANCONF_TOGGLE,
lesenseScanConfDecDef = LESENSE_CTRL_SCANCONF_DECDEF
}
Scan configuration.
enum LESENSE_ControlDACData_TypeDef {
lesenseDACIfData = _LESENSE_PERCTRL_DACCH0DATA_DACDATA,
lesenseACMPThres = _LESENSE_PERCTRL_DACCH0DATA_ACMPTHRES
}
DAC CHx data control configuration.
enum LESENSE_ControlDACConv_TypeDef {
lesenseDACConvModeDisable = _LESENSE_PERCTRL_DACCH0CONV_DISABLE,
lesenseDACConvModeContinuous = _LESENSE_PERCTRL_DACCH0CONV_CONTINUOUS,
lesenseDACConvModeSampleHold = _LESENSE_PERCTRL_DACCH0CONV_SAMPLEHOLD,
lesenseDACConvModeSampleOff = _LESENSE_PERCTRL_DACCH0CONV_SAMPLEOFF
}
DAC channel x conversion mode configuration.
enum LESENSE_ControlDACOut_TypeDef {
lesenseDACOutModeDisable = _LESENSE_PERCTRL_DACCH0OUT_DISABLE,
lesenseDACOutModePin = _LESENSE_PERCTRL_DACCH0OUT_PIN,
lesenseDACOutModeADCACMP = _LESENSE_PERCTRL_DACCH0OUT_ADCACMP,
lesenseDACOutModePinADCACMP = _LESENSE_PERCTRL_DACCH0OUT_PINADCACMP
}
DAC channel x output mode configuration.
enum LESENSE_DACRef_TypeDef {
lesenseDACRefVdd = LESENSE_PERCTRL_DACREF_VDD,
lesenseDACRefBandGap = LESENSE_PERCTRL_DACREF_BANDGAP
}
DAC reference configuration.
enum LESENSE_ControlACMP_TypeDef {
lesenseACMPModeDisable = _LESENSE_PERCTRL_ACMP0MODE_DISABLE,
lesenseACMPModeMux = _LESENSE_PERCTRL_ACMP0MODE_MUX,
lesenseACMPModeMuxThres = _LESENSE_PERCTRL_ACMP0MODE_MUXTHRES
}
ACMPx control configuration.
enum LESENSE_WarmupMode_TypeDef {
lesenseWarmupModeNormal = LESENSE_PERCTRL_WARMUPMODE_NORMAL,
lesenseWarmupModeACMP = LESENSE_PERCTRL_WARMUPMODE_KEEPACMPWARM,
lesenseWarmupModeDAC = LESENSE_PERCTRL_WARMUPMODE_KEEPDACWARM,
lesenseWarmupModeKeepWarm = LESENSE_PERCTRL_WARMUPMODE_KEEPACMPDACWARM
}
Warm up modes.
enum LESENSE_DecInput_TypeDef {
lesenseDecInputSensorSt = LESENSE_DECCTRL_INPUT_SENSORSTATE,
lesenseDecInputPRS = LESENSE_DECCTRL_INPUT_PRS
}
Decoder input source configuration.
enum LESENSE_ChSampleMode_TypeDef {
lesenseSampleModeCounter = 0x0 << _LESENSE_CH_INTERACT_SAMPLE_SHIFT,
lesenseSampleModeACMP = LESENSE_CH_INTERACT_SAMPLE_ACMP
}
Compare source selection for sensor sampling.
enum LESENSE_ChIntMode_TypeDef {
lesenseSetIntNone = LESENSE_CH_INTERACT_SETIF_NONE,
lesenseSetIntLevel = LESENSE_CH_INTERACT_SETIF_LEVEL,
lesenseSetIntPosEdge = LESENSE_CH_INTERACT_SETIF_POSEDGE,
lesenseSetIntNegEdge = LESENSE_CH_INTERACT_SETIF_NEGEDGE
}
Interrupt generation setup for CHx interrupt flag.
enum LESENSE_ChPinExMode_TypeDef {
lesenseChPinExDis = LESENSE_CH_INTERACT_EXMODE_DISABLE,
lesenseChPinExHigh = LESENSE_CH_INTERACT_EXMODE_HIGH,
lesenseChPinExLow = LESENSE_CH_INTERACT_EXMODE_LOW,
lesenseChPinExDACOut = LESENSE_CH_INTERACT_EXMODE_DACOUT
}
Channel pin mode for the excitation phase of the scan sequence.
enum LESENSE_ChPinIdleMode_TypeDef {
lesenseChPinIdleDis = _LESENSE_IDLECONF_CH0_DISABLE,
lesenseChPinIdleHigh = _LESENSE_IDLECONF_CH0_HIGH,
lesenseChPinIdleLow = _LESENSE_IDLECONF_CH0_LOW,
lesenseChPinIdleDACCh0 = _LESENSE_IDLECONF_CH0_DACCH0,
lesenseChPinIdleDACCh1 = _LESENSE_IDLECONF_CH12_DACCH1
}
Channel pin mode for the idle phase of scan sequence.
enum LESENSE_ChClk_TypeDef {
lesenseClkLF = _LESENSE_CH_INTERACT_EXCLK_LFACLK,
lesenseClkHF = _LESENSE_CH_INTERACT_EXCLK_AUXHFRCO
}
Clock used for excitation and sample delay timing.
enum LESENSE_ChCompMode_TypeDef {
lesenseCompModeLess = LESENSE_CH_EVAL_COMP_LESS,
lesenseCompModeGreaterOrEq = LESENSE_CH_EVAL_COMP_GE
}
Compare modes for counter comparison.
enum LESENSE_AltExPinIdle_TypeDef {
lesenseAltExPinIdleDis = _LESENSE_ALTEXCONF_IDLECONF0_DISABLE,
lesenseAltExPinIdleHigh = _LESENSE_ALTEXCONF_IDLECONF0_HIGH,
lesenseAltExPinIdleLow = _LESENSE_ALTEXCONF_IDLECONF0_LOW
}
Idle phase configuration of the alternate excitation channels.
enum LESENSE_StTransAct_TypeDef {
lesenseTransActNone = LESENSE_ST_TCONFA_PRSACT_NONE,
lesenseTransActPRS0 = LESENSE_ST_TCONFA_PRSACT_PRS0,
lesenseTransActPRS1 = LESENSE_ST_TCONFA_PRSACT_PRS1,
lesenseTransActPRS01 = LESENSE_ST_TCONFA_PRSACT_PRS01,
lesenseTransActPRS2 = LESENSE_ST_TCONFA_PRSACT_PRS2,
lesenseTransActPRS02 = LESENSE_ST_TCONFA_PRSACT_PRS02,
lesenseTransActPRS12 = LESENSE_ST_TCONFA_PRSACT_PRS12,
lesenseTransActPRS012 = LESENSE_ST_TCONFA_PRSACT_PRS012,
lesenseTransActUp = LESENSE_ST_TCONFA_PRSACT_UP,
lesenseTransActDown = LESENSE_ST_TCONFA_PRSACT_DOWN,
lesenseTransActUpAndPRS2 = LESENSE_ST_TCONFA_PRSACT_UPANDPRS2,
lesenseTransActDownAndPRS2 = LESENSE_ST_TCONFA_PRSACT_DOWNANDPRS2
}
Transition action modes.

Function Documentation

LESENSE_Init()

void LESENSE_Init ( const LESENSE_Init_TypeDef * init,
bool reqReset
)

Initialize the LESENSE module.

This function configures the main parameters of the LESENSE interface. See the initialization parameter type definition ( LESENSE_Init_TypeDef ) for more details.

Note
LESENSE_Init() is designed to initialize LESENSE once in an operation cycle. Be aware of the effects of reconfiguration if using this function from multiple sources in your code. This function has not been designed to be re-entrant. Requesting reset by setting reqReset to true is required in each reset or power-on cycle to configure the default values of the RAM mapped LESENSE registers. Notice that GPIO pins used by the LESENSE module must be properly configured by the user explicitly for the LESENSE to work as intended. (When configuring pins, one should remember to consider the sequence of configuration to avoid unintended pulses/glitches on output pins.)
Parameters
[in] init The LESENSE initialization structure.
[in] reqReset Request to call LESENSE_Reset() first to initialize all LESENSE registers with default values.

LESENSE_ScanFreqSet()

uint32_t LESENSE_ScanFreqSet ( uint32_t refFreq,
uint32_t scanFreq
)

Set the scan frequency for periodic scanning.

This function only applies to LESENSE if a period counter is used as a trigger for scan start. The calculation is based on the following formula: Fscan = LFACLKles / ((1+PCTOP)*2^PCPRESC)

Note
Note that the calculation does not necessarily result in the requested scan frequency due to integer division. Check the return value for the resulted scan frequency.
Parameters
[in] refFreq Select reference LFACLK clock frequency in Hz. If set to 0, the current clock frequency is being used as a reference.
[in] scanFreq Set the desired scan frequency in Hz.
Returns
Frequency in Hz calculated and set by this function. Users can use this to compare the requested and set values.

LESENSE_ScanModeSet()

void LESENSE_ScanModeSet ( LESENSE_ScanMode_TypeDef scanMode,
bool start
)

Set scan mode of the LESENSE channels.

This function configures how the scan start is triggered. It can be used for re-configuring the scan mode while running the application but it is also used by LESENSE_Init() for initialization.

Note
Users can configure the scan mode by LESENSE_Init() function, but only with a significant overhead. This simple function serves the purpose of controlling this parameter after the channel has been configured. Be aware of the effects of the non-atomic Read-Modify-Write cycle.
Parameters
[in] scanMode Select t