mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-16 15:04:22 +00:00
fix(clk): XTAL_X2 clock is not usable on H21 MPW and H4 BETA5
This commit is contained in:
@@ -41,7 +41,8 @@ menu "Bootloader config"
|
|||||||
|
|
||||||
config BOOTLOADER_CPU_CLK_FREQ_MHZ
|
config BOOTLOADER_CPU_CLK_FREQ_MHZ
|
||||||
int
|
int
|
||||||
default 64 if IDF_TARGET_ESP32H2 || IDF_TARGET_ESP32H21 || IDF_TARGET_ESP32H4
|
default 64 if IDF_TARGET_ESP32H2
|
||||||
|
default 48 if IDF_TARGET_ESP32H21 || IDF_TARGET_ESP32H4
|
||||||
default 90 if IDF_TARGET_ESP32P4
|
default 90 if IDF_TARGET_ESP32P4
|
||||||
default 80
|
default 80
|
||||||
help
|
help
|
||||||
|
@@ -81,10 +81,11 @@ void IRAM_ATTR bootloader_configure_spi_pins(int drv)
|
|||||||
|
|
||||||
static void IRAM_ATTR bootloader_flash_clock_init(void)
|
static void IRAM_ATTR bootloader_flash_clock_init(void)
|
||||||
{
|
{
|
||||||
// To raise the MSPI clock to 64MHz, needs to enable the 64MHz clock source, which is XTAL_X2_CLK
|
// // To raise the MSPI clock to 64MHz, needs to enable the 64MHz clock source, which is XTAL_X2_CLK
|
||||||
// (FPGA image fixed MSPI0/1 clock to 64MHz)
|
// // (FPGA image fixed MSPI0/1 clock to 64MHz)
|
||||||
clk_ll_xtal_x2_enable();
|
// clk_ll_xtal_x2_enable();
|
||||||
_mspi_timing_ll_set_flash_clk_src(0, FLASH_CLK_SRC_PLL_F64M);
|
// _mspi_timing_ll_set_flash_clk_src(0, FLASH_CLK_SRC_PLL_F64M);
|
||||||
|
_mspi_timing_ll_set_flash_clk_src(0, FLASH_CLK_SRC_PLL_F48M);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void update_flash_config(const esp_image_header_t *bootloader_hdr)
|
static void update_flash_config(const esp_image_header_t *bootloader_hdr)
|
||||||
|
@@ -33,9 +33,9 @@ uint32_t *freq_value)
|
|||||||
case SOC_MOD_CLK_PLL_F48M:
|
case SOC_MOD_CLK_PLL_F48M:
|
||||||
clk_src_freq = CLK_LL_PLL_48M_FREQ_MHZ * MHZ;
|
clk_src_freq = CLK_LL_PLL_48M_FREQ_MHZ * MHZ;
|
||||||
break;
|
break;
|
||||||
case SOC_MOD_CLK_XTAL_X2_F64M:
|
// case SOC_MOD_CLK_XTAL_X2_F64M:
|
||||||
clk_src_freq = CLK_LL_PLL_64M_FREQ_MHZ * MHZ;
|
// clk_src_freq = CLK_LL_PLL_64M_FREQ_MHZ * MHZ;
|
||||||
break;
|
// break;
|
||||||
case SOC_MOD_CLK_PLL_F96M:
|
case SOC_MOD_CLK_PLL_F96M:
|
||||||
clk_src_freq = CLK_LL_PLL_96M_FREQ_MHZ * MHZ;
|
clk_src_freq = CLK_LL_PLL_96M_FREQ_MHZ * MHZ;
|
||||||
break;
|
break;
|
||||||
@@ -60,22 +60,22 @@ uint32_t *freq_value)
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int16_t s_xtal_x2_ref_cnt = 0;
|
// static int16_t s_xtal_x2_ref_cnt = 0;
|
||||||
|
|
||||||
void esp_clk_tree_initialize(void)
|
void esp_clk_tree_initialize(void)
|
||||||
{
|
{
|
||||||
// In bootloader, flash clock source will always be switched to use XTAL_X2 clock
|
// // In bootloader, flash clock source will always be switched to use XTAL_X2 clock
|
||||||
s_xtal_x2_ref_cnt++;
|
// s_xtal_x2_ref_cnt++;
|
||||||
if (clk_ll_cpu_get_src() == SOC_CPU_CLK_SRC_XTAL_X2) {
|
// if (clk_ll_cpu_get_src() == SOC_CPU_CLK_SRC_XTAL_X2) {
|
||||||
s_xtal_x2_ref_cnt++;
|
// s_xtal_x2_ref_cnt++;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
bool esp_clk_tree_is_power_on(soc_root_clk_circuit_t clk_circuit)
|
bool esp_clk_tree_is_power_on(soc_root_clk_circuit_t clk_circuit)
|
||||||
{
|
{
|
||||||
switch (clk_circuit) {
|
switch (clk_circuit) {
|
||||||
case SOC_ROOT_CIRCUIT_CLK_XTAL_X2:
|
// case SOC_ROOT_CIRCUIT_CLK_XTAL_X2:
|
||||||
return s_xtal_x2_ref_cnt > 0;
|
// return s_xtal_x2_ref_cnt > 0;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -85,21 +85,21 @@ bool esp_clk_tree_is_power_on(soc_root_clk_circuit_t clk_circuit)
|
|||||||
esp_err_t esp_clk_tree_enable_power(soc_root_clk_circuit_t clk_circuit, bool enable)
|
esp_err_t esp_clk_tree_enable_power(soc_root_clk_circuit_t clk_circuit, bool enable)
|
||||||
{
|
{
|
||||||
switch (clk_circuit) {
|
switch (clk_circuit) {
|
||||||
case SOC_ROOT_CIRCUIT_CLK_XTAL_X2:
|
// case SOC_ROOT_CIRCUIT_CLK_XTAL_X2:
|
||||||
if (enable) {
|
// if (enable) {
|
||||||
s_xtal_x2_ref_cnt++;
|
// s_xtal_x2_ref_cnt++;
|
||||||
} else {
|
// } else {
|
||||||
s_xtal_x2_ref_cnt--;
|
// s_xtal_x2_ref_cnt--;
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (s_xtal_x2_ref_cnt == 1) {
|
// if (s_xtal_x2_ref_cnt == 1) {
|
||||||
clk_ll_xtal_x2_enable();
|
// clk_ll_xtal_x2_enable();
|
||||||
} else if (s_xtal_x2_ref_cnt == 0) {
|
// } else if (s_xtal_x2_ref_cnt == 0) {
|
||||||
clk_ll_xtal_x2_disable();
|
// clk_ll_xtal_x2_disable();
|
||||||
}
|
// }
|
||||||
|
|
||||||
assert(s_xtal_x2_ref_cnt >= 0);
|
// assert(s_xtal_x2_ref_cnt >= 0);
|
||||||
break;
|
// break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -109,10 +109,10 @@ esp_err_t esp_clk_tree_enable_power(soc_root_clk_circuit_t clk_circuit, bool ena
|
|||||||
esp_err_t esp_clk_tree_enable_src(soc_module_clk_t clk_src, bool enable)
|
esp_err_t esp_clk_tree_enable_src(soc_module_clk_t clk_src, bool enable)
|
||||||
{
|
{
|
||||||
switch (clk_src) {
|
switch (clk_src) {
|
||||||
case SOC_MOD_CLK_XTAL_X2_F64M:
|
// case SOC_MOD_CLK_XTAL_X2_F64M:
|
||||||
// later, here should handle ref count for XTAL_X2_F64M clock gating, then also handle XTAL_X2 circuit enable/disable
|
// // later, here should handle ref count for XTAL_X2_F64M clock gating, then also handle XTAL_X2 circuit enable/disable
|
||||||
esp_clk_tree_enable_power(SOC_ROOT_CIRCUIT_CLK_XTAL_X2, enable);
|
// esp_clk_tree_enable_power(SOC_ROOT_CIRCUIT_CLK_XTAL_X2, enable);
|
||||||
break;
|
// break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -199,22 +199,22 @@ static void rtc_clk_cpu_freq_to_pll_mhz(int cpu_freq_mhz)
|
|||||||
esp_rom_set_cpu_ticks_per_us(cpu_freq_mhz);
|
esp_rom_set_cpu_ticks_per_us(cpu_freq_mhz);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* Switch to XTAL_X2 as cpu clock source.
|
// * Switch to XTAL_X2 as cpu clock source.
|
||||||
* On ESP32H21, XTAL_X2 frequency is 64MHz.
|
// * On ESP32H21, XTAL_X2 frequency is 64MHz.
|
||||||
* XTAL_X2 circuit must already been enabled.
|
// * XTAL_X2 circuit must already been enabled.
|
||||||
*/
|
// */
|
||||||
static void rtc_clk_cpu_freq_to_xtal_x2(uint32_t cpu_freq_mhz, uint32_t cpu_divider)
|
// static void rtc_clk_cpu_freq_to_xtal_x2(uint32_t cpu_freq_mhz, uint32_t cpu_divider)
|
||||||
{
|
// {
|
||||||
// f_hp_root = 64MHz
|
// // f_hp_root = 64MHz
|
||||||
clk_ll_cpu_set_divider(cpu_divider);
|
// clk_ll_cpu_set_divider(cpu_divider);
|
||||||
// Constraint: f_ahb <= 32MHz; f_cpu = N * f_ahb (N = 1, 2, 3...)
|
// // Constraint: f_ahb <= 32MHz; f_cpu = N * f_ahb (N = 1, 2, 3...)
|
||||||
uint32_t ahb_divider = (cpu_divider == 1) ? 2 : cpu_divider;
|
// uint32_t ahb_divider = (cpu_divider == 1) ? 2 : cpu_divider;
|
||||||
clk_ll_ahb_set_divider(ahb_divider);
|
// clk_ll_ahb_set_divider(ahb_divider);
|
||||||
clk_ll_cpu_set_src(SOC_CPU_CLK_SRC_XTAL_X2);
|
// clk_ll_cpu_set_src(SOC_CPU_CLK_SRC_XTAL_X2);
|
||||||
clk_ll_bus_update();
|
// clk_ll_bus_update();
|
||||||
esp_rom_set_cpu_ticks_per_us(cpu_freq_mhz);
|
// esp_rom_set_cpu_ticks_per_us(cpu_freq_mhz);
|
||||||
}
|
// }
|
||||||
|
|
||||||
bool rtc_clk_cpu_freq_mhz_to_config(uint32_t freq_mhz, rtc_cpu_freq_config_t *out_config)
|
bool rtc_clk_cpu_freq_mhz_to_config(uint32_t freq_mhz, rtc_cpu_freq_config_t *out_config)
|
||||||
{
|
{
|
||||||
@@ -239,11 +239,11 @@ bool rtc_clk_cpu_freq_mhz_to_config(uint32_t freq_mhz, rtc_cpu_freq_config_t *ou
|
|||||||
source = SOC_CPU_CLK_SRC_PLL;
|
source = SOC_CPU_CLK_SRC_PLL;
|
||||||
source_freq_mhz = CLK_LL_PLL_96M_FREQ_MHZ;
|
source_freq_mhz = CLK_LL_PLL_96M_FREQ_MHZ;
|
||||||
divider = 1;
|
divider = 1;
|
||||||
} else if (freq_mhz == 64) {
|
// } else if (freq_mhz == 64) {
|
||||||
real_freq_mhz = freq_mhz;
|
// real_freq_mhz = freq_mhz;
|
||||||
source = SOC_CPU_CLK_SRC_XTAL_X2;
|
// source = SOC_CPU_CLK_SRC_XTAL_X2;
|
||||||
source_freq_mhz = CLK_LL_PLL_64M_FREQ_MHZ;
|
// source_freq_mhz = CLK_LL_PLL_64M_FREQ_MHZ;
|
||||||
divider = 1;
|
// divider = 1;
|
||||||
} else if (freq_mhz == 48) {
|
} else if (freq_mhz == 48) {
|
||||||
real_freq_mhz = freq_mhz;
|
real_freq_mhz = freq_mhz;
|
||||||
source = SOC_CPU_CLK_SRC_PLL;
|
source = SOC_CPU_CLK_SRC_PLL;
|
||||||
@@ -271,12 +271,12 @@ static void rtc_clk_cpu_src_clk_enable(soc_cpu_clk_src_t new_src, uint32_t new_s
|
|||||||
if (new_src == SOC_CPU_CLK_SRC_PLL) {
|
if (new_src == SOC_CPU_CLK_SRC_PLL) {
|
||||||
rtc_clk_bbpll_enable();
|
rtc_clk_bbpll_enable();
|
||||||
rtc_clk_bbpll_configure(rtc_clk_xtal_freq_get(), new_src_freq_mhz);
|
rtc_clk_bbpll_configure(rtc_clk_xtal_freq_get(), new_src_freq_mhz);
|
||||||
} else if (new_src == SOC_CPU_CLK_SRC_XTAL_X2) {
|
// } else if (new_src == SOC_CPU_CLK_SRC_XTAL_X2) {
|
||||||
#if BOOTLOADER_BUILD
|
// #if BOOTLOADER_BUILD
|
||||||
clk_ll_xtal_x2_enable();
|
// clk_ll_xtal_x2_enable();
|
||||||
#else
|
// #else
|
||||||
esp_clk_tree_enable_power(SOC_ROOT_CIRCUIT_CLK_XTAL_X2, true);
|
// esp_clk_tree_enable_power(SOC_ROOT_CIRCUIT_CLK_XTAL_X2, true);
|
||||||
#endif
|
// #endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -284,12 +284,12 @@ static void rtc_clk_cpu_src_clk_disable(soc_cpu_clk_src_t old_src)
|
|||||||
{
|
{
|
||||||
if ((old_src == SOC_CPU_CLK_SRC_PLL) && !s_bbpll_digi_consumers_ref_count) {
|
if ((old_src == SOC_CPU_CLK_SRC_PLL) && !s_bbpll_digi_consumers_ref_count) {
|
||||||
rtc_clk_bbpll_disable();
|
rtc_clk_bbpll_disable();
|
||||||
} else if (old_src == SOC_CPU_CLK_SRC_XTAL_X2) {
|
// } else if (old_src == SOC_CPU_CLK_SRC_XTAL_X2) {
|
||||||
#if BOOTLOADER_BUILD
|
// #if BOOTLOADER_BUILD
|
||||||
clk_ll_xtal_x2_disable();
|
// clk_ll_xtal_x2_disable();
|
||||||
#else
|
// #else
|
||||||
esp_clk_tree_enable_power(SOC_ROOT_CIRCUIT_CLK_XTAL_X2, false);
|
// esp_clk_tree_enable_power(SOC_ROOT_CIRCUIT_CLK_XTAL_X2, false);
|
||||||
#endif
|
// #endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -309,8 +309,8 @@ void rtc_clk_cpu_freq_set_config(const rtc_cpu_freq_config_t *config)
|
|||||||
rtc_clk_set_cpu_switch_to_pll(SLEEP_EVENT_HW_PLL_EN_STOP);
|
rtc_clk_set_cpu_switch_to_pll(SLEEP_EVENT_HW_PLL_EN_STOP);
|
||||||
} else if (config->source == SOC_CPU_CLK_SRC_RC_FAST) {
|
} else if (config->source == SOC_CPU_CLK_SRC_RC_FAST) {
|
||||||
rtc_clk_cpu_freq_to_rc_fast();
|
rtc_clk_cpu_freq_to_rc_fast();
|
||||||
} else if (config->source == SOC_CPU_CLK_SRC_XTAL_X2) {
|
// } else if (config->source == SOC_CPU_CLK_SRC_XTAL_X2) {
|
||||||
rtc_clk_cpu_freq_to_xtal_x2(config->freq_mhz, config->div);
|
// rtc_clk_cpu_freq_to_xtal_x2(config->freq_mhz, config->div);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (old_cpu_clk_src != config->source) {
|
if (old_cpu_clk_src != config->source) {
|
||||||
@@ -334,9 +334,9 @@ void rtc_clk_cpu_freq_get_config(rtc_cpu_freq_config_t *out_config)
|
|||||||
case SOC_CPU_CLK_SRC_RC_FAST:
|
case SOC_CPU_CLK_SRC_RC_FAST:
|
||||||
source_freq_mhz = 20;
|
source_freq_mhz = 20;
|
||||||
break;
|
break;
|
||||||
case SOC_CPU_CLK_SRC_XTAL_X2:
|
// case SOC_CPU_CLK_SRC_XTAL_X2:
|
||||||
source_freq_mhz = clk_ll_xtal_x2_get_freq_mhz();
|
// source_freq_mhz = clk_ll_xtal_x2_get_freq_mhz();
|
||||||
break;
|
// break;
|
||||||
default:
|
default:
|
||||||
ESP_HW_LOGE(TAG, "unsupported frequency configuration");
|
ESP_HW_LOGE(TAG, "unsupported frequency configuration");
|
||||||
abort();
|
abort();
|
||||||
@@ -360,9 +360,9 @@ void rtc_clk_cpu_freq_set_config_fast(const rtc_cpu_freq_config_t *config)
|
|||||||
rtc_clk_cpu_freq_to_pll_mhz(config->freq_mhz);
|
rtc_clk_cpu_freq_to_pll_mhz(config->freq_mhz);
|
||||||
} else if (config->source == SOC_CPU_CLK_SRC_RC_FAST) {
|
} else if (config->source == SOC_CPU_CLK_SRC_RC_FAST) {
|
||||||
rtc_clk_cpu_freq_to_rc_fast();
|
rtc_clk_cpu_freq_to_rc_fast();
|
||||||
} else if (config->source == SOC_CPU_CLK_SRC_XTAL_X2
|
// } else if (config->source == SOC_CPU_CLK_SRC_XTAL_X2
|
||||||
&& esp_clk_tree_is_power_on(SOC_ROOT_CIRCUIT_CLK_XTAL_X2)) {
|
// && esp_clk_tree_is_power_on(SOC_ROOT_CIRCUIT_CLK_XTAL_X2)) {
|
||||||
rtc_clk_cpu_freq_to_xtal_x2(config->freq_mhz, config->div);
|
// rtc_clk_cpu_freq_to_xtal_x2(config->freq_mhz, config->div);
|
||||||
} else {
|
} else {
|
||||||
/* fallback */
|
/* fallback */
|
||||||
rtc_clk_cpu_freq_set_config(config);
|
rtc_clk_cpu_freq_set_config(config);
|
||||||
@@ -410,9 +410,9 @@ static uint32_t rtc_clk_ahb_freq_get(void)
|
|||||||
case SOC_CPU_CLK_SRC_RC_FAST:
|
case SOC_CPU_CLK_SRC_RC_FAST:
|
||||||
soc_root_freq_mhz = 20;
|
soc_root_freq_mhz = 20;
|
||||||
break;
|
break;
|
||||||
case SOC_CPU_CLK_SRC_XTAL_X2:
|
// case SOC_CPU_CLK_SRC_XTAL_X2:
|
||||||
soc_root_freq_mhz = clk_ll_xtal_x2_get_freq_mhz();
|
// soc_root_freq_mhz = clk_ll_xtal_x2_get_freq_mhz();
|
||||||
break;
|
// break;
|
||||||
default:
|
default:
|
||||||
// Unknown SOC_ROOT clock source
|
// Unknown SOC_ROOT clock source
|
||||||
soc_root_freq_mhz = 0;
|
soc_root_freq_mhz = 0;
|
||||||
|
@@ -30,15 +30,15 @@ uint32_t *freq_value)
|
|||||||
case SOC_MOD_CLK_XTAL:
|
case SOC_MOD_CLK_XTAL:
|
||||||
clk_src_freq = clk_hal_xtal_get_freq_mhz() * MHZ;
|
clk_src_freq = clk_hal_xtal_get_freq_mhz() * MHZ;
|
||||||
break;
|
break;
|
||||||
case SOC_MOD_CLK_XTAL_X2_F32M:
|
// case SOC_MOD_CLK_XTAL_X2_F32M:
|
||||||
clk_src_freq = CLK_LL_PLL_32M_FREQ_MHZ * MHZ;
|
// clk_src_freq = CLK_LL_PLL_32M_FREQ_MHZ * MHZ;
|
||||||
break;
|
// break;
|
||||||
case SOC_MOD_CLK_PLL_F48M:
|
case SOC_MOD_CLK_PLL_F48M:
|
||||||
clk_src_freq = CLK_LL_PLL_48M_FREQ_MHZ * MHZ;
|
clk_src_freq = CLK_LL_PLL_48M_FREQ_MHZ * MHZ;
|
||||||
break;
|
break;
|
||||||
case SOC_MOD_CLK_XTAL_X2_F64M:
|
// case SOC_MOD_CLK_XTAL_X2_F64M:
|
||||||
clk_src_freq = CLK_LL_PLL_64M_FREQ_MHZ * MHZ;
|
// clk_src_freq = CLK_LL_PLL_64M_FREQ_MHZ * MHZ;
|
||||||
break;
|
// break;
|
||||||
case SOC_MOD_CLK_PLL_F96M:
|
case SOC_MOD_CLK_PLL_F96M:
|
||||||
clk_src_freq = CLK_LL_PLL_96M_FREQ_MHZ * MHZ;
|
clk_src_freq = CLK_LL_PLL_96M_FREQ_MHZ * MHZ;
|
||||||
break;
|
break;
|
||||||
@@ -63,23 +63,23 @@ uint32_t *freq_value)
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int16_t s_xtal_x2_ref_cnt = 0;
|
// static int16_t s_xtal_x2_ref_cnt = 0;
|
||||||
|
|
||||||
void esp_clk_tree_initialize(void)
|
void esp_clk_tree_initialize(void)
|
||||||
{
|
{
|
||||||
// TODO: IDF-12388
|
// // TODO: IDF-12388
|
||||||
// // In bootloader, flash clock source will always be switched to use XTAL_X2 clock
|
// // // In bootloader, flash clock source will always be switched to use XTAL_X2 clock
|
||||||
// s_xtal_x2_ref_cnt++;
|
// // s_xtal_x2_ref_cnt++;
|
||||||
if (clk_ll_cpu_get_src() == SOC_CPU_CLK_SRC_XTAL_X2) {
|
// if (clk_ll_cpu_get_src() == SOC_CPU_CLK_SRC_XTAL_X2) {
|
||||||
s_xtal_x2_ref_cnt++;
|
// s_xtal_x2_ref_cnt++;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
bool esp_clk_tree_is_power_on(soc_root_clk_circuit_t clk_circuit)
|
bool esp_clk_tree_is_power_on(soc_root_clk_circuit_t clk_circuit)
|
||||||
{
|
{
|
||||||
switch (clk_circuit) {
|
switch (clk_circuit) {
|
||||||
case SOC_ROOT_CIRCUIT_CLK_XTAL_X2:
|
// case SOC_ROOT_CIRCUIT_CLK_XTAL_X2:
|
||||||
return s_xtal_x2_ref_cnt > 0;
|
// return s_xtal_x2_ref_cnt > 0;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -89,21 +89,21 @@ bool esp_clk_tree_is_power_on(soc_root_clk_circuit_t clk_circuit)
|
|||||||
esp_err_t esp_clk_tree_enable_power(soc_root_clk_circuit_t clk_circuit, bool enable)
|
esp_err_t esp_clk_tree_enable_power(soc_root_clk_circuit_t clk_circuit, bool enable)
|
||||||
{
|
{
|
||||||
switch (clk_circuit) {
|
switch (clk_circuit) {
|
||||||
case SOC_ROOT_CIRCUIT_CLK_XTAL_X2:
|
// case SOC_ROOT_CIRCUIT_CLK_XTAL_X2:
|
||||||
if (enable) {
|
// if (enable) {
|
||||||
s_xtal_x2_ref_cnt++;
|
// s_xtal_x2_ref_cnt++;
|
||||||
} else {
|
// } else {
|
||||||
s_xtal_x2_ref_cnt--;
|
// s_xtal_x2_ref_cnt--;
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (s_xtal_x2_ref_cnt == 1) {
|
// if (s_xtal_x2_ref_cnt == 1) {
|
||||||
clk_ll_xtal_x2_enable();
|
// clk_ll_xtal_x2_enable();
|
||||||
} else if (s_xtal_x2_ref_cnt == 0) {
|
// } else if (s_xtal_x2_ref_cnt == 0) {
|
||||||
clk_ll_xtal_x2_disable();
|
// clk_ll_xtal_x2_disable();
|
||||||
}
|
// }
|
||||||
|
|
||||||
assert(s_xtal_x2_ref_cnt >= 0);
|
// assert(s_xtal_x2_ref_cnt >= 0);
|
||||||
break;
|
// break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -113,14 +113,14 @@ esp_err_t esp_clk_tree_enable_power(soc_root_clk_circuit_t clk_circuit, bool ena
|
|||||||
esp_err_t esp_clk_tree_enable_src(soc_module_clk_t clk_src, bool enable)
|
esp_err_t esp_clk_tree_enable_src(soc_module_clk_t clk_src, bool enable)
|
||||||
{
|
{
|
||||||
switch (clk_src) {
|
switch (clk_src) {
|
||||||
case SOC_MOD_CLK_XTAL_X2_F32M:
|
// case SOC_MOD_CLK_XTAL_X2_F32M:
|
||||||
// later, here should handle ref count for XTAL_X2_F32M clock gating, then also handle XTAL_X2 circuit enable/disable
|
// // later, here should handle ref count for XTAL_X2_F32M clock gating, then also handle XTAL_X2 circuit enable/disable
|
||||||
esp_clk_tree_enable_power(SOC_ROOT_CIRCUIT_CLK_XTAL_X2, enable);
|
// esp_clk_tree_enable_power(SOC_ROOT_CIRCUIT_CLK_XTAL_X2, enable);
|
||||||
break;
|
// break;
|
||||||
case SOC_MOD_CLK_XTAL_X2_F64M:
|
// case SOC_MOD_CLK_XTAL_X2_F64M:
|
||||||
// later, here should handle ref count for XTAL_X2_F64M clock gating, then also handle XTAL_X2 circuit enable/disable
|
// // later, here should handle ref count for XTAL_X2_F64M clock gating, then also handle XTAL_X2 circuit enable/disable
|
||||||
esp_clk_tree_enable_power(SOC_ROOT_CIRCUIT_CLK_XTAL_X2, enable);
|
// esp_clk_tree_enable_power(SOC_ROOT_CIRCUIT_CLK_XTAL_X2, enable);
|
||||||
break;
|
// break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -198,22 +198,22 @@ static void rtc_clk_cpu_freq_to_pll_mhz(int cpu_freq_mhz)
|
|||||||
esp_rom_set_cpu_ticks_per_us(cpu_freq_mhz);
|
esp_rom_set_cpu_ticks_per_us(cpu_freq_mhz);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* Switch to XTAL_X2 as cpu clock source.
|
// * Switch to XTAL_X2 as cpu clock source.
|
||||||
* On ESP32H4, XTAL_X2 frequency is 64MHz.
|
// * On ESP32H4, XTAL_X2 frequency is 64MHz.
|
||||||
* XTAL_X2 circuit must already been enabled.
|
// * XTAL_X2 circuit must already been enabled.
|
||||||
*/
|
// */
|
||||||
static void rtc_clk_cpu_freq_to_xtal_x2(uint32_t cpu_freq_mhz, uint32_t cpu_divider)
|
// static void rtc_clk_cpu_freq_to_xtal_x2(uint32_t cpu_freq_mhz, uint32_t cpu_divider)
|
||||||
{
|
// {
|
||||||
// f_hp_root = 64MHz
|
// // f_hp_root = 64MHz
|
||||||
clk_ll_cpu_set_divider(cpu_divider);
|
// clk_ll_cpu_set_divider(cpu_divider);
|
||||||
// Constraint: f_ahb <= 32MHz
|
// // Constraint: f_ahb <= 32MHz
|
||||||
uint32_t ahb_divider = (cpu_divider == 1) ? 2 : 1;
|
// uint32_t ahb_divider = (cpu_divider == 1) ? 2 : 1;
|
||||||
clk_ll_ahb_set_divider(ahb_divider);
|
// clk_ll_ahb_set_divider(ahb_divider);
|
||||||
clk_ll_cpu_set_src(SOC_CPU_CLK_SRC_XTAL_X2);
|
// clk_ll_cpu_set_src(SOC_CPU_CLK_SRC_XTAL_X2);
|
||||||
clk_ll_bus_update();
|
// clk_ll_bus_update();
|
||||||
esp_rom_set_cpu_ticks_per_us(cpu_freq_mhz);
|
// esp_rom_set_cpu_ticks_per_us(cpu_freq_mhz);
|
||||||
}
|
// }
|
||||||
|
|
||||||
bool rtc_clk_cpu_freq_mhz_to_config(uint32_t freq_mhz, rtc_cpu_freq_config_t *out_config)
|
bool rtc_clk_cpu_freq_mhz_to_config(uint32_t freq_mhz, rtc_cpu_freq_config_t *out_config)
|
||||||
{
|
{
|
||||||
@@ -238,11 +238,11 @@ bool rtc_clk_cpu_freq_mhz_to_config(uint32_t freq_mhz, rtc_cpu_freq_config_t *ou
|
|||||||
source = SOC_CPU_CLK_SRC_PLL;
|
source = SOC_CPU_CLK_SRC_PLL;
|
||||||
source_freq_mhz = CLK_LL_PLL_96M_FREQ_MHZ;
|
source_freq_mhz = CLK_LL_PLL_96M_FREQ_MHZ;
|
||||||
divider = 1;
|
divider = 1;
|
||||||
} else if (freq_mhz == 64) {
|
// } else if (freq_mhz == 64) {
|
||||||
real_freq_mhz = freq_mhz;
|
// real_freq_mhz = freq_mhz;
|
||||||
source = SOC_CPU_CLK_SRC_XTAL_X2;
|
// source = SOC_CPU_CLK_SRC_XTAL_X2;
|
||||||
source_freq_mhz = CLK_LL_PLL_64M_FREQ_MHZ;
|
// source_freq_mhz = CLK_LL_PLL_64M_FREQ_MHZ;
|
||||||
divider = 1;
|
// divider = 1;
|
||||||
} else if (freq_mhz == 48) {
|
} else if (freq_mhz == 48) {
|
||||||
real_freq_mhz = freq_mhz;
|
real_freq_mhz = freq_mhz;
|
||||||
source = SOC_CPU_CLK_SRC_PLL;
|
source = SOC_CPU_CLK_SRC_PLL;
|
||||||
@@ -270,12 +270,12 @@ static void rtc_clk_cpu_src_clk_enable(soc_cpu_clk_src_t new_src, uint32_t new_s
|
|||||||
if (new_src == SOC_CPU_CLK_SRC_PLL) {
|
if (new_src == SOC_CPU_CLK_SRC_PLL) {
|
||||||
rtc_clk_bbpll_enable();
|
rtc_clk_bbpll_enable();
|
||||||
rtc_clk_bbpll_configure(rtc_clk_xtal_freq_get(), new_src_freq_mhz);
|
rtc_clk_bbpll_configure(rtc_clk_xtal_freq_get(), new_src_freq_mhz);
|
||||||
} else if (new_src == SOC_CPU_CLK_SRC_XTAL_X2) {
|
// } else if (new_src == SOC_CPU_CLK_SRC_XTAL_X2) {
|
||||||
#if BOOTLOADER_BUILD
|
// #if BOOTLOADER_BUILD
|
||||||
clk_ll_xtal_x2_enable();
|
// clk_ll_xtal_x2_enable();
|
||||||
#else
|
// #else
|
||||||
esp_clk_tree_enable_power(SOC_ROOT_CIRCUIT_CLK_XTAL_X2, true);
|
// esp_clk_tree_enable_power(SOC_ROOT_CIRCUIT_CLK_XTAL_X2, true);
|
||||||
#endif
|
// #endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -283,12 +283,12 @@ static void rtc_clk_cpu_src_clk_disable(soc_cpu_clk_src_t old_src)
|
|||||||
{
|
{
|
||||||
if ((old_src == SOC_CPU_CLK_SRC_PLL) && !s_bbpll_digi_consumers_ref_count) {
|
if ((old_src == SOC_CPU_CLK_SRC_PLL) && !s_bbpll_digi_consumers_ref_count) {
|
||||||
rtc_clk_bbpll_disable();
|
rtc_clk_bbpll_disable();
|
||||||
} else if (old_src == SOC_CPU_CLK_SRC_XTAL_X2) {
|
// } else if (old_src == SOC_CPU_CLK_SRC_XTAL_X2) {
|
||||||
#if BOOTLOADER_BUILD
|
// #if BOOTLOADER_BUILD
|
||||||
clk_ll_xtal_x2_disable();
|
// clk_ll_xtal_x2_disable();
|
||||||
#else
|
// #else
|
||||||
esp_clk_tree_enable_power(SOC_ROOT_CIRCUIT_CLK_XTAL_X2, false);
|
// esp_clk_tree_enable_power(SOC_ROOT_CIRCUIT_CLK_XTAL_X2, false);
|
||||||
#endif
|
// #endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -308,8 +308,8 @@ void rtc_clk_cpu_freq_set_config(const rtc_cpu_freq_config_t *config)
|
|||||||
rtc_clk_set_cpu_switch_to_bbpll(SLEEP_EVENT_HW_PLL_EN_STOP);
|
rtc_clk_set_cpu_switch_to_bbpll(SLEEP_EVENT_HW_PLL_EN_STOP);
|
||||||
} else if (config->source == SOC_CPU_CLK_SRC_RC_FAST) {
|
} else if (config->source == SOC_CPU_CLK_SRC_RC_FAST) {
|
||||||
rtc_clk_cpu_freq_to_rc_fast();
|
rtc_clk_cpu_freq_to_rc_fast();
|
||||||
} else if (config->source == SOC_CPU_CLK_SRC_XTAL_X2) {
|
// } else if (config->source == SOC_CPU_CLK_SRC_XTAL_X2) {
|
||||||
rtc_clk_cpu_freq_to_xtal_x2(config->freq_mhz, config->div);
|
// rtc_clk_cpu_freq_to_xtal_x2(config->freq_mhz, config->div);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (old_cpu_clk_src != config->source) {
|
if (old_cpu_clk_src != config->source) {
|
||||||
@@ -333,9 +333,9 @@ void rtc_clk_cpu_freq_get_config(rtc_cpu_freq_config_t *out_config)
|
|||||||
case SOC_CPU_CLK_SRC_RC_FAST:
|
case SOC_CPU_CLK_SRC_RC_FAST:
|
||||||
source_freq_mhz = 8;
|
source_freq_mhz = 8;
|
||||||
break;
|
break;
|
||||||
case SOC_CPU_CLK_SRC_XTAL_X2:
|
// case SOC_CPU_CLK_SRC_XTAL_X2:
|
||||||
source_freq_mhz = clk_ll_xtal_x2_get_freq_mhz();
|
// source_freq_mhz = clk_ll_xtal_x2_get_freq_mhz();
|
||||||
break;
|
// break;
|
||||||
default:
|
default:
|
||||||
ESP_HW_LOGE(TAG, "unsupported frequency configuration");
|
ESP_HW_LOGE(TAG, "unsupported frequency configuration");
|
||||||
abort();
|
abort();
|
||||||
@@ -359,9 +359,9 @@ void rtc_clk_cpu_freq_set_config_fast(const rtc_cpu_freq_config_t *config)
|
|||||||
rtc_clk_cpu_freq_to_pll_mhz(config->freq_mhz);
|
rtc_clk_cpu_freq_to_pll_mhz(config->freq_mhz);
|
||||||
} else if (config->source == SOC_CPU_CLK_SRC_RC_FAST) {
|
} else if (config->source == SOC_CPU_CLK_SRC_RC_FAST) {
|
||||||
rtc_clk_cpu_freq_to_rc_fast();
|
rtc_clk_cpu_freq_to_rc_fast();
|
||||||
} else if (config->source == SOC_CPU_CLK_SRC_XTAL_X2
|
// } else if (config->source == SOC_CPU_CLK_SRC_XTAL_X2
|
||||||
&& esp_clk_tree_is_power_on(SOC_ROOT_CIRCUIT_CLK_XTAL_X2)) {
|
// && esp_clk_tree_is_power_on(SOC_ROOT_CIRCUIT_CLK_XTAL_X2)) {
|
||||||
rtc_clk_cpu_freq_to_xtal_x2(config->freq_mhz, config->div);
|
// rtc_clk_cpu_freq_to_xtal_x2(config->freq_mhz, config->div);
|
||||||
} else {
|
} else {
|
||||||
/* fallback */
|
/* fallback */
|
||||||
rtc_clk_cpu_freq_set_config(config);
|
rtc_clk_cpu_freq_set_config(config);
|
||||||
@@ -391,8 +391,8 @@ void rtc_clk_cpu_freq_to_pll_and_pll_lock_release(int cpu_freq_mhz)
|
|||||||
{
|
{
|
||||||
if (cpu_freq_mhz == 96 || cpu_freq_mhz == 48) {
|
if (cpu_freq_mhz == 96 || cpu_freq_mhz == 48) {
|
||||||
rtc_clk_cpu_freq_to_pll_mhz(cpu_freq_mhz);
|
rtc_clk_cpu_freq_to_pll_mhz(cpu_freq_mhz);
|
||||||
} else { // cpu_freq_mhz == 64
|
// } else { // cpu_freq_mhz == 64
|
||||||
rtc_clk_cpu_freq_to_xtal_x2(cpu_freq_mhz, 1);
|
// rtc_clk_cpu_freq_to_xtal_x2(cpu_freq_mhz, 1);
|
||||||
}
|
}
|
||||||
clk_ll_cpu_clk_src_lock_release();
|
clk_ll_cpu_clk_src_lock_release();
|
||||||
}
|
}
|
||||||
@@ -420,9 +420,9 @@ static uint32_t rtc_clk_ahb_freq_get(void)
|
|||||||
case SOC_CPU_CLK_SRC_RC_FAST:
|
case SOC_CPU_CLK_SRC_RC_FAST:
|
||||||
soc_root_freq_mhz = 8;
|
soc_root_freq_mhz = 8;
|
||||||
break;
|
break;
|
||||||
case SOC_CPU_CLK_SRC_XTAL_X2:
|
// case SOC_CPU_CLK_SRC_XTAL_X2:
|
||||||
soc_root_freq_mhz = clk_ll_xtal_x2_get_freq_mhz();
|
// soc_root_freq_mhz = clk_ll_xtal_x2_get_freq_mhz();
|
||||||
break;
|
// break;
|
||||||
default:
|
default:
|
||||||
// Unknown SOC_ROOT clock source
|
// Unknown SOC_ROOT clock source
|
||||||
soc_root_freq_mhz = 0;
|
soc_root_freq_mhz = 0;
|
||||||
|
@@ -11,8 +11,9 @@ choice ESP_DEFAULT_CPU_FREQ_MHZ
|
|||||||
config ESP_DEFAULT_CPU_FREQ_MHZ_48
|
config ESP_DEFAULT_CPU_FREQ_MHZ_48
|
||||||
bool "48 MHz"
|
bool "48 MHz"
|
||||||
depends on !IDF_ENV_FPGA
|
depends on !IDF_ENV_FPGA
|
||||||
config ESP_DEFAULT_CPU_FREQ_MHZ_64
|
#config ESP_DEFAULT_CPU_FREQ_MHZ_64
|
||||||
bool "64 MHz"
|
# bool "64 MHz"
|
||||||
|
# depends on !IDF_ENV_FPGA
|
||||||
config ESP_DEFAULT_CPU_FREQ_MHZ_96
|
config ESP_DEFAULT_CPU_FREQ_MHZ_96
|
||||||
bool "96 MHz"
|
bool "96 MHz"
|
||||||
depends on !IDF_ENV_FPGA
|
depends on !IDF_ENV_FPGA
|
||||||
@@ -22,5 +23,5 @@ config ESP_DEFAULT_CPU_FREQ_MHZ
|
|||||||
int
|
int
|
||||||
default 32 if ESP_DEFAULT_CPU_FREQ_MHZ_32
|
default 32 if ESP_DEFAULT_CPU_FREQ_MHZ_32
|
||||||
default 48 if ESP_DEFAULT_CPU_FREQ_MHZ_48
|
default 48 if ESP_DEFAULT_CPU_FREQ_MHZ_48
|
||||||
default 64 if ESP_DEFAULT_CPU_FREQ_MHZ_64
|
#default 64 if ESP_DEFAULT_CPU_FREQ_MHZ_64
|
||||||
default 96 if ESP_DEFAULT_CPU_FREQ_MHZ_96
|
default 96 if ESP_DEFAULT_CPU_FREQ_MHZ_96
|
||||||
|
@@ -11,9 +11,9 @@ choice ESP_DEFAULT_CPU_FREQ_MHZ
|
|||||||
config ESP_DEFAULT_CPU_FREQ_MHZ_48
|
config ESP_DEFAULT_CPU_FREQ_MHZ_48
|
||||||
bool "48 MHz"
|
bool "48 MHz"
|
||||||
depends on !IDF_ENV_FPGA
|
depends on !IDF_ENV_FPGA
|
||||||
config ESP_DEFAULT_CPU_FREQ_MHZ_64
|
#config ESP_DEFAULT_CPU_FREQ_MHZ_64
|
||||||
bool "64 MHz"
|
# bool "64 MHz"
|
||||||
depends on !IDF_ENV_FPGA
|
# depends on !IDF_ENV_FPGA
|
||||||
config ESP_DEFAULT_CPU_FREQ_MHZ_96
|
config ESP_DEFAULT_CPU_FREQ_MHZ_96
|
||||||
bool "96 MHz"
|
bool "96 MHz"
|
||||||
depends on !IDF_ENV_FPGA
|
depends on !IDF_ENV_FPGA
|
||||||
@@ -23,5 +23,5 @@ config ESP_DEFAULT_CPU_FREQ_MHZ
|
|||||||
int
|
int
|
||||||
default 32 if ESP_DEFAULT_CPU_FREQ_MHZ_32
|
default 32 if ESP_DEFAULT_CPU_FREQ_MHZ_32
|
||||||
default 48 if ESP_DEFAULT_CPU_FREQ_MHZ_48
|
default 48 if ESP_DEFAULT_CPU_FREQ_MHZ_48
|
||||||
default 64 if ESP_DEFAULT_CPU_FREQ_MHZ_64
|
#default 64 if ESP_DEFAULT_CPU_FREQ_MHZ_64
|
||||||
default 96 if ESP_DEFAULT_CPU_FREQ_MHZ_96
|
default 96 if ESP_DEFAULT_CPU_FREQ_MHZ_96
|
||||||
|
@@ -17,8 +17,8 @@ uint32_t clk_hal_soc_root_get_freq_mhz(soc_cpu_clk_src_t cpu_clk_src)
|
|||||||
return clk_ll_bbpll_get_freq_mhz();
|
return clk_ll_bbpll_get_freq_mhz();
|
||||||
case SOC_CPU_CLK_SRC_RC_FAST:
|
case SOC_CPU_CLK_SRC_RC_FAST:
|
||||||
return SOC_CLK_RC_FAST_FREQ_APPROX / MHZ;
|
return SOC_CLK_RC_FAST_FREQ_APPROX / MHZ;
|
||||||
case SOC_CPU_CLK_SRC_XTAL_X2:
|
// case SOC_CPU_CLK_SRC_XTAL_X2:
|
||||||
return clk_ll_xtal_x2_get_freq_mhz();
|
// return clk_ll_xtal_x2_get_freq_mhz();
|
||||||
default:
|
default:
|
||||||
// Unknown CPU_CLK mux input
|
// Unknown CPU_CLK mux input
|
||||||
HAL_ASSERT(false);
|
HAL_ASSERT(false);
|
||||||
|
@@ -27,7 +27,7 @@ extern "C" {
|
|||||||
#define MHZ (1000000)
|
#define MHZ (1000000)
|
||||||
|
|
||||||
#define CLK_LL_PLL_48M_FREQ_MHZ (48)
|
#define CLK_LL_PLL_48M_FREQ_MHZ (48)
|
||||||
#define CLK_LL_PLL_64M_FREQ_MHZ (64)
|
// #define CLK_LL_PLL_64M_FREQ_MHZ (64)
|
||||||
#define CLK_LL_PLL_96M_FREQ_MHZ (96)
|
#define CLK_LL_PLL_96M_FREQ_MHZ (96)
|
||||||
|
|
||||||
#define CLK_LL_XTAL32K_CONFIG_DEFAULT() { \
|
#define CLK_LL_XTAL32K_CONFIG_DEFAULT() { \
|
||||||
@@ -79,26 +79,26 @@ static inline __attribute__((always_inline)) void clk_ll_bbpll_disable(void)
|
|||||||
SET_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_LOW_GLOBAL_BBPLL_ICG);
|
SET_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_LOW_GLOBAL_BBPLL_ICG);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* @brief Power up XTAL_X2 circuit
|
// * @brief Power up XTAL_X2 circuit
|
||||||
*/
|
// */
|
||||||
static inline __attribute__((always_inline)) void clk_ll_xtal_x2_enable(void)
|
// static inline __attribute__((always_inline)) void clk_ll_xtal_x2_enable(void)
|
||||||
{
|
// {
|
||||||
CLEAR_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_LOW_XPD_XTALX2);
|
// CLEAR_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_LOW_XPD_XTALX2);
|
||||||
CLEAR_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_LOW_GLOBAL_XTALX2_ICG);
|
// CLEAR_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_LOW_GLOBAL_XTALX2_ICG);
|
||||||
SET_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_HIGH_XTALX2);
|
// SET_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_HIGH_XTALX2);
|
||||||
SET_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_HIGH_GLOBAL_XTALX2_ICG);
|
// SET_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_HIGH_GLOBAL_XTALX2_ICG);
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* @brief Power down XTAL_X2 circuit
|
// * @brief Power down XTAL_X2 circuit
|
||||||
*/
|
// */
|
||||||
static inline __attribute__((always_inline)) void clk_ll_xtal_x2_disable(void)
|
// static inline __attribute__((always_inline)) void clk_ll_xtal_x2_disable(void)
|
||||||
{
|
// {
|
||||||
CLEAR_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_HIGH_XTALX2 | PMU_TIE_HIGH_GLOBAL_XTALX2_ICG);
|
// CLEAR_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_HIGH_XTALX2 | PMU_TIE_HIGH_GLOBAL_XTALX2_ICG);
|
||||||
SET_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_LOW_XPD_XTALX2);
|
// SET_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_LOW_XPD_XTALX2);
|
||||||
SET_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_LOW_GLOBAL_XTALX2_ICG);
|
// SET_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_LOW_GLOBAL_XTALX2_ICG);
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enable the 32kHz crystal oscillator
|
* @brief Enable the 32kHz crystal oscillator
|
||||||
@@ -277,15 +277,15 @@ static inline __attribute__((always_inline)) void clk_ll_bbpll_set_config(uint32
|
|||||||
REGI2C_WRITE_MASK(I2C_BBPLL, I2C_BBPLL_OC_DLREF_SEL, oc_dlref_sel);
|
REGI2C_WRITE_MASK(I2C_BBPLL, I2C_BBPLL_OC_DLREF_SEL, oc_dlref_sel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* @brief Get XTAL_X2_CLK frequency
|
// * @brief Get XTAL_X2_CLK frequency
|
||||||
*
|
// *
|
||||||
* @return XTAL_X2 clock frequency, in MHz
|
// * @return XTAL_X2 clock frequency, in MHz
|
||||||
*/
|
// */
|
||||||
static inline __attribute__((always_inline)) uint32_t clk_ll_xtal_x2_get_freq_mhz(void)
|
// static inline __attribute__((always_inline)) uint32_t clk_ll_xtal_x2_get_freq_mhz(void)
|
||||||
{
|
// {
|
||||||
return SOC_XTAL_FREQ_32M * 2;
|
// return SOC_XTAL_FREQ_32M * 2;
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief To enable the change of soc_clk_sel, cpu_div_num, and ahb_div_num
|
* @brief To enable the change of soc_clk_sel, cpu_div_num, and ahb_div_num
|
||||||
@@ -313,9 +313,9 @@ static inline __attribute__((always_inline)) void clk_ll_cpu_set_src(soc_cpu_clk
|
|||||||
case SOC_CPU_CLK_SRC_RC_FAST:
|
case SOC_CPU_CLK_SRC_RC_FAST:
|
||||||
PCR.sysclk_conf.soc_clk_sel = 2;
|
PCR.sysclk_conf.soc_clk_sel = 2;
|
||||||
break;
|
break;
|
||||||
case SOC_CPU_CLK_SRC_XTAL_X2:
|
// case SOC_CPU_CLK_SRC_XTAL_X2:
|
||||||
PCR.sysclk_conf.soc_clk_sel = 3;
|
// PCR.sysclk_conf.soc_clk_sel = 3;
|
||||||
break;
|
// break;
|
||||||
default:
|
default:
|
||||||
// Unsupported CPU_CLK mux input sel
|
// Unsupported CPU_CLK mux input sel
|
||||||
abort();
|
abort();
|
||||||
@@ -337,8 +337,8 @@ static inline __attribute__((always_inline)) soc_cpu_clk_src_t clk_ll_cpu_get_sr
|
|||||||
return SOC_CPU_CLK_SRC_PLL;
|
return SOC_CPU_CLK_SRC_PLL;
|
||||||
case 2:
|
case 2:
|
||||||
return SOC_CPU_CLK_SRC_RC_FAST;
|
return SOC_CPU_CLK_SRC_RC_FAST;
|
||||||
case 3:
|
// case 3:
|
||||||
return SOC_CPU_CLK_SRC_XTAL_X2;
|
// return SOC_CPU_CLK_SRC_XTAL_X2;
|
||||||
default:
|
default:
|
||||||
// Invalid SOC_CLK_SEL value
|
// Invalid SOC_CLK_SEL value
|
||||||
return SOC_CPU_CLK_SRC_INVALID;
|
return SOC_CPU_CLK_SRC_INVALID;
|
||||||
|
@@ -51,9 +51,9 @@ static inline void _mspi_timing_ll_set_flash_clk_src(uint32_t mspi_id, soc_perip
|
|||||||
case FLASH_CLK_SRC_RC_FAST:
|
case FLASH_CLK_SRC_RC_FAST:
|
||||||
PCR.mspi_conf.mspi_clk_sel = 1;
|
PCR.mspi_conf.mspi_clk_sel = 1;
|
||||||
break;
|
break;
|
||||||
case FLASH_CLK_SRC_PLL_F64M:
|
// case FLASH_CLK_SRC_PLL_F64M:
|
||||||
PCR.mspi_conf.mspi_clk_sel = 2;
|
// PCR.mspi_conf.mspi_clk_sel = 2;
|
||||||
break;
|
// break;
|
||||||
case FLASH_CLK_SRC_PLL_F48M:
|
case FLASH_CLK_SRC_PLL_F48M:
|
||||||
PCR.mspi_conf.mspi_clk_sel = 3;
|
PCR.mspi_conf.mspi_clk_sel = 3;
|
||||||
break;
|
break;
|
||||||
|
@@ -17,8 +17,8 @@ uint32_t clk_hal_soc_root_get_freq_mhz(soc_cpu_clk_src_t cpu_clk_src)
|
|||||||
return clk_ll_bbpll_get_freq_mhz();
|
return clk_ll_bbpll_get_freq_mhz();
|
||||||
case SOC_CPU_CLK_SRC_RC_FAST:
|
case SOC_CPU_CLK_SRC_RC_FAST:
|
||||||
return SOC_CLK_RC_FAST_FREQ_APPROX / MHZ;
|
return SOC_CLK_RC_FAST_FREQ_APPROX / MHZ;
|
||||||
case SOC_CPU_CLK_SRC_XTAL_X2:
|
// case SOC_CPU_CLK_SRC_XTAL_X2:
|
||||||
return clk_ll_xtal_x2_get_freq_mhz();
|
// return clk_ll_xtal_x2_get_freq_mhz();
|
||||||
default:
|
default:
|
||||||
// Unknown CPU_CLK mux input
|
// Unknown CPU_CLK mux input
|
||||||
HAL_ASSERT(false);
|
HAL_ASSERT(false);
|
||||||
|
@@ -26,9 +26,9 @@ extern "C" {
|
|||||||
#define MHZ (1000000)
|
#define MHZ (1000000)
|
||||||
|
|
||||||
#define CLK_LL_PLL_8M_FREQ_MHZ (8)
|
#define CLK_LL_PLL_8M_FREQ_MHZ (8)
|
||||||
#define CLK_LL_PLL_32M_FREQ_MHZ (32)
|
// #define CLK_LL_PLL_32M_FREQ_MHZ (32)
|
||||||
#define CLK_LL_PLL_48M_FREQ_MHZ (48)
|
#define CLK_LL_PLL_48M_FREQ_MHZ (48)
|
||||||
#define CLK_LL_PLL_64M_FREQ_MHZ (64)
|
// #define CLK_LL_PLL_64M_FREQ_MHZ (64)
|
||||||
#define CLK_LL_PLL_96M_FREQ_MHZ (96)
|
#define CLK_LL_PLL_96M_FREQ_MHZ (96)
|
||||||
|
|
||||||
#define CLK_LL_XTAL32K_CONFIG_DEFAULT() { \
|
#define CLK_LL_XTAL32K_CONFIG_DEFAULT() { \
|
||||||
@@ -83,26 +83,26 @@ static inline __attribute__((always_inline)) void clk_ll_cpu_clk_src_lock_releas
|
|||||||
SET_PERI_REG_MASK(PMU_IMM_SLEEP_SYSCLK_REG, PMU_UPDATE_DIG_SYS_CLK_SEL);
|
SET_PERI_REG_MASK(PMU_IMM_SLEEP_SYSCLK_REG, PMU_UPDATE_DIG_SYS_CLK_SEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* @brief Power up XTAL_X2 circuit
|
// * @brief Power up XTAL_X2 circuit
|
||||||
*/
|
// */
|
||||||
static inline __attribute__((always_inline)) void clk_ll_xtal_x2_enable(void)
|
// static inline __attribute__((always_inline)) void clk_ll_xtal_x2_enable(void)
|
||||||
{
|
// {
|
||||||
CLEAR_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_LOW_XPD_XTALX2);
|
// CLEAR_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_LOW_XPD_XTALX2);
|
||||||
CLEAR_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_LOW_GLOBAL_XTALX2_ICG);
|
// CLEAR_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_LOW_GLOBAL_XTALX2_ICG);
|
||||||
SET_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_HIGH_XTALX2);
|
// SET_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_HIGH_XTALX2);
|
||||||
SET_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_HIGH_GLOBAL_XTALX2_ICG);
|
// SET_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_HIGH_GLOBAL_XTALX2_ICG);
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* @brief Power down XTAL_X2 circuit
|
// * @brief Power down XTAL_X2 circuit
|
||||||
*/
|
// */
|
||||||
static inline __attribute__((always_inline)) void clk_ll_xtal_x2_disable(void)
|
// static inline __attribute__((always_inline)) void clk_ll_xtal_x2_disable(void)
|
||||||
{
|
// {
|
||||||
CLEAR_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_HIGH_XTALX2 | PMU_TIE_HIGH_GLOBAL_XTALX2_ICG);
|
// CLEAR_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_HIGH_XTALX2 | PMU_TIE_HIGH_GLOBAL_XTALX2_ICG);
|
||||||
SET_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_LOW_XPD_XTALX2);
|
// SET_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_LOW_XPD_XTALX2);
|
||||||
SET_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_LOW_GLOBAL_XTALX2_ICG);
|
// SET_PERI_REG_MASK(PMU_IMM_HP_CK_POWER_REG, PMU_TIE_LOW_GLOBAL_XTALX2_ICG);
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Enable the 32kHz crystal oscillator
|
* @brief Enable the 32kHz crystal oscillator
|
||||||
@@ -281,15 +281,15 @@ static inline __attribute__((always_inline)) void clk_ll_bbpll_set_config(uint32
|
|||||||
REGI2C_WRITE_MASK(I2C_BBPLL, I2C_BBPLL_OC_DLREF_SEL, oc_dlref_sel);
|
REGI2C_WRITE_MASK(I2C_BBPLL, I2C_BBPLL_OC_DLREF_SEL, oc_dlref_sel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* @brief Get XTAL_X2_CLK frequency
|
// * @brief Get XTAL_X2_CLK frequency
|
||||||
*
|
// *
|
||||||
* @return XTAL_X2 clock frequency, in MHz
|
// * @return XTAL_X2 clock frequency, in MHz
|
||||||
*/
|
// */
|
||||||
static inline __attribute__((always_inline)) uint32_t clk_ll_xtal_x2_get_freq_mhz(void)
|
// static inline __attribute__((always_inline)) uint32_t clk_ll_xtal_x2_get_freq_mhz(void)
|
||||||
{
|
// {
|
||||||
return SOC_XTAL_FREQ_32M * 2;
|
// return SOC_XTAL_FREQ_32M * 2;
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief To enable the change of soc_clk_sel, cpu_div_num, ahb_div_num, apb_div_num
|
* @brief To enable the change of soc_clk_sel, cpu_div_num, ahb_div_num, apb_div_num
|
||||||
@@ -316,9 +316,9 @@ static inline __attribute__((always_inline)) void clk_ll_cpu_set_src(soc_cpu_clk
|
|||||||
case SOC_CPU_CLK_SRC_RC_FAST:
|
case SOC_CPU_CLK_SRC_RC_FAST:
|
||||||
PCR.sysclk_conf.soc_clk_sel = 1;
|
PCR.sysclk_conf.soc_clk_sel = 1;
|
||||||
break;
|
break;
|
||||||
case SOC_CPU_CLK_SRC_XTAL_X2:
|
// case SOC_CPU_CLK_SRC_XTAL_X2:
|
||||||
PCR.sysclk_conf.soc_clk_sel = 2;
|
// PCR.sysclk_conf.soc_clk_sel = 2;
|
||||||
break;
|
// break;
|
||||||
case SOC_CPU_CLK_SRC_PLL:
|
case SOC_CPU_CLK_SRC_PLL:
|
||||||
PCR.sysclk_conf.soc_clk_sel = 3;
|
PCR.sysclk_conf.soc_clk_sel = 3;
|
||||||
break;
|
break;
|
||||||
@@ -341,8 +341,8 @@ static inline __attribute__((always_inline)) soc_cpu_clk_src_t clk_ll_cpu_get_sr
|
|||||||
return SOC_CPU_CLK_SRC_XTAL;
|
return SOC_CPU_CLK_SRC_XTAL;
|
||||||
case 1:
|
case 1:
|
||||||
return SOC_CPU_CLK_SRC_RC_FAST;
|
return SOC_CPU_CLK_SRC_RC_FAST;
|
||||||
case 2:
|
// case 2:
|
||||||
return SOC_CPU_CLK_SRC_XTAL_X2;
|
// return SOC_CPU_CLK_SRC_XTAL_X2;
|
||||||
case 3:
|
case 3:
|
||||||
return SOC_CPU_CLK_SRC_PLL;
|
return SOC_CPU_CLK_SRC_PLL;
|
||||||
default:
|
default:
|
||||||
|
@@ -68,7 +68,7 @@ typedef enum {
|
|||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SOC_ROOT_CIRCUIT_CLK_BBPLL, /*!< BBPLL_CLK is the output of the PLL generator circuit */
|
SOC_ROOT_CIRCUIT_CLK_BBPLL, /*!< BBPLL_CLK is the output of the PLL generator circuit */
|
||||||
SOC_ROOT_CIRCUIT_CLK_XTAL_X2, /*!< XTAL_X2_CLK is the output of the XTAL_X2 generator circuit */
|
// SOC_ROOT_CIRCUIT_CLK_XTAL_X2, /*!< XTAL_X2_CLK is the output of the XTAL_X2 generator circuit */
|
||||||
} soc_root_clk_circuit_t;
|
} soc_root_clk_circuit_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -79,7 +79,7 @@ typedef enum {
|
|||||||
SOC_CPU_CLK_SRC_XTAL = 0, /*!< Select XTAL_CLK as CPU_CLK source */
|
SOC_CPU_CLK_SRC_XTAL = 0, /*!< Select XTAL_CLK as CPU_CLK source */
|
||||||
SOC_CPU_CLK_SRC_PLL = 1, /*!< Select PLL_CLK as CPU_CLK source (PLL_CLK is one of the outputs of 32MHz crystal oscillator frequency multiplier, 96MHz) */
|
SOC_CPU_CLK_SRC_PLL = 1, /*!< Select PLL_CLK as CPU_CLK source (PLL_CLK is one of the outputs of 32MHz crystal oscillator frequency multiplier, 96MHz) */
|
||||||
SOC_CPU_CLK_SRC_RC_FAST = 2, /*!< Select RC_FAST_CLK as CPU_CLK source */
|
SOC_CPU_CLK_SRC_RC_FAST = 2, /*!< Select RC_FAST_CLK as CPU_CLK source */
|
||||||
SOC_CPU_CLK_SRC_XTAL_X2 = 3, /*!< Select XTAL_X2_CLK as CPU_CLK source (XTAL_X2_CLK is the other output of 32MHz crystal oscillator frequency multiplier, 64MHz) */
|
// SOC_CPU_CLK_SRC_XTAL_X2 = 3, /*!< Select XTAL_X2_CLK as CPU_CLK source (XTAL_X2_CLK is the other output of 32MHz crystal oscillator frequency multiplier, 64MHz) */
|
||||||
SOC_CPU_CLK_SRC_INVALID, /*!< Invalid CPU_CLK source */
|
SOC_CPU_CLK_SRC_INVALID, /*!< Invalid CPU_CLK source */
|
||||||
} soc_cpu_clk_src_t;
|
} soc_cpu_clk_src_t;
|
||||||
|
|
||||||
@@ -134,7 +134,7 @@ typedef enum {
|
|||||||
SOC_MOD_CLK_RTC_SLOW, /*!< RTC_SLOW_CLK can be sourced from RC_SLOW, XTAL32K, OSC_SLOW, or RC32K by configuring soc_rtc_slow_clk_src_t */
|
SOC_MOD_CLK_RTC_SLOW, /*!< RTC_SLOW_CLK can be sourced from RC_SLOW, XTAL32K, OSC_SLOW, or RC32K by configuring soc_rtc_slow_clk_src_t */
|
||||||
// For digital domain: peripherals, BLE
|
// For digital domain: peripherals, BLE
|
||||||
SOC_MOD_CLK_PLL_F48M, /*!< PLL_F48M_CLK is derived from PLL (clock gating + fixed divider of 2), it has a fixed frequency of 48MHz */
|
SOC_MOD_CLK_PLL_F48M, /*!< PLL_F48M_CLK is derived from PLL (clock gating + fixed divider of 2), it has a fixed frequency of 48MHz */
|
||||||
SOC_MOD_CLK_XTAL_X2_F64M, /*!< XTAL_X2_F64M_CLK is derived from XTAL_X2 (clock gating), it has a fixed frequency of 64MHz */
|
// SOC_MOD_CLK_XTAL_X2_F64M, /*!< XTAL_X2_F64M_CLK is derived from XTAL_X2 (clock gating), it has a fixed frequency of 64MHz */
|
||||||
SOC_MOD_CLK_PLL_F96M, /*!< PLL_F96M_CLK is derived from PLL (clock gating), it has a fixed frequency of 96MHz */
|
SOC_MOD_CLK_PLL_F96M, /*!< PLL_F96M_CLK is derived from PLL (clock gating), it has a fixed frequency of 96MHz */
|
||||||
SOC_MOD_CLK_XTAL32K, /*!< XTAL32K_CLK comes from the external 32kHz crystal, passing a clock gating to the peripherals */
|
SOC_MOD_CLK_XTAL32K, /*!< XTAL32K_CLK comes from the external 32kHz crystal, passing a clock gating to the peripherals */
|
||||||
SOC_MOD_CLK_RC_FAST, /*!< RC_FAST_CLK comes from the internal 20MHz rc oscillator, passing a clock gating to the peripherals */
|
SOC_MOD_CLK_RC_FAST, /*!< RC_FAST_CLK comes from the internal 20MHz rc oscillator, passing a clock gating to the peripherals */
|
||||||
@@ -301,16 +301,16 @@ typedef enum {
|
|||||||
/**
|
/**
|
||||||
* @brief Array initializer for all supported clock sources of FLASH MSPI controller
|
* @brief Array initializer for all supported clock sources of FLASH MSPI controller
|
||||||
*/
|
*/
|
||||||
#define SOC_FLASH_CLKS {SOC_MOD_CLK_XTAL, SOC_MOD_CLK_RC_FAST, SOC_MOD_CLK_XTAL_X2_F64M, SOC_MOD_CLK_PLL_F48M}
|
#define SOC_FLASH_CLKS {SOC_MOD_CLK_XTAL, SOC_MOD_CLK_RC_FAST, SOC_MOD_CLK_PLL_F48M}
|
||||||
/**
|
/**
|
||||||
* @brief FLASH MSPI controller clock source
|
* @brief FLASH MSPI controller clock source
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FLASH_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL, /*!< Select XTAL as the source clock */
|
FLASH_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL, /*!< Select XTAL as the source clock */
|
||||||
FLASH_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST, /*!< Select RC_FAST as the source clock */
|
FLASH_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST, /*!< Select RC_FAST as the source clock */
|
||||||
FLASH_CLK_SRC_PLL_F64M = SOC_MOD_CLK_XTAL_X2_F64M, /*!< Select PLL_F64M as the source clock */
|
// FLASH_CLK_SRC_PLL_F64M = SOC_MOD_CLK_XTAL_X2_F64M, /*!< Select PLL_F64M as the source clock */
|
||||||
FLASH_CLK_SRC_PLL_F48M = SOC_MOD_CLK_PLL_F48M, /*!< Select PLL_F48M as the source clock */
|
FLASH_CLK_SRC_PLL_F48M = SOC_MOD_CLK_PLL_F48M, /*!< Select PLL_F48M as the source clock */
|
||||||
FLASH_CLK_SRC_DEFAULT = SOC_MOD_CLK_XTAL_X2_F64M, /*!< Select PLL_F64M as the default clock choice */
|
FLASH_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F48M, /*!< Select PLL_F48M as the default clock choice */
|
||||||
FLASH_CLK_SRC_ROM_DEFAULT = SOC_MOD_CLK_XTAL, /*!< Select XTAL as ROM default clock source */
|
FLASH_CLK_SRC_ROM_DEFAULT = SOC_MOD_CLK_XTAL, /*!< Select XTAL as ROM default clock source */
|
||||||
} soc_periph_flash_clk_src_t;
|
} soc_periph_flash_clk_src_t;
|
||||||
|
|
||||||
|
@@ -68,7 +68,7 @@ typedef enum {
|
|||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SOC_ROOT_CIRCUIT_CLK_BBPLL, /*!< BBPLL_CLK is the output of the PLL generator circuit */
|
SOC_ROOT_CIRCUIT_CLK_BBPLL, /*!< BBPLL_CLK is the output of the PLL generator circuit */
|
||||||
SOC_ROOT_CIRCUIT_CLK_XTAL_X2, /*!< XTAL_X2_CLK is the output of the XTAL_X2 generator circuit */
|
// SOC_ROOT_CIRCUIT_CLK_XTAL_X2, /*!< XTAL_X2_CLK is the output of the XTAL_X2 generator circuit */
|
||||||
} soc_root_clk_circuit_t;
|
} soc_root_clk_circuit_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -78,7 +78,7 @@ typedef enum {
|
|||||||
typedef enum {
|
typedef enum {
|
||||||
SOC_CPU_CLK_SRC_XTAL = 0, /*!< Select XTAL_CLK as CPU_CLK source */
|
SOC_CPU_CLK_SRC_XTAL = 0, /*!< Select XTAL_CLK as CPU_CLK source */
|
||||||
SOC_CPU_CLK_SRC_RC_FAST = 1, /*!< Select RC_FAST_CLK as CPU_CLK source */
|
SOC_CPU_CLK_SRC_RC_FAST = 1, /*!< Select RC_FAST_CLK as CPU_CLK source */
|
||||||
SOC_CPU_CLK_SRC_XTAL_X2 = 2, /*!< Select XTAL_X2_CLK as CPU_CLK source (XTAL_X2_CLK is the other output of 32MHz crystal oscillator frequency multiplier, 64MHz) */
|
// SOC_CPU_CLK_SRC_XTAL_X2 = 2, /*!< Select XTAL_X2_CLK as CPU_CLK source (XTAL_X2_CLK is the other output of 32MHz crystal oscillator frequency multiplier, 64MHz) */
|
||||||
SOC_CPU_CLK_SRC_PLL = 3, /*!< Select PLL_CLK as CPU_CLK source (PLL_CLK is the output of 32MHz crystal oscillator frequency multiplier, 96MHz) */
|
SOC_CPU_CLK_SRC_PLL = 3, /*!< Select PLL_CLK as CPU_CLK source (PLL_CLK is the output of 32MHz crystal oscillator frequency multiplier, 96MHz) */
|
||||||
SOC_CPU_CLK_SRC_INVALID, /*!< Invalid CPU_CLK source */
|
SOC_CPU_CLK_SRC_INVALID, /*!< Invalid CPU_CLK source */
|
||||||
} soc_cpu_clk_src_t;
|
} soc_cpu_clk_src_t;
|
||||||
@@ -134,9 +134,9 @@ typedef enum {
|
|||||||
SOC_MOD_CLK_RTC_FAST, /*!< RTC_FAST_CLK can be sourced from XTAL_D2 or RC_FAST by configuring soc_rtc_fast_clk_src_t */
|
SOC_MOD_CLK_RTC_FAST, /*!< RTC_FAST_CLK can be sourced from XTAL_D2 or RC_FAST by configuring soc_rtc_fast_clk_src_t */
|
||||||
SOC_MOD_CLK_RTC_SLOW, /*!< RTC_SLOW_CLK can be sourced from RC_SLOW_D4, XTAL32K, or OSC_SLOW by configuring soc_rtc_slow_clk_src_t */
|
SOC_MOD_CLK_RTC_SLOW, /*!< RTC_SLOW_CLK can be sourced from RC_SLOW_D4, XTAL32K, or OSC_SLOW by configuring soc_rtc_slow_clk_src_t */
|
||||||
// For digital domain: peripherals, BLE
|
// For digital domain: peripherals, BLE
|
||||||
SOC_MOD_CLK_XTAL_X2_F32M, /*!< XTAL_X2_F32M_CLK is derived from XTAL_X2 (clock gating + fixed divider of 2), it has a fixed frequency of 32MHz */
|
// SOC_MOD_CLK_XTAL_X2_F32M, /*!< XTAL_X2_F32M_CLK is derived from XTAL_X2 (clock gating + fixed divider of 2), it has a fixed frequency of 32MHz */
|
||||||
SOC_MOD_CLK_PLL_F48M, /*!< PLL_F48M_CLK is derived from PLL (clock gating + fixed divider of 2), it has a fixed frequency of 48MHz */
|
SOC_MOD_CLK_PLL_F48M, /*!< PLL_F48M_CLK is derived from PLL (clock gating + fixed divider of 2), it has a fixed frequency of 48MHz */
|
||||||
SOC_MOD_CLK_XTAL_X2_F64M, /*!< XTAL_X2_F64M_CLK is derived from XTAL_X2 (clock gating), it has a fixed frequency of 64MHz */
|
// SOC_MOD_CLK_XTAL_X2_F64M, /*!< XTAL_X2_F64M_CLK is derived from XTAL_X2 (clock gating), it has a fixed frequency of 64MHz */
|
||||||
SOC_MOD_CLK_PLL_F96M, /*!< PLL_F96M_CLK is derived from PLL (clock gating), it has a fixed frequency of 96MHz */
|
SOC_MOD_CLK_PLL_F96M, /*!< PLL_F96M_CLK is derived from PLL (clock gating), it has a fixed frequency of 96MHz */
|
||||||
SOC_MOD_CLK_XTAL32K, /*!< XTAL32K_CLK comes from the external 32kHz crystal, passing a clock gating to the peripherals */
|
SOC_MOD_CLK_XTAL32K, /*!< XTAL32K_CLK comes from the external 32kHz crystal, passing a clock gating to the peripherals */
|
||||||
SOC_MOD_CLK_RC_FAST, /*!< RC_FAST_CLK comes from the internal 20MHz rc oscillator, passing a clock gating to the peripherals */
|
SOC_MOD_CLK_RC_FAST, /*!< RC_FAST_CLK comes from the internal 20MHz rc oscillator, passing a clock gating to the peripherals */
|
||||||
@@ -256,7 +256,7 @@ typedef enum {
|
|||||||
typedef enum {
|
typedef enum {
|
||||||
FLASH_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL, /*!< Select XTAL as the source clock */
|
FLASH_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL, /*!< Select XTAL as the source clock */
|
||||||
FLASH_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST, /*!< Select RC_FAST as the source clock */
|
FLASH_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST, /*!< Select RC_FAST as the source clock */
|
||||||
FLASH_CLK_SRC_REF_F64M = SOC_MOD_CLK_XTAL_X2_F64M, /*!< Select XTAL_X2_F64M as the source clock */
|
// FLASH_CLK_SRC_REF_F64M = SOC_MOD_CLK_XTAL_X2_F64M, /*!< Select XTAL_X2_F64M as the source clock */
|
||||||
FLASH_CLK_SRC_REF_F48M = SOC_MOD_CLK_PLL_F48M, /*!< Select PLL_F48M as the source clock */
|
FLASH_CLK_SRC_REF_F48M = SOC_MOD_CLK_PLL_F48M, /*!< Select PLL_F48M as the source clock */
|
||||||
FLASH_CLK_SRC_DEFAULT = SOC_MOD_CLK_XTAL, /*!< Select XTAL as the default clock choice */
|
FLASH_CLK_SRC_DEFAULT = SOC_MOD_CLK_XTAL, /*!< Select XTAL as the default clock choice */
|
||||||
FLASH_CLK_SRC_ROM_DEFAULT = SOC_MOD_CLK_XTAL, /*!< Select XTAL as ROM default clock source */
|
FLASH_CLK_SRC_ROM_DEFAULT = SOC_MOD_CLK_XTAL, /*!< Select XTAL as ROM default clock source */
|
||||||
|
Reference in New Issue
Block a user