]> granicus.if.org Git - esp-idf/commitdiff
pm: add unit test for configuration changes
authorIvan Grokhotkov <ivan@espressif.com>
Tue, 27 Mar 2018 02:53:03 +0000 (10:53 +0800)
committerIvan Grokhotkov <ivan@espressif.com>
Tue, 27 Mar 2018 03:20:55 +0000 (11:20 +0800)
components/esp32/test/test_pm.c

index 2214cec591377acc70339949612d43c980797851..7033238a04dda445695e03db52af8cd84e5d4e3a 100644 (file)
@@ -4,9 +4,48 @@
 #include <sys/time.h>
 #include "unity.h"
 #include "esp_pm.h"
-
+#include "esp_clk.h"
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "esp_log.h"
 
 TEST_CASE("Can dump power management lock stats", "[pm]")
 {
     esp_pm_dump_locks(stdout);
 }
+
+#ifdef CONFIG_PM_ENABLE
+
+static void switch_freq(int mhz)
+{
+    rtc_cpu_freq_t max_freq;
+    assert(rtc_clk_cpu_freq_from_mhz(mhz, &max_freq));
+    esp_pm_config_esp32_t pm_config = {
+        .max_cpu_freq = max_freq,
+        .min_cpu_freq = RTC_CPU_FREQ_XTAL,
+    };
+    ESP_ERROR_CHECK( esp_pm_configure(&pm_config) );
+    printf("Waiting for frequency to be set to %d (%d MHz)...\n", max_freq, mhz);
+    while (esp_clk_cpu_freq() / 1000000 != mhz) {
+        vTaskDelay(pdMS_TO_TICKS(1000));
+        printf("Frequency is %d MHz\n", esp_clk_cpu_freq());
+    }
+    printf("Frequency is set to %d MHz\n", mhz);
+}
+
+TEST_CASE("Can switch frequency using esp_pm_configure", "[pm]")
+{
+    int orig_freq_mhz = esp_clk_cpu_freq() / 1000000;
+    switch_freq(240);
+    switch_freq(40);
+    switch_freq(160);
+    switch_freq(240);
+    switch_freq(80);
+    switch_freq(40);
+    switch_freq(240);
+    switch_freq(40);
+    switch_freq(80);
+    switch_freq(orig_freq_mhz);
+}
+
+#endif // CONFIG_PM_ENABLE