Add support for CPU Frequency switching
Experimental!
This commit is contained in:
parent
0de0d3f79a
commit
66d33f792c
@ -25,6 +25,7 @@
|
||||
#include "esp_bt.h"
|
||||
#endif //CONFIG_BT_ENABLED
|
||||
#include <sys/time.h>
|
||||
#include "soc/rtc.h"
|
||||
#include "esp32-hal.h"
|
||||
|
||||
//Undocumented!!! Get chip temperature in Farenheit
|
||||
@ -41,19 +42,41 @@ void yield()
|
||||
vPortYield();
|
||||
}
|
||||
|
||||
static uint32_t _cpu_freq_mhz = 240;
|
||||
|
||||
bool cpuFrequencySet(uint32_t cpu_freq_mhz){
|
||||
if(_cpu_freq_mhz == cpu_freq_mhz){
|
||||
return true;
|
||||
}
|
||||
rtc_cpu_freq_config_t conf;
|
||||
if(!rtc_clk_cpu_freq_mhz_to_config(cpu_freq_mhz, &conf)){
|
||||
log_e("CPU clock could not be set to %u MHz", cpu_freq_mhz);
|
||||
return false;
|
||||
}
|
||||
rtc_clk_cpu_freq_set_config(&conf);
|
||||
_cpu_freq_mhz = conf.freq_mhz;
|
||||
return true;
|
||||
}
|
||||
|
||||
uint32_t cpuFrequencyGet(){
|
||||
rtc_cpu_freq_config_t conf;
|
||||
rtc_clk_cpu_freq_get_config(&conf);
|
||||
return conf.freq_mhz;
|
||||
}
|
||||
|
||||
unsigned long IRAM_ATTR micros()
|
||||
{
|
||||
return (unsigned long) esp_timer_get_time();
|
||||
return (unsigned long) (esp_timer_get_time() * (240 / _cpu_freq_mhz));
|
||||
}
|
||||
|
||||
unsigned long IRAM_ATTR millis()
|
||||
{
|
||||
return (unsigned long) (esp_timer_get_time() / 1000);
|
||||
return (unsigned long) (micros() / 1000);
|
||||
}
|
||||
|
||||
void delay(uint32_t ms)
|
||||
{
|
||||
vTaskDelay(ms / portTICK_PERIOD_MS);
|
||||
vTaskDelay(ms / portTICK_PERIOD_MS / (240 / _cpu_freq_mhz));
|
||||
}
|
||||
|
||||
void IRAM_ATTR delayMicroseconds(uint32_t us)
|
||||
|
@ -72,6 +72,9 @@ void yield(void);
|
||||
//returns chip temperature in Celsius
|
||||
float temperatureRead();
|
||||
|
||||
bool cpuFrequencySet(uint32_t cpu_freq_mhz);
|
||||
uint32_t cpuFrequencyGet();
|
||||
|
||||
unsigned long micros();
|
||||
unsigned long millis();
|
||||
void delay(uint32_t);
|
||||
|
Loading…
Reference in New Issue
Block a user