/********************************************************************* * * 文件名: User_Wdt.c * 功能描述:低功耗功能管理 * 作者: 陈俊超 * 时间:2020-11-20 * ********************************************************************/ #include "User_low_power.h" #include "nrf_pwr_mgmt.h" #include "nrf_drv_clock.h" #include "nrf_gpio.h" #include "app_uart.h" #include "app_timer.h" #include "main.h" /********************** 变量区 **************************************/ #define RAM_RETENTION_OFF (0x00000003UL) /**< 该标志用于关闭nRF52上的RAM 电源 */ APP_TIMER_DEF(m_lowpower_timer); /********************** 函数功能区 **************************************/ /********************************************************** * 函数名字:LowPower_timer_handler * 函数作用:低功耗任务管理 * 函数参数:p_context:上下文 * 函数返回值:无 ***********************************************************/ static void LowPower_timer_handler(void * p_context) { } /********************************************************** * 函数名字:SleepMode_init * 函数作用:睡眠定时器初始化 * 函数参数:无 * 函数返回值:无 ***********************************************************/ void SleepMode_init(void) { //创建低功耗任务管理的定时器 ret_code_t err_code = app_timer_create(&m_lowpower_timer, APP_TIMER_MODE_REPEATED, LowPower_timer_handler); APP_ERROR_CHECK(err_code); err_code = app_timer_start(m_lowpower_timer, APP_TIMER_TICKS(Lowpower_INTERVAL_MS), NULL); APP_ERROR_CHECK(err_code); } /********************************************************** * 函数名字:IntoSystemOffMode * 函数作用:进入SystemOff超低功耗模式 * 注意: 该模式下唤醒设备将会重启 * 函数参数:无 * 函数返回值:无 ***********************************************************/ void IntoSystemOffMode(void) { // uint32_t err_code; // User_HardwareTime_Set(DisEnable); // err_code = nrfx_saadc_channel_uninit(3); // nrfx_saadc_uninit(); // // MPU6050_sheep(); // // err_code = app_timer_stop_all(); // APP_ERROR_CHECK(err_code); // #if DEBUG_EN // err_code = app_uart_close();//关闭串口 // APP_ERROR_CHECK(err_code); // #endif // // if(NRF_SUCCESS == nrf_esb_disable()) // { // nrf_drv_clock_hfclk_release(); // //NRF_CLOCK->TASKS_HFCLKSTOP = 1; // } // // nrf_gpio_pin_write(LED_RUN,1); // nrf_gpio_pin_write(MT_EN,0); nrf_gpio_cfg_sense_input(MPU6050_INIT_PIN, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_HIGH );//IO #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); }