Skip to content

Commit 66d33f7

Browse files
committed
Add support for CPU Frequency switching
Experimental!
1 parent 0de0d3f commit 66d33f7

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

‎cores/esp32/esp32-hal-misc.c‎

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include"esp_bt.h"
2626
#endif//CONFIG_BT_ENABLED
2727
#include<sys/time.h>
28+
#include"soc/rtc.h"
2829
#include"esp32-hal.h"
2930

3031
//Undocumented!!! Get chip temperature in Farenheit
@@ -41,19 +42,41 @@ void yield()
4142
vPortYield();
4243
}
4344

45+
staticuint32_t_cpu_freq_mhz=240;
46+
47+
boolcpuFrequencySet(uint32_tcpu_freq_mhz){
48+
if(_cpu_freq_mhz==cpu_freq_mhz){
49+
return true;
50+
}
51+
rtc_cpu_freq_config_tconf;
52+
if(!rtc_clk_cpu_freq_mhz_to_config(cpu_freq_mhz, &conf)){
53+
log_e("CPU clock could not be set to %u MHz", cpu_freq_mhz);
54+
return false;
55+
}
56+
rtc_clk_cpu_freq_set_config(&conf);
57+
_cpu_freq_mhz=conf.freq_mhz;
58+
return true;
59+
}
60+
61+
uint32_tcpuFrequencyGet(){
62+
rtc_cpu_freq_config_tconf;
63+
rtc_clk_cpu_freq_get_config(&conf);
64+
returnconf.freq_mhz;
65+
}
66+
4467
unsigned long IRAM_ATTRmicros()
4568
{
46-
return (unsigned long) esp_timer_get_time();
69+
return (unsigned long) (esp_timer_get_time() * (240 / _cpu_freq_mhz));
4770
}
4871

4972
unsigned long IRAM_ATTRmillis()
5073
{
51-
return (unsigned long) (esp_timer_get_time() / 1000);
74+
return (unsigned long) (micros() / 1000);
5275
}
5376

5477
voiddelay(uint32_tms)
5578
{
56-
vTaskDelay(ms / portTICK_PERIOD_MS);
79+
vTaskDelay(ms / portTICK_PERIOD_MS / (240 / _cpu_freq_mhz));
5780
}
5881

5982
voidIRAM_ATTRdelayMicroseconds(uint32_tus)

‎cores/esp32/esp32-hal.h‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ void yield(void);
7272
//returns chip temperature in Celsius
7373
floattemperatureRead();
7474

75+
boolcpuFrequencySet(uint32_tcpu_freq_mhz);
76+
uint32_tcpuFrequencyGet();
77+
7578
unsigned longmicros();
7679
unsigned longmillis();
7780
voiddelay(uint32_t);

0 commit comments

Comments
(0)