arch/xtensa/esp32: Add functions to get RTC clock

This commit is contained in:
Lucas Saavedra Vaz 2022-12-13 13:33:44 -03:00 committed by Xiang Xiao
parent f9a9512d3c
commit 2280b33eea
2 changed files with 85 additions and 34 deletions

View File

@ -35,6 +35,7 @@
#include "esp32_rt_timer.h"
#include "hardware/esp32_rtccntl.h"
#include "hardware/esp32_rtc_io.h"
#include "hardware/esp32_dport.h"
#include "hardware/esp32_i2s.h"
@ -260,7 +261,6 @@ static void IRAM_ATTR esp32_rtc_clk_slow_freq_set(
static void esp32_select_rtc_slow_clk(enum esp32_slow_clk_sel_e slow_clk);
static void esp32_rtc_clk_32k_enable(int ac, int res, int bias);
static void IRAM_ATTR esp32_rtc_clk_8m_enable(bool clk_8m_en, bool d256_en);
static uint32_t IRAM_ATTR esp32_rtc_clk_slow_freq_get_hz(void);
#ifdef CONFIG_RTC_ALARM
static void IRAM_ATTR esp32_rt_cb_handler(void *arg);
@ -610,39 +610,6 @@ static void IRAM_ATTR esp32_rtc_clk_8m_enable(bool clk_8m_en, bool d256_en)
}
}
/****************************************************************************
* Name: esp32_rtc_clk_slow_freq_get_hz
*
* Description:
* Get the approximate frequency of RTC_SLOW_CLK, in Hz
*
* Input Parameters:
* None
*
* Returned Value:
* slow_clk_freq - RTC_SLOW_CLK frequency, in Hz
*
****************************************************************************/
static uint32_t IRAM_ATTR esp32_rtc_clk_slow_freq_get_hz(void)
{
enum esp32_rtc_slow_freq_e slow_clk_freq =
REG_GET_FIELD(RTC_CNTL_CLK_CONF_REG, RTC_CNTL_ANA_CLK_RTC_SEL);
switch (slow_clk_freq)
{
case RTC_SLOW_FREQ_RTC:
return RTC_SLOW_CLK_FREQ_150K;
case RTC_SLOW_FREQ_32K_XTAL:
return RTC_SLOW_CLK_FREQ_32K;
case RTC_SLOW_FREQ_8MD256:
return RTC_SLOW_CLK_FREQ_8MD256;
}
return OK;
}
/****************************************************************************
* Name: esp32_select_rtc_slow_clk
*
@ -782,6 +749,58 @@ static void IRAM_ATTR esp32_rt_cb_handler(void *arg)
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: esp32_rtc_clk_slow_freq_get_hz
*
* Description:
* Get the approximate frequency of RTC_SLOW_CLK, in Hz
*
* Input Parameters:
* None
*
* Returned Value:
* slow_clk_freq - RTC_SLOW_CLK frequency, in Hz
*
****************************************************************************/
uint32_t IRAM_ATTR esp32_rtc_clk_slow_freq_get_hz(void)
{
enum esp32_rtc_slow_freq_e slow_clk_freq =
REG_GET_FIELD(RTC_CNTL_CLK_CONF_REG, RTC_CNTL_ANA_CLK_RTC_SEL);
switch (slow_clk_freq)
{
case RTC_SLOW_FREQ_RTC:
return RTC_SLOW_CLK_FREQ_150K;
case RTC_SLOW_FREQ_32K_XTAL:
return RTC_SLOW_CLK_FREQ_32K;
case RTC_SLOW_FREQ_8MD256:
return RTC_SLOW_CLK_FREQ_8MD256;
}
return OK;
}
/****************************************************************************
* Name: esp32_rtc_clk_fast_freq_get_hz
*
* Description:
* Get fast_clk_rtc source in Hz.
*
* Input Parameters:
* None
*
* Returned Value:
* The clock source in Hz.
*
****************************************************************************/
uint32_t IRAM_ATTR esp32_rtc_clk_fast_freq_get_hz(void)
{
return RTC_FAST_CLK_FREQ_APPROX;
}
/****************************************************************************
* Name: esp32_rtc_get_slow_clk_rtc
*

View File

@ -159,6 +159,38 @@ struct alm_setalarm_s
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
* Name: esp32_rtc_clk_slow_freq_get_hz
*
* Description:
* Get the approximate frequency of RTC_SLOW_CLK, in Hz
*
* Input Parameters:
* None
*
* Returned Value:
* slow_clk_freq - RTC_SLOW_CLK frequency, in Hz
*
****************************************************************************/
uint32_t esp32_rtc_clk_slow_freq_get_hz(void);
/****************************************************************************
* Name: esp32_rtc_clk_fast_freq_get_hz
*
* Description:
* Get fast_clk_rtc source in Hz.
*
* Input Parameters:
* None
*
* Returned Value:
* The clock source in Hz.
*
****************************************************************************/
uint32_t esp32_rtc_clk_fast_freq_get_hz(void);
/****************************************************************************
* Name: esp32_rtc_get_slow_clk_rtc
*