mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
2c9aa4559c
Add basic clk_tree driver and hal implementation.
48 lines
1.6 KiB
C
48 lines
1.6 KiB
C
/*
|
|
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "esp_err.h"
|
|
#include "soc/clk_tree_defs.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @brief Degree of precision of frequency value to be returned by clk_tree_src_get_freq_hz()
|
|
*/
|
|
typedef enum {
|
|
CLK_TREE_SRC_FREQ_PRECISION_CACHED, /*< Get value from the data cached by the driver; If the data is 0, then a calibration will be performed */
|
|
CLK_TREE_SRC_FREQ_PRECISION_APPROX, /*< Get its approxiamte frequency value */
|
|
CLK_TREE_SRC_FREQ_PRECISION_EXACT, /*< Always perform a calibration */
|
|
CLK_TREE_SRC_FREQ_PRECISION_INVALID, /*< Invalid degree of precision */
|
|
} clk_tree_src_freq_precision_t;
|
|
|
|
/**
|
|
* @brief Get frequency of module clock source
|
|
*
|
|
* @param[in] clk_src Clock source available to modules, in soc_module_clk_t
|
|
* @param[in] precision Degree of precision, one of clk_tree_src_freq_precision_t values
|
|
* This arg only applies to the clock sources that their frequencies can vary:
|
|
* SOC_MOD_CLK_RTC_FAST, SOC_MOD_CLK_RTC_SLOW, SOC_MOD_CLK_RC_FAST, SOC_MOD_CLK_RC_FAST_D256,
|
|
* SOC_MOD_CLK_XTAL32K
|
|
* For other clock sources, this field is ignored.
|
|
* @param[out] freq_value Frequency of the clock source, in Hz
|
|
*
|
|
* @return
|
|
* - ESP_OK Success
|
|
* - ESP_ERR_INVALID_ARG Parameter error
|
|
* - ESP_FAIL Calibration failed
|
|
*/
|
|
esp_err_t clk_tree_src_get_freq_hz(soc_module_clk_t clk_src, clk_tree_src_freq_precision_t precision,
|
|
uint32_t *freq_value);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|