System OFF mode
system off mode是最深省電模式。 在此模式下,系統的核心功能已關閉,所有正在進行的任務都將終止。 唯一有效的機制在這種模式下響應是復位和喚醒機制。
在系統關閉模式下保留一個或多個RAM塊
可以通過以下方式進行喚醒:
1、GPIO信號
2、LPCOMP模塊
3、復位中喚醒
在進入系統關閉模式之前,用戶必須確保所有正在進行的EasyDMA交易已完成。 這通常是通過確保在進入系統關閉時啓用EasyDMA的外圍設備未激活來實現的。
void recover_state()
{
uint32_t loop_count = 0;
if ((NRF_POWER->GPREGRET >> 4) == RESET_MEMORY_TEST_BYTE)
{
// Take the loop_count value.
loop_count = (uint8_t)(NRF_POWER->GPREGRET & 0xFUL);
NRF_POWER->GPREGRET = 0;
}
loop_count++;
NRF_POWER->GPREGRET = ( (RESET_MEMORY_TEST_BYTE << 4) | loop_count);
tx_payload.data[1] = loop_count << 4;
}
void system_off( void )
{
#ifdef NRF51
NRF_POWER->RAMON |= (POWER_RAMON_OFFRAM0_RAM0Off << POWER_RAMON_OFFRAM0_Pos) |
(POWER_RAMON_OFFRAM1_RAM1Off << POWER_RAMON_OFFRAM1_Pos);
#endif //NRF51
#ifdef NRF52
NRF_POWER->RAM[0].POWER = RAM_RETENTION_OFF;
NRF_POWER->RAM[1].POWER = RAM_RETENTION_OFF;
NRF_POWER->RAM[2].POWER = RAM_RETENTION_OFF;
NRF_POWER->RAM[3].POWER = RAM_RETENTION_OFF;
NRF_POWER->RAM[4].POWER = RAM_RETENTION_OFF;
NRF_POWER->RAM[5].POWER = RAM_RETENTION_OFF;
NRF_POWER->RAM[6].POWER = RAM_RETENTION_OFF;
NRF_POWER->RAM[7].POWER = RAM_RETENTION_OFF;
#endif //NRF52
// Turn off LEDs before sleeping to conserve energy.
bsp_board_leds_off();
// Set nRF5 into System OFF. Reading out value and looping after setting the register
// to guarantee System OFF in nRF52.
NRF_POWER->SYSTEMOFF = 0x1;
(void) NRF_POWER->SYSTEMOFF;
while (true);
}
Emulated System OFF mode
如果設備處於調試接口模式,將模擬系統關閉以確保在系統關閉期間可以使用調試所需的所有必需資源,有關詳細信息,請參閱DIF章節。 調試所需的資源包括以下關鍵組件:DIF,CLOCK,POWER,NVMC,MPU,CPU,CODE和RAM。 由於CPU在仿真系統關閉模式下保持打開狀態,因此建議在進入系統關閉後直接添加無限循環,以防止CPU執行通常不應執行的代碼。
System ON mode
System ON mode,CPU可以處於活動狀態或休眠狀態。 CPU通過執行CPU指令集中的WFI或WFE指令進入休眠狀態。 在WFI休眠模式下,如果在NVIC中啓用了相關中斷,則CPU將因中斷請求而被喚醒。 在WFE休眠模式下,無論NVIC中是否啓用相關中斷,CPU都會因中斷請求而被喚醒。
子功率模式
在CPU休眠期間,在系統開啓模式下,系統可以駐留在以下兩種子電源模式之一:
•持續延遲
• 低電量
在恆定延遲模式下*(有關更多信息,請參閱特定於器件的產品規範)*,CPU喚醒延遲和PPI任務響應將保持不變並保持最小值。這可以通過在睡眠期間強制啓用一組基本資源來保護,有關強制使用哪些資源的詳細信息,請參閱設備特定的產品規範。具有恆定且可預測的等待時間的優點將以增加功耗爲代價。通過觸發CONSTLAT任務來選擇恆定延遲模式。
在低功耗模式下,第44頁的系統開啓模式中描述的自動電源管理系統將是最有效的並且可以節省最多電量。具有低功率的優點將以具有不同的CPU喚醒延遲和PPI任務響應爲代價。通過觸發LOWPWR任務選擇低功耗模式。
當系統進入ON模式時,默認情況下,它將處於低功耗子功耗模式。
\brief Wait For Interrupt
\details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.
*/
#define __WFI __wfi