72 #define SLEEP_NUMOF_LOW_ENERGY_MODES 2U
98 static uint8_t sleepBlockCnt[SLEEP_NUMOF_LOW_ENERGY_MODES];
134 sleepCallback = pSleepCb;
135 wakeUpCallback = pWakeUpCb;
138 sleepBlockCnt[0U] = 0U;
139 sleepBlockCnt[1U] = 0U;
141 #if (SLEEP_EM4_WAKEUP_CALLBACK_ENABLED == true) \
142 && (defined(RMU_RSTCAUSE_EM4WURST) || defined(RMU_RSTCAUSE_EM4RST))
144 #if defined(RMU_RSTCAUSE_EM4WURST)
146 #elif defined(RMU_RSTCAUSE_EM4RST)
153 if (NULL != wakeUpCallback)
216 #if (SLEEP_HW_LOW_ENERGY_BLOCK_ENABLED == true)
252 EFM_ASSERT((sleepBlockCnt[eMode - 2U]) < 255U);
257 sleepBlockCnt[eMode - 2U]++;
259 #if (SLEEP_HW_LOW_ENERGY_BLOCK_ENABLED == true)
302 if (sleepBlockCnt[eMode - 2U] > 0U)
304 sleepBlockCnt[eMode - 2U]--;
307 #if (SLEEP_HW_LOW_ENERGY_BLOCK_ENABLED == true)
309 if (0U == sleepBlockCnt[
sleepEM2 - 2U])
336 if (0U == sleepBlockCnt[
sleepEM2 - 2U])
339 if (0U == sleepBlockCnt[
sleepEM3 - 2U])
377 if (NULL != sleepCallback)
380 sleepCallback(eMode);
408 if (NULL != wakeUpCallback)
410 wakeUpCallback(eMode);
void SLEEP_SleepBlockEnd(SLEEP_EnergyMode_t eMode)
End sleep block in the requested energy mode.
uint32_t RMU_ResetCauseGet(void)
Get the cause of the last reset.
#define CORE_DECLARE_IRQ_STATE
Emlib peripheral API "assert" implementation.
void EMU_EnterEM4(void)
Enter energy mode 4 (EM4).
void EMU_EnterEM3(bool restore)
Enter energy mode 3 (EM3).
void EMU_EnterEM2(bool restore)
Enter energy mode 2 (EM2).
CMSIS Cortex-M Peripheral Access Layer for Silicon Laboratories microcontroller devices.
void SLEEP_SleepBlockBegin(SLEEP_EnergyMode_t eMode)
Begin sleep block in the requested energy mode.
#define RMU_RSTCAUSE_EM4WURST
#define SLEEP_LOWEST_ENERGY_MODE_DEFAULT
void SLEEP_Init(SLEEP_CbFuncPtr_t pSleepCb, SLEEP_CbFuncPtr_t pWakeUpCb)
Initialize the Sleep module.
__STATIC_INLINE void EMU_EnterEM1(void)
Enter energy mode 1 (EM1).
__STATIC_INLINE void EMU_EM2UnBlock(void)
Unblock entering EM2 or higher number energy modes.
Core interrupt handling API.
SLEEP_EnergyMode_t SLEEP_Sleep(void)
Sets the system to sleep into the lowest possible energy mode.
Reset Management Unit (RMU) peripheral API.
Energy management unit (EMU) peripheral API.
#define CORE_EXIT_CRITICAL()
void(* SLEEP_CbFuncPtr_t)(SLEEP_EnergyMode_t)
#define CORE_ENTER_CRITICAL()
void SLEEP_ForceSleepInEM4(void)
Force the device to go to EM4 without doing any checks.
#define RMU_RSTCAUSE_EM4RST
void RMU_ResetCauseClear(void)
Clear the reset cause register.
SLEEP_EnergyMode_t SLEEP_LowestEnergyModeGet(void)
Gets the lowest energy mode that the system is allowed to be set to.
__STATIC_INLINE void EMU_EM2Block(void)
Block entering EM2 or higher number energy modes.
Energy Modes management driver.