/********************************************************************* * * 文件名: User_Wdt.c * 功能描述:低功耗功能管理 * 作者: 陈俊超 * 时间:2020-11-20 * ********************************************************************/ #include "User_Sleep.h" #include "nrf_pwr_mgmt.h" #include "nrf_drv_clock.h" #include "nrf_gpio.h" #include "app_uart.h" /********************** 变量区 **************************************/ #define RAM_RETENTION_OFF (0x00000003UL) /**< The flag used to turn off RAM retention on nRF52. */ /********************** 函数功能区 **************************************/ /********************************************************** * 函数名字:SleepMode_init * 函数作用:看门狗初始化 * 函数参数:无 * 函数返回值:无 ***********************************************************/ void SleepMode_init(void) { } /********************************************************** * 函数名字:IntoSystemOffMode * 函数作用:进入SystemOff超低功耗模式 * 注意: 该模式下唤醒设备将会重启 * 函数参数:无 * 函数返回值:无 ***********************************************************/ void IntoSystemOffMode(void) { app_uart_close();//关闭串口 nrf_gpio_cfg_sense_input(WakeUp_PIN, NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_LOW ); #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 NRF_POWER->SYSTEMOFF = 0x1; (void) NRF_POWER->SYSTEMOFF; while (true); }