RSL10自带的子程序void Sys_PowerModes_Sleep_WakeupFromFlash,若指令用 “SYS_WAIT_FOR_INTERRUPT;”可以进入睡眠,改用“SYS_WAIT_FOR_EVENT;”就无法进入睡眠,电流比较大。
void Sys_PowerModes_Sleep_WakeupFromFlash(
struct sleep_mode_flash_env_tag *sleep_mode_env)
{
/* Enable retention regulators with custom trimming */
ACS->VDDRET_CTRL = (((uint32_t) sleep_mode_env->VDDMRET_trim) <<
ACS_VDDRET_CTRL_VDDMRET_VTRIM_Pos) |
(((uint32_t) sleep_mode_env->VDDMRET_enable) <<
ACS_VDDRET_CTRL_VDDMRET_ENABLE_Pos) |
(((uint32_t) sleep_mode_env->VDDTRET_trim) <<
ACS_VDDRET_CTRL_VDDTRET_VTRIM_Pos) |
(((uint32_t) sleep_mode_env->VDDTRET_enable) <<
ACS_VDDRET_CTRL_VDDTRET_ENABLE_Pos) |
(((uint32_t) sleep_mode_env->VDDCRET_trim) <<
ACS_VDDRET_CTRL_VDDCRET_VTRIM_Pos) |
(((uint32_t) sleep_mode_env->VDDCRET_enable) <<
ACS_VDDRET_CTRL_VDDCRET_ENABLE_Pos);
/* Set wake-up configuration registers */
ACS->WAKEUP_CFG = sleep_mode_env->wakeup_cfg;
/* Set wake-up control/status registers */
ACS->WAKEUP_CTRL = sleep_mode_env->wakeup_ctrl;
/* Power-off/retain memory instances */
SYSCTRL->MEM_POWER_CFG = sleep_mode_env->mem_power_cfg |
PROM_POWER_ENABLE |
FLASH_POWER_ENABLE;
/* Switch SYSCLK to RC startup oscillator */
CLK_SYS_CFG->SYSCLK_SRC_SEL_BYTE = SYSCLK_CLKSRC_RCCLK_BYTE;
/* Enter Sleep Mode */
ACS->PWR_MODES_CTRL= PWR_SLEEP_MODE;
/* Wait for interrupt */
SYS_WAIT_FOR_INTERRUPT;
//SYS_WAIT_FOR_EVENT;//不能用这个,用这个无法睡眠
}