mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-10 04:43:33 +00:00
refactor(esp_hw_support): add hal layer for clock output feature
This commit is contained in:
@@ -11,8 +11,9 @@
|
||||
#include "esp_clock_output.h"
|
||||
#include "esp_check.h"
|
||||
#include "esp_rom_gpio.h"
|
||||
#include "clkout_channel.h"
|
||||
#include "soc/clkout_channel.h"
|
||||
#include "hal/gpio_hal.h"
|
||||
#include "hal/clk_tree_hal.h"
|
||||
#include "hal/clk_tree_ll.h"
|
||||
#include "soc/soc_caps.h"
|
||||
#include "soc/io_mux_reg.h"
|
||||
@@ -93,7 +94,7 @@ static clkout_channel_handle_t* clkout_channel_alloc(soc_clkout_sig_id_t clk_sig
|
||||
#if SOC_CLOCKOUT_HAS_SOURCE_GATE
|
||||
clk_ll_enable_clkout_source(clk_sig, true);
|
||||
#endif
|
||||
gpio_ll_set_pin_ctrl(clk_sig, CLKOUT_CHANNEL_MASK(allocated_channel->channel_id), CLKOUT_CHANNEL_SHIFT(allocated_channel->channel_id));
|
||||
clk_hal_clock_output_setup(clk_sig, allocated_channel->channel_id);
|
||||
portEXIT_CRITICAL(&s_clkout_lock);
|
||||
}
|
||||
portEXIT_CRITICAL(&allocated_channel->clkout_channel_lock);
|
||||
@@ -150,7 +151,7 @@ static void clkout_channel_free(clkout_channel_handle_t *channel_hdl)
|
||||
#if SOC_CLOCKOUT_HAS_SOURCE_GATE
|
||||
clk_ll_enable_clkout_source(channel_hdl->mapped_clock, false);
|
||||
#endif
|
||||
gpio_ll_set_pin_ctrl(0, CLKOUT_CHANNEL_MASK(channel_hdl->channel_id), CLKOUT_CHANNEL_SHIFT(channel_hdl->channel_id));
|
||||
clk_hal_clock_output_teardown(channel_hdl->channel_id);
|
||||
portEXIT_CRITICAL(&s_clkout_lock);
|
||||
channel_hdl->mapped_clock = CLKOUT_SIG_INVALID;
|
||||
channel_hdl->is_mapped = false;
|
||||
@@ -187,7 +188,11 @@ static void clkout_mapping_free(esp_clock_output_mapping_t *mapping_hdl)
|
||||
esp_err_t esp_clock_output_start(soc_clkout_sig_id_t clk_sig, gpio_num_t gpio_num, esp_clock_output_mapping_handle_t *clkout_mapping_ret_hdl)
|
||||
{
|
||||
ESP_RETURN_ON_FALSE((clkout_mapping_ret_hdl != NULL), ESP_ERR_INVALID_ARG, TAG, "Clock out mapping handle passed in is invalid");
|
||||
#if SOC_GPIO_CLOCKOUT_BY_GPIO_MATRIX
|
||||
ESP_RETURN_ON_FALSE(GPIO_IS_VALID_GPIO(gpio_num), ESP_ERR_INVALID_ARG, TAG, "%s", "Output GPIO number error");
|
||||
#else
|
||||
ESP_RETURN_ON_FALSE(IS_VALID_CLKOUT_IO(gpio_num), ESP_ERR_INVALID_ARG, TAG, "%s", "Output GPIO number error");
|
||||
#endif
|
||||
|
||||
esp_clock_output_mapping_t *hdl;
|
||||
SLIST_FOREACH(hdl, &s_mapping_list, next) {
|
||||
|
Reference in New Issue
Block a user