#include "soc/rtc.h"
#define GPIO_pin 5
uint32_t Freq = 0;
uint32_t cpuSpeed;
rtc_cpu_freq_t MyCPU_Freq;
rtc_xtal_freq_t MyXTAL_Freq;
rtc_cpu_freq_config_t MyCPUconfig;
boolean Answer1;
void setup()
{
pinMode(GPIO_pin, OUTPUT);
Serial.begin(115200);
Serial.println(F("###############################"));
rtc_clk_cpu_freq_get_config(&MyCPUconfig);
cpuSpeed = getCpuFrequencyMhz();
Serial.println(F("\t\t-- Sources of microcontroller frequency applied --"));
Serial.print(F("\u2714 CPU speed in MHz is: "));
Serial.println(cpuSpeed, DEC);
Serial.print(F("\u2714 PLL Source clock frequency: "));
Serial.println(MyCPUconfig.source_freq_mhz, DEC);
Serial.print(F("\u2714 CPU clock frequency: "));
Serial.println(MyCPUconfig.freq_mhz, DEC);
Serial.print(F("\u2714 Division factor: "));
Serial.println(MyCPUconfig.div, DEC);
Serial.print(F("\u2714 Source clock frequency is: "));
switch (MyCPUconfig.source) {
case RTC_CPU_FREQ_SRC_XTAL:
Serial.println(F("External oscillator"));
break;
case RTC_CPU_FREQ_SRC_PLL:
Serial.println(F("Phase Locked Loop (480 MHz or 320 MHz)"));
break;
case RTC_CPU_FREQ_SRC_8M:
Serial.println(F("Internal 8MHz RTC oscillator"));
break;
case RTC_CPU_FREQ_SRC_APLL:
Serial.println(F("Audio PLL"));
break;
}
Serial.println(F("-----------------------"));
Freq=getCpuFrequencyMhz();
Serial.print("CPU Freq = ");
Serial.print(Freq);
Serial.println("Mhz");
Freq=getXtalFrequencyMhz();
Serial.print("XTAL Freq = ");
Serial.print(Freq);
Serial.println(" Mhz");
Freq = getApbFrequency();
Serial.print("Apb Freq = ");
Serial.print(Freq);
Serial.println(" Hz");
Serial.println(F("-----------------------"));
setCpuFrequencyMhz(80);
Serial.println(F("\t\t** Source of CPU frequency applied **"));
if (MyCPUconfig.source != RTC_CPU_FREQ_SRC_XTAL) {
MyCPUconfig.source = RTC_CPU_FREQ_SRC_XTAL;
MyCPUconfig.div = 1;
rtc_clk_cpu_freq_set_config(&MyCPUconfig);
Serial.println(F("The source clock applied for frequency CPU is external oscillator now"));
MyXTAL_Freq = rtc_clk_xtal_freq_get();
Serial.print(F("\u2714 Value stored in RTC register RTC_XTAL_FREQ_REG: "));
switch (MyXTAL_Freq) {
case RTC_XTAL_FREQ_AUTO:
Serial.println(F("Automatic XTAL frequency detection"));
break;
case RTC_XTAL_FREQ_40M:
Serial.println(F("40 MHz XTAL"));
break;
case RTC_XTAL_FREQ_26M:
Serial.println(F("26 MHz XTAL"));
break;
case RTC_XTAL_FREQ_24M:
Serial.println(F("24 MHz XTAL"));
break;
}
rtc_clk_cpu_freq_to_config(MyCPU_Freq, &MyCPUconfig);
Serial.print(F("\u2714 RTC CPU frequency: "));
switch (MyCPU_Freq) {
case RTC_CPU_FREQ_XTAL:
Serial.println(F("Main XTAL frequency"));
break;
case RTC_CPU_FREQ_80M:
Serial.println(F("CPU frequency is 80 MHz"));
break;
case RTC_CPU_FREQ_160M:
Serial.println(F("CPU frequency is 160 MHz"));
break;
case RTC_CPU_FREQ_240M:
Serial.println(F("CPU frequency is 240 MHz"));
break;
case RTC_CPU_FREQ_2M:
Serial.println(F("CPU frequency is 2 MHz"));
break;
}
rtc_clk_cpu_freq_get_config(&MyCPUconfig);
cpuSpeed = getCpuFrequencyMhz();
Answer1 = setCpuFrequencyMhz(80);
if (Answer1 == true) Serial.println(F("CPU frequency has been changed"));
Serial.print(F("\u2714 CPU speed in MHz is: "));
Serial.println(cpuSpeed, DEC);
Serial.print(F("\u2714 PLL Source clock frequency: "));
Serial.println(MyCPUconfig.source_freq_mhz, DEC);
Serial.print(F("\u2714 CPU clock frequency: "));
Serial.print(MyCPUconfig.freq_mhz, DEC);
Serial.println(F(" MHz"));
Serial.print(F("\u2714 Divider applied: "));
Serial.print(MyCPUconfig.div, DEC);
}
}
void loop()
{
digitalWrite(GPIO_pin, 1);
digitalWrite(GPIO_pin, 0);
}