1 /* 2 * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #pragma once 8 9 #include "esp_err.h" 10 #include "soc/clk_tree_defs.h" 11 12 #ifdef __cplusplus 13 extern "C" { 14 #endif 15 16 /** 17 * @brief Degree of precision of frequency value to be returned by esp_clk_tree_src_get_freq_hz() 18 */ 19 typedef enum { 20 ESP_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 */ 21 ESP_CLK_TREE_SRC_FREQ_PRECISION_APPROX, /*< Get its approxiamte frequency value */ 22 ESP_CLK_TREE_SRC_FREQ_PRECISION_EXACT, /*< Always perform a calibration */ 23 ESP_CLK_TREE_SRC_FREQ_PRECISION_INVALID, /*< Invalid degree of precision */ 24 } esp_clk_tree_src_freq_precision_t; 25 26 /** 27 * @brief Get frequency of module clock source 28 * 29 * @param[in] clk_src Clock source available to modules, in soc_module_clk_t 30 * @param[in] precision Degree of precision, one of esp_clk_tree_src_freq_precision_t values 31 * This arg only applies to the clock sources that their frequencies can vary: 32 * SOC_MOD_CLK_RTC_FAST, SOC_MOD_CLK_RTC_SLOW, SOC_MOD_CLK_RC_FAST, SOC_MOD_CLK_RC_FAST_D256, 33 * SOC_MOD_CLK_XTAL32K 34 * For other clock sources, this field is ignored. 35 * @param[out] freq_value Frequency of the clock source, in Hz 36 * 37 * @return 38 * - ESP_OK Success 39 * - ESP_ERR_INVALID_ARG Parameter error 40 * - ESP_FAIL Calibration failed 41 */ 42 esp_err_t esp_clk_tree_src_get_freq_hz(soc_module_clk_t clk_src, esp_clk_tree_src_freq_precision_t precision, 43 uint32_t *freq_value); 44 45 #ifdef __cplusplus 46 } 47 #endif 48