mirror of
https://github.com/espressif/esp-idf.git
synced 2026-10-03 11:41:23 +03:00
refactor(clk_tree): use general api to enable the clk
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2023-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
@@ -118,6 +118,72 @@ esp_err_t esp_clk_tree_enable_power(soc_root_clk_circuit_t clk_circuit, bool ena
|
||||
*/
|
||||
bool esp_clk_tree_is_power_on(soc_root_clk_circuit_t clk_circuit);
|
||||
|
||||
#if SOC_CLK_APLL_SUPPORTED
|
||||
/**
|
||||
* @brief Enable APLL power if it has not enabled
|
||||
*
|
||||
* @note Do not use this function in applications or drivers, please use `esp_clk_tree_enable_src` instead.
|
||||
*/
|
||||
void esp_clk_tree_apll_acquire(void);
|
||||
|
||||
/**
|
||||
* @brief Shut down APLL power if no peripherals using APLL
|
||||
*
|
||||
* @note Do not use this function in applications or drivers, please use `esp_clk_tree_enable_src` instead.
|
||||
*/
|
||||
void esp_clk_tree_apll_release(void);
|
||||
|
||||
/**
|
||||
* @brief Calculate and set APLL coefficients by given frequency
|
||||
* @note This calculation is based on the inequality:
|
||||
* xtal_freq * (4 + sdm2 + sdm1/256 + sdm0/65536) >= CLK_LL_APLL_MULTIPLIER_MIN_HZ(350 MHz)
|
||||
* It will always calculate the minimum coefficients that can satisfy the inequality above, instead of loop them one by one.
|
||||
* which means more appropriate coefficients are likely to exist.
|
||||
* But this algorithm can meet almost all the cases and the accuracy can be guaranteed as well.
|
||||
* @note The APLL frequency is only allowed to set when there is only one peripheral refer to it.
|
||||
* If APLL is already set by another peripheral, this function will return `ESP_ERR_INVALID_STATE`
|
||||
* and output the current frequency by parameter `real_freq`.
|
||||
*
|
||||
* @param expt_freq Expected APLL frequency (unit: Hz)
|
||||
* @param real_freq APLL real working frequency [output] (unit: Hz)
|
||||
* @return
|
||||
* - ESP_OK: APLL frequency set success
|
||||
* - ESP_ERR_INVALID_ARG: The input expt_freq is out of APLL support range
|
||||
* - ESP_ERR_INVALID_STATE: APLL is referred by more than one peripherals, not allowed to change its frequency now
|
||||
*/
|
||||
esp_err_t esp_clk_tree_apll_freq_set(uint32_t expt_freq_hz, uint32_t *real_freq_hz);
|
||||
#endif // SOC_CLK_APLL_SUPPORTED
|
||||
|
||||
#if SOC_CLK_MPLL_SUPPORTED
|
||||
/**
|
||||
* @brief Enable MPLL power if it has not enabled
|
||||
*
|
||||
* @note Do not use this function in applications or drivers, please use `esp_clk_tree_enable_src` instead.
|
||||
*/
|
||||
esp_err_t esp_clk_tree_mpll_acquire(void);
|
||||
|
||||
/**
|
||||
* @brief Shut down MPLL power if no peripherals using MPLL
|
||||
*
|
||||
* @note Do not use this function in applications or drivers, please use `esp_clk_tree_enable_src` instead.
|
||||
*/
|
||||
void esp_clk_tree_mpll_release(void);
|
||||
|
||||
/**
|
||||
* @brief Configure MPLL frequency
|
||||
* @note The MPLL frequency is only allowed to set when there is only one peripheral refer to it.
|
||||
* If MPLL is already set by another peripheral, this function will return `ESP_ERR_INVALID_STATE`
|
||||
* and output the current frequency by parameter `real_freq`.
|
||||
*
|
||||
* @param expt_freq Expected MPLL frequency (unit: Hz)
|
||||
* @param real_freq MPLL current working frequency [output] (unit: Hz)
|
||||
* @return
|
||||
* - ESP_OK: MPLL frequency set success
|
||||
* - ESP_ERR_INVALID_STATE: MPLL is referred by more than one peripherals, not allowed to change its frequency now
|
||||
*/
|
||||
esp_err_t esp_clk_tree_mpll_freq_set(uint32_t expt_freq_hz, uint32_t *real_freq_hz);
|
||||
#endif // SOC_CLK_MPLL_SUPPORTED
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user