From c49e99f9e7d528115c7d954a8bc0a30edfe030aa Mon Sep 17 00:00:00 2001 From: morris Date: Fri, 29 Apr 2022 12:42:44 +0800 Subject: [PATCH] uart: use clk_tree API to acquire FAST_RC clock --- components/driver/uart.c | 37 +++---------------------------------- 1 file changed, 3 insertions(+), 34 deletions(-) diff --git a/components/driver/uart.c b/components/driver/uart.c index 101b18c138..d2b7450f44 100644 --- a/components/driver/uart.c +++ b/components/driver/uart.c @@ -26,6 +26,7 @@ #include "esp_private/esp_clk.h" #include "sdkconfig.h" #include "esp_rom_gpio.h" +#include "clk_ctrl_os.h" #ifdef CONFIG_UART_ISR_IN_IRAM #define UART_ISR_ATTR IRAM_ATTR @@ -81,10 +82,6 @@ static const char *UART_TAG = "uart"; .hw_enabled = false,\ } -#if SOC_UART_SUPPORT_RTC_CLK -#define RTC_ENABLED(uart_num) (BIT(uart_num)) -#endif - typedef struct { uart_event_type_t type; /*!< UART TX data type */ struct { @@ -169,34 +166,6 @@ static uart_context_t uart_context[UART_NUM_MAX] = { static portMUX_TYPE uart_selectlock = portMUX_INITIALIZER_UNLOCKED; -#if SOC_UART_SUPPORT_RTC_CLK - -static uint8_t rtc_enabled = 0; -static portMUX_TYPE rtc_num_spinlock = portMUX_INITIALIZER_UNLOCKED; - -static void rtc_clk_enable(uart_port_t uart_num) -{ - portENTER_CRITICAL(&rtc_num_spinlock); - if (!(rtc_enabled & RTC_ENABLED(uart_num))) { - rtc_enabled |= RTC_ENABLED(uart_num); - } - SET_PERI_REG_MASK(RTC_CNTL_CLK_CONF_REG, RTC_CNTL_DIG_CLK8M_EN_M); - portEXIT_CRITICAL(&rtc_num_spinlock); -} - -static void rtc_clk_disable(uart_port_t uart_num) -{ - assert(rtc_enabled & RTC_ENABLED(uart_num)); - - portENTER_CRITICAL(&rtc_num_spinlock); - rtc_enabled &= ~RTC_ENABLED(uart_num); - if (rtc_enabled == 0) { - CLEAR_PERI_REG_MASK(RTC_CNTL_CLK_CONF_REG, RTC_CNTL_DIG_CLK8M_EN_M); - } - portEXIT_CRITICAL(&rtc_num_spinlock); -} -#endif - static void uart_module_enable(uart_port_t uart_num) { UART_ENTER_CRITICAL(&(uart_context[uart_num].spinlock)); @@ -716,7 +685,7 @@ esp_err_t uart_param_config(uart_port_t uart_num, const uart_config_t *uart_conf uart_module_enable(uart_num); #if SOC_UART_SUPPORT_RTC_CLK if (uart_config->source_clk == UART_SCLK_RTC) { - rtc_clk_enable(uart_num); + periph_rtc_dig_clk8m_enable(); } #endif UART_ENTER_CRITICAL(&(uart_context[uart_num].spinlock)); @@ -1614,7 +1583,7 @@ esp_err_t uart_driver_delete(uart_port_t uart_num) uart_sclk_t sclk = 0; uart_hal_get_sclk(&(uart_context[uart_num].hal), &sclk); if (sclk == UART_SCLK_RTC) { - rtc_clk_disable(uart_num); + periph_rtc_dig_clk8m_disable(); } #endif uart_module_disable(uart_num);