User_low_power.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /*********************************************************************
  2. *
  3. * 文件名: User_Wdt.c
  4. * 功能描述:低功耗功能管理
  5. * 作者: 陈俊超
  6. * 时间:2020-11-20
  7. *
  8. ********************************************************************/
  9. #include "User_low_power.h"
  10. #include "nrf_pwr_mgmt.h"
  11. #include "nrf_drv_clock.h"
  12. #include "nrf_gpio.h"
  13. #include "app_uart.h"
  14. #include "app_timer.h"
  15. #include "main.h"
  16. /********************** 变量区 **************************************/
  17. #define RAM_RETENTION_OFF (0x00000003UL) /**< 该标志用于关闭nRF52上的RAM 电源 */
  18. APP_TIMER_DEF(m_lowpower_timer);
  19. /********************** 函数功能区 **************************************/
  20. /**********************************************************
  21. * 函数名字:LowPower_timer_handler
  22. * 函数作用:低功耗任务管理
  23. * 函数参数:p_context:上下文
  24. * 函数返回值:无
  25. ***********************************************************/
  26. static void LowPower_timer_handler(void * p_context)
  27. {
  28. }
  29. /**********************************************************
  30. * 函数名字:SleepMode_init
  31. * 函数作用:睡眠定时器初始化
  32. * 函数参数:无
  33. * 函数返回值:无
  34. ***********************************************************/
  35. void SleepMode_init(void)
  36. {
  37. //创建低功耗任务管理的定时器
  38. ret_code_t err_code = app_timer_create(&m_lowpower_timer,
  39. APP_TIMER_MODE_REPEATED,
  40. LowPower_timer_handler);
  41. APP_ERROR_CHECK(err_code);
  42. err_code = app_timer_start(m_lowpower_timer, APP_TIMER_TICKS(Lowpower_INTERVAL_MS), NULL);
  43. APP_ERROR_CHECK(err_code);
  44. }
  45. /**********************************************************
  46. * 函数名字:IntoSystemOffMode
  47. * 函数作用:进入SystemOff超低功耗模式
  48. * 注意: 该模式下唤醒设备将会重启
  49. * 函数参数:无
  50. * 函数返回值:无
  51. ***********************************************************/
  52. void IntoSystemOffMode(void)
  53. {
  54. // uint32_t err_code;
  55. // User_HardwareTime_Set(DisEnable);
  56. // err_code = nrfx_saadc_channel_uninit(3);
  57. // nrfx_saadc_uninit();
  58. //
  59. // MPU6050_sheep();
  60. //
  61. // err_code = app_timer_stop_all();
  62. // APP_ERROR_CHECK(err_code);
  63. // #if DEBUG_EN
  64. // err_code = app_uart_close();//关闭串口
  65. // APP_ERROR_CHECK(err_code);
  66. // #endif
  67. //
  68. // if(NRF_SUCCESS == nrf_esb_disable())
  69. // {
  70. // nrf_drv_clock_hfclk_release();
  71. // //NRF_CLOCK->TASKS_HFCLKSTOP = 1;
  72. // }
  73. //
  74. // nrf_gpio_pin_write(LED_RUN,1);
  75. // nrf_gpio_pin_write(MT_EN,0);
  76. nrf_gpio_cfg_sense_input(MPU6050_INIT_PIN, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_HIGH );//IO
  77. #ifdef NRF51
  78. NRF_POWER->RAMON |= (POWER_RAMON_OFFRAM0_RAM0Off << POWER_RAMON_OFFRAM0_Pos) |
  79. (POWER_RAMON_OFFRAM1_RAM1Off << POWER_RAMON_OFFRAM1_Pos);
  80. #endif //NRF51
  81. #ifdef NRF52
  82. NRF_POWER->RAM[0].POWER = RAM_RETENTION_OFF;
  83. NRF_POWER->RAM[1].POWER = RAM_RETENTION_OFF;
  84. NRF_POWER->RAM[2].POWER = RAM_RETENTION_OFF;
  85. NRF_POWER->RAM[3].POWER = RAM_RETENTION_OFF;
  86. NRF_POWER->RAM[4].POWER = RAM_RETENTION_OFF;
  87. NRF_POWER->RAM[5].POWER = RAM_RETENTION_OFF;
  88. NRF_POWER->RAM[6].POWER = RAM_RETENTION_OFF;
  89. NRF_POWER->RAM[7].POWER = RAM_RETENTION_OFF;
  90. #endif //NRF52
  91. NRF_POWER->SYSTEMOFF = 0x1;
  92. (void) NRF_POWER->SYSTEMOFF;
  93. while (true);
  94. }