Bladeren bron

examples/power_save: set CPU frequencies in sdkconfig

Ivan Grokhotkov 7 jaren geleden
bovenliggende
commit
3cec686803
2 gewijzigde bestanden met toevoegingen van 86 en 34 verwijderingen
  1. 81 28
      examples/wifi/power_save/main/Kconfig.projbuild
  2. 5 6
      examples/wifi/power_save/main/power_save.c

+ 81 - 28
examples/wifi/power_save/main/Kconfig.projbuild

@@ -1,43 +1,96 @@
 menu "Example Configuration"
 
 config WIFI_SSID
-    string "WiFi SSID"
-    default "myssid"
-    help
-	SSID (network name) for the example to connect to.
+	string "WiFi SSID"
+	default "myssid"
+	help
+		SSID (network name) for the example to connect to.
 
 config WIFI_PASSWORD
-    string "WiFi Password"
-    default "mypassword"
-    help
-	WiFi password (WPA or WPA2) for the example to use.
-	
+	string "WiFi Password"
+	default "mypassword"
+	help
+		WiFi password (WPA or WPA2) for the example to use.
+		
 config WIFI_LISTEN_INTERVAL
-    int "WiFi listen interval"
-    default 3
-    help
-	Interval for station to listen to beacon from AP. The unit of listen interval is one beacon interval. 
-	For example, if beacon interval is 100 ms and listen interval is 3, the interval for station to listen 
-	to beacon is 300 ms.
+	int "WiFi listen interval"
+	default 3
+	help
+		Interval for station to listen to beacon from AP. The unit of listen interval is one beacon interval. 
+		For example, if beacon interval is 100 ms and listen interval is 3, the interval for station to listen 
+		to beacon is 300 ms.
 
 choice POWER_SAVE_MODE
-    prompt "power save mode"
-    default POWER_SAVE_MIN_MODEM
-    help
-	Power save mode for the esp32 to use. Modem sleep mode includes minimum and maximum power save modes. 
-	In minimum power save mode, station wakes up every DTIM to receive beacon. Broadcast data will not be 
-	lost because it is transmitted after DTIM. However, it can not save much more power if DTIM is short 
-	for DTIM is determined by AP. 
-	In maximum power save mode, station wakes up every listen interval to receive beacon. Broadcast data 
-	may be lost because station may be in sleep state at DTIM time. If listen interval is longer, more power 
-	is saved but broadcast data is more easy to lose. 
+	prompt "power save mode"
+	default POWER_SAVE_MIN_MODEM
+	help
+		Power save mode for the esp32 to use. Modem sleep mode includes minimum and maximum power save modes. 
+		In minimum power save mode, station wakes up every DTIM to receive beacon. Broadcast data will not be 
+		lost because it is transmitted after DTIM. However, it can not save much more power if DTIM is short 
+		for DTIM is determined by AP. 
+		In maximum power save mode, station wakes up every listen interval to receive beacon. Broadcast data 
+		may be lost because station may be in sleep state at DTIM time. If listen interval is longer, more power 
+		is saved but broadcast data is more easy to lose. 
 
 config POWER_SAVE_NONE
-    bool "none"
+	bool "none"
 config POWER_SAVE_MIN_MODEM
-    bool "minimum modem"
+	bool "minimum modem"
 config POWER_SAVE_MAX_MODEM
-    bool "maximum modem"
+	bool "maximum modem"
 endchoice
 
+choice EXAMPLE_MAX_CPU_FREQ
+	prompt "Maximum CPU frequency"
+	default EXAMPLE_MAX_CPU_FREQ_80
+	help
+		Maximum CPU frequency to use for dynamic frequency scaling.
+
+config EXAMPLE_MAX_CPU_FREQ_80
+	bool "80 MHz"
+config EXAMPLE_MAX_CPU_FREQ_160
+	bool "160 MHz"
+config EXAMPLE_MAX_CPU_FREQ_240
+	bool "240 MHz"
+endchoice
+
+config EXAMPLE_MAX_CPU_FREQ_MHZ
+	int
+	default 80 if EXAMPLE_MAX_CPU_FREQ_80
+	default 160 if EXAMPLE_MAX_CPU_FREQ_160
+	default 240 if EXAMPLE_MAX_CPU_FREQ_240
+
+
+choice EXAMPLE_MIN_CPU_FREQ
+	prompt "Minimum CPU frequency"
+	default EXAMPLE_MIN_CPU_FREQ_10M
+	help
+		Minimum CPU frequency to use for dynamic frequency scaling.
+		Should be set to XTAL frequency or XTAL frequency divided by integer.
+
+config EXAMPLE_MIN_CPU_FREQ_40M
+	bool "40 MHz (use with 40MHz XTAL)"
+	depends on ESP32_XTAL_FREQ_40 || ESP32_XTAL_FREQ_AUTO   
+config EXAMPLE_MIN_CPU_FREQ_20M
+	bool "20 MHz (use with 40MHz XTAL)"
+	depends on ESP32_XTAL_FREQ_40 || ESP32_XTAL_FREQ_AUTO
+config EXAMPLE_MIN_CPU_FREQ_10M
+	bool "10 MHz (use with 40MHz XTAL)"
+	depends on ESP32_XTAL_FREQ_40 || ESP32_XTAL_FREQ_AUTO
+config EXAMPLE_MIN_CPU_FREQ_26M
+	bool "26 MHz (use with 26MHz XTAL)"
+	depends on ESP32_XTAL_FREQ_26 || ESP32_XTAL_FREQ_AUTO
+config EXAMPLE_MIN_CPU_FREQ_13M
+	bool "13 MHz (use with 26MHz XTAL)"
+	depends on ESP32_XTAL_FREQ_26 || ESP32_XTAL_FREQ_AUTO
+endchoice
+
+config EXAMPLE_MIN_CPU_FREQ_MHZ
+	int
+	default 40 if EXAMPLE_MIN_CPU_FREQ_40M
+	default 20 if EXAMPLE_MIN_CPU_FREQ_20M
+	default 10 if EXAMPLE_MIN_CPU_FREQ_10M
+	default 26 if EXAMPLE_MIN_CPU_FREQ_26M
+	default 13 if EXAMPLE_MIN_CPU_FREQ_13M
+		
 endmenu

+ 5 - 6
examples/wifi/power_save/main/power_save.c

@@ -96,13 +96,12 @@ void app_main()
     ESP_ERROR_CHECK( ret );
 
 #if CONFIG_PM_ENABLE
-    // Configure dynamic frequency scaling: maximum frequency is set in sdkconfig,
-    // minimum frequency is XTAL.
-    rtc_cpu_freq_t max_freq;
-    rtc_clk_cpu_freq_from_mhz(CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ, &max_freq);
+    // Configure dynamic frequency scaling:
+    // maximum and minimum frequencies are set in sdkconfig,
+    // automatic light sleep is enabled if tickless idle support is enabled.
     esp_pm_config_esp32_t pm_config = {
-            .max_cpu_freq = max_freq,
-            .min_cpu_freq = RTC_CPU_FREQ_XTAL,
+            .max_freq_mhz = CONFIG_EXAMPLE_MAX_CPU_FREQ_MHZ,
+            .min_freq_mhz = CONFIG_EXAMPLE_MIN_CPU_FREQ_MHZ,
 #if CONFIG_FREERTOS_USE_TICKLESS_IDLE
             .light_sleep_enable = true
 #endif