]> granicus.if.org Git - esp-idf/commitdiff
esp32: wait uart tx finish before cpu freq change
authorWu Jian Gang <wujiangang@espressif.com>
Wed, 21 Sep 2016 08:15:42 +0000 (16:15 +0800)
committerWu Jian Gang <wujiangang@espressif.com>
Wed, 21 Sep 2016 08:15:42 +0000 (16:15 +0800)
components/esp32/cpu_freq.c
components/esp32/include/soc/cpu.h

index c4bca44f0e4bc6860ea46f11a20d322b86ef0588..327ea63867dd9544b297d9d524323614892257fb 100644 (file)
@@ -14,6 +14,7 @@
 
 #include <stdint.h>
 #include "rom/ets_sys.h"
+#include "rom/uart.h"
 #include "sdkconfig.h"
 
 typedef enum{
@@ -42,10 +43,15 @@ extern void rtc_set_cpu_freq(xtal_freq_t xtal_freq, cpu_freq_t cpu_freq);
  * components which want to be notified of CPU frequency
  * changes.
  */
-void esp_set_cpu_freq()
+void esp_set_cpu_freq(void)
 {
     uint32_t freq_mhz = CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ;
     phy_get_romfunc_addr();
+
+    // freq will be changed to 40MHz in rtc_init_lite,
+    // wait uart tx finish, otherwise some uart output will be lost
+    uart_tx_wait_idle(0);
+
     rtc_init_lite();
     cpu_freq_t freq = CPU_80M;
     switch(freq_mhz) {
@@ -62,6 +68,11 @@ void esp_set_cpu_freq()
             freq = CPU_80M;
             break;
     }
+
+    // freq will be changed to freq in rtc_set_cpu_freq,
+    // wait uart tx finish, otherwise some uart output will be lost
+    uart_tx_wait_idle(0);
+
     rtc_set_cpu_freq(XTAL_AUTO, freq);
     ets_update_cpu_frequency(freq_mhz);
 }
index 9943a2783e4b6f433abf6b7ebce20227e73ea3d1..c74ba317c89662bce53bf9434db1fd9ab3e0acb5 100644 (file)
@@ -76,6 +76,6 @@ static inline void cpu_configure_region_protection()
  * This is a temporary function which will be replaced once dynamic
  * CPU frequency changing is implemented.
  */
-void esp_set_cpu_freq();
+void esp_set_cpu_freq(void);
 
 #endif