test_sleep.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include "unity.h"
  2. #include <sys/time.h>
  3. #include "esp_sleep.h"
  4. #include "driver/rtc_io.h"
  5. #include "freertos/FreeRTOS.h"
  6. #include "freertos/task.h"
  7. TEST_CASE("esp_deepsleep works", "[deepsleep][reset=DEEPSLEEP_RESET]")
  8. {
  9. esp_deep_sleep(2000000);
  10. }
  11. static void deep_sleep_task(void *arg)
  12. {
  13. esp_deep_sleep_start();
  14. }
  15. static void do_deep_sleep_from_app_cpu()
  16. {
  17. xTaskCreatePinnedToCore(&deep_sleep_task, "ds", 2048, NULL, 5, NULL, 1);
  18. // keep running some non-IRAM code
  19. vTaskSuspendAll();
  20. while (true) {
  21. ;
  22. }
  23. }
  24. TEST_CASE("wake up using timer", "[deepsleep][reset=DEEPSLEEP_RESET]")
  25. {
  26. esp_sleep_enable_timer_wakeup(2000000);
  27. esp_deep_sleep_start();
  28. }
  29. TEST_CASE("wake up from light sleep using timer", "[deepsleep]")
  30. {
  31. esp_sleep_enable_timer_wakeup(2000000);
  32. struct timeval tv_start, tv_stop;
  33. gettimeofday(&tv_start, NULL);
  34. esp_light_sleep_start();
  35. gettimeofday(&tv_stop, NULL);
  36. float dt = (tv_stop.tv_sec - tv_start.tv_sec) * 1e3f +
  37. (tv_stop.tv_usec - tv_start.tv_usec) * 1e-3f;
  38. TEST_ASSERT_INT32_WITHIN(500, 2000, (int) dt);
  39. }
  40. #ifndef CONFIG_FREERTOS_UNICORE
  41. TEST_CASE("enter deep sleep on APP CPU and wake up using timer", "[deepsleep][reset=DEEPSLEEP_RESET]")
  42. {
  43. esp_sleep_enable_timer_wakeup(2000000);
  44. do_deep_sleep_from_app_cpu();
  45. }
  46. #endif
  47. TEST_CASE("wake up using ext0 (13 high)", "[deepsleep][ignore]")
  48. {
  49. ESP_ERROR_CHECK(rtc_gpio_init(GPIO_NUM_13));
  50. ESP_ERROR_CHECK(gpio_pullup_dis(GPIO_NUM_13));
  51. ESP_ERROR_CHECK(gpio_pulldown_en(GPIO_NUM_13));
  52. ESP_ERROR_CHECK(esp_sleep_enable_ext0_wakeup(GPIO_NUM_13, 1));
  53. esp_deep_sleep_start();
  54. }
  55. TEST_CASE("wake up using ext0 (13 low)", "[deepsleep][ignore]")
  56. {
  57. ESP_ERROR_CHECK(rtc_gpio_init(GPIO_NUM_13));
  58. ESP_ERROR_CHECK(gpio_pullup_en(GPIO_NUM_13));
  59. ESP_ERROR_CHECK(gpio_pulldown_dis(GPIO_NUM_13));
  60. ESP_ERROR_CHECK(esp_sleep_enable_ext0_wakeup(GPIO_NUM_13, 0));
  61. esp_deep_sleep_start();
  62. }
  63. TEST_CASE("wake up using ext1 when RTC_PERIPH is off (13 high)", "[deepsleep][ignore]")
  64. {
  65. // This test needs external pulldown
  66. ESP_ERROR_CHECK(rtc_gpio_init(GPIO_NUM_13));
  67. ESP_ERROR_CHECK(esp_sleep_enable_ext1_wakeup(BIT(GPIO_NUM_13), ESP_EXT1_WAKEUP_ANY_HIGH));
  68. esp_deep_sleep_start();
  69. }
  70. TEST_CASE("wake up using ext1 when RTC_PERIPH is off (13 low)", "[deepsleep][ignore]")
  71. {
  72. // This test needs external pullup
  73. ESP_ERROR_CHECK(rtc_gpio_init(GPIO_NUM_13));
  74. ESP_ERROR_CHECK(esp_sleep_enable_ext1_wakeup(BIT(GPIO_NUM_13), ESP_EXT1_WAKEUP_ALL_LOW));
  75. esp_deep_sleep_start();
  76. }
  77. TEST_CASE("wake up using ext1 when RTC_PERIPH is on (13 high)", "[deepsleep][ignore]")
  78. {
  79. ESP_ERROR_CHECK(rtc_gpio_init(GPIO_NUM_13));
  80. ESP_ERROR_CHECK(gpio_pullup_dis(GPIO_NUM_13));
  81. ESP_ERROR_CHECK(gpio_pulldown_en(GPIO_NUM_13));
  82. ESP_ERROR_CHECK(esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON));
  83. ESP_ERROR_CHECK(esp_sleep_enable_ext1_wakeup(BIT(GPIO_NUM_13), ESP_EXT1_WAKEUP_ANY_HIGH));
  84. esp_deep_sleep_start();
  85. }
  86. TEST_CASE("wake up using ext1 when RTC_PERIPH is on (13 low)", "[deepsleep][ignore]")
  87. {
  88. ESP_ERROR_CHECK(rtc_gpio_init(GPIO_NUM_13));
  89. ESP_ERROR_CHECK(gpio_pullup_en(GPIO_NUM_13));
  90. ESP_ERROR_CHECK(gpio_pulldown_dis(GPIO_NUM_13));
  91. ESP_ERROR_CHECK(esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON));
  92. ESP_ERROR_CHECK(esp_sleep_enable_ext1_wakeup(BIT(GPIO_NUM_13), ESP_EXT1_WAKEUP_ALL_LOW));
  93. esp_deep_sleep_start();
  94. }