User_Sleep.c 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /*********************************************************************
  2. *
  3. * 文件名: User_Wdt.c
  4. * 功能描述:低功耗功能管理
  5. * 作者: 陈俊超
  6. * 时间:2020-11-20
  7. *
  8. ********************************************************************/
  9. #include "User_Sleep.h"
  10. #include "nrf_pwr_mgmt.h"
  11. #include "nrf_drv_clock.h"
  12. #include "nrf_gpio.h"
  13. #include "app_uart.h"
  14. /********************** 变量区 **************************************/
  15. #define RAM_RETENTION_OFF (0x00000003UL) /**< The flag used to turn off RAM retention on nRF52. */
  16. /********************** 函数功能区 **************************************/
  17. /**********************************************************
  18. * 函数名字:SleepMode_init
  19. * 函数作用:看门狗初始化
  20. * 函数参数:无
  21. * 函数返回值:无
  22. ***********************************************************/
  23. void SleepMode_init(void)
  24. {
  25. }
  26. /**********************************************************
  27. * 函数名字:IntoSystemOffMode
  28. * 函数作用:进入SystemOff超低功耗模式
  29. * 注意: 该模式下唤醒设备将会重启
  30. * 函数参数:无
  31. * 函数返回值:无
  32. ***********************************************************/
  33. void IntoSystemOffMode(void)
  34. {
  35. app_uart_close();//关闭串口
  36. nrf_gpio_cfg_sense_input(WakeUp_PIN, NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_LOW );
  37. #ifdef NRF51
  38. NRF_POWER->RAMON |= (POWER_RAMON_OFFRAM0_RAM0Off << POWER_RAMON_OFFRAM0_Pos) |
  39. (POWER_RAMON_OFFRAM1_RAM1Off << POWER_RAMON_OFFRAM1_Pos);
  40. #endif //NRF51
  41. #ifdef NRF52
  42. NRF_POWER->RAM[0].POWER = RAM_RETENTION_OFF;
  43. NRF_POWER->RAM[1].POWER = RAM_RETENTION_OFF;
  44. NRF_POWER->RAM[2].POWER = RAM_RETENTION_OFF;
  45. NRF_POWER->RAM[3].POWER = RAM_RETENTION_OFF;
  46. NRF_POWER->RAM[4].POWER = RAM_RETENTION_OFF;
  47. NRF_POWER->RAM[5].POWER = RAM_RETENTION_OFF;
  48. NRF_POWER->RAM[6].POWER = RAM_RETENTION_OFF;
  49. NRF_POWER->RAM[7].POWER = RAM_RETENTION_OFF;
  50. #endif //NRF52
  51. NRF_POWER->SYSTEMOFF = 0x1;
  52. (void) NRF_POWER->SYSTEMOFF;
  53. while (true);
  54. }