diff --git a/arch/xtensa/src/esp32/Kconfig b/arch/xtensa/src/esp32/Kconfig index 4883ccf11b..c030989906 100644 --- a/arch/xtensa/src/esp32/Kconfig +++ b/arch/xtensa/src/esp32/Kconfig @@ -211,44 +211,6 @@ config ESP32_XTAL_26MHz endchoice # On-board Crystal Frequency -choice ESP32_RTC_CLK_SRC - prompt "RTC clock source" - default ESP32_RTC_CLK_SRC_INT_RC - ---help--- - Choose which clock is used as RTC clock source. - - - "Internal 150kHz oscillator" option provides lowest deep sleep current - consumption, and does not require extra external components. However - frequency stability with respect to temperature is poor, so time may - drift in deep/light sleep modes. - - "External 32kHz crystal" provides better frequency stability, at the - expense of slightly higher (1uA) deep sleep current consumption. - - "External 32kHz oscillator" allows using 32kHz clock generated by an - external circuit. In this case, external clock signal must be connected - to 32K_XN pin. Amplitude should be <1.2V in case of sine wave signal, - and <1V in case of square wave signal. Common mode voltage should be - 0.1 < Vcm < 0.5Vamp, where Vamp is the signal amplitude. - Additionally, 1nF capacitor must be connected between 32K_XP pin and - ground. 32K_XP pin can not be used as a GPIO in this case. - - "Internal 8.5MHz oscillator divided by 256" option results in higher - deep sleep current (by 5uA) but has better frequency stability than - the internal 150kHz oscillator. It does not require external components. - - config ESP32_RTC_CLK_SRC_INT_RC - bool "Internal 150kHz RC oscillator" - - config ESP32_RTC_CLK_SRC_EXT_XTAL - bool "External 32kHz crystal" - select ESP_SYSTEM_RTC_EXT_XTAL - - config ESP32_RTC_CLK_SRC_EXT_OSC - bool "External 32kHz oscillator at 32K_XN pin" - - config ESP32_RTC_CLK_SRC_INT_8MD256 - bool "Internal 8.5MHz oscillator, divided by 256 (~33kHz)" - -endchoice - config ESP32_RT_TIMER bool "Real-time Timer" default n @@ -483,6 +445,10 @@ config ESP32_RWDT to have the RTC module reset, please, use the Timers' Module WDTs. They will only reset Main System. +config ESP32_RTC + bool "Real Time Clock (RTC)" + default y + config ESP32_UART0 bool "UART 0" default n @@ -1430,6 +1396,48 @@ config ESP32_FREERUN endmenu # Timer/counter Configuration endif # ESP32_TIMER +menu "RTC Configuration" + depends on ESP32_RTC + +choice ESP32_RTC_CLK_SRC + prompt "RTC clock source" + default ESP32_RTC_CLK_SRC_INT_RC + ---help--- + Choose which clock is used as RTC clock source. + + - "Internal 150kHz oscillator" option provides lowest deep sleep current + consumption, and does not require extra external components. However + frequency stability with respect to temperature is poor, so time may + drift in deep/light sleep modes. + - "External 32kHz crystal" provides better frequency stability, at the + expense of slightly higher (1uA) deep sleep current consumption. + - "External 32kHz oscillator" allows using 32kHz clock generated by an + external circuit. In this case, external clock signal must be connected + to 32K_XN pin. Amplitude should be <1.2V in case of sine wave signal, + and <1V in case of square wave signal. Common mode voltage should be + 0.1 < Vcm < 0.5Vamp, where Vamp is the signal amplitude. + Additionally, 1nF capacitor must be connected between 32K_XP pin and + ground. 32K_XP pin can not be used as a GPIO in this case. + - "Internal 8.5MHz oscillator divided by 256" option results in higher + deep sleep current (by 5uA) but has better frequency stability than + the internal 150kHz oscillator. It does not require external components. + +config ESP32_RTC_CLK_SRC_INT_RC + bool "Internal 150kHz RC oscillator" + +config ESP32_RTC_CLK_SRC_EXT_XTAL + bool "External 32kHz crystal" + select ESP_SYSTEM_RTC_EXT_XTAL + +config ESP32_RTC_CLK_SRC_EXT_OSC + bool "External 32kHz oscillator at 32K_XN pin" + +config ESP32_RTC_CLK_SRC_INT_8MD256 + bool "Internal 8.5MHz oscillator, divided by 256 (~33kHz)" + +endchoice +endmenu # "RTC Configuration" + menu "LEDC configuration" depends on ESP32_LEDC diff --git a/arch/xtensa/src/esp32/Make.defs b/arch/xtensa/src/esp32/Make.defs index 9de3789104..4619a76a96 100644 --- a/arch/xtensa/src/esp32/Make.defs +++ b/arch/xtensa/src/esp32/Make.defs @@ -58,8 +58,6 @@ endif CHIP_CSRCS += esp32_pm.c endif -CHIP_CSRCS += esp32_rtc.c - ifeq ($(CONFIG_XTENSA_IMEM_USE_SEPARATE_HEAP),y) CHIP_CSRCS += esp32_imm.c endif @@ -177,9 +175,12 @@ ifeq ($(CONFIG_ESP32_AES_ACCELERATOR),y) CHIP_CSRCS += esp32_aes.c endif +ifeq ($(CONFIG_ESP32_RTC),y) +CHIP_CSRCS += esp32_rtc.c ifeq ($(CONFIG_RTC_DRIVER),y) CHIP_CSRCS += esp32_rtc_lowerhalf.c endif +endif ifeq ($(CONFIG_ESP32_WIRELESS),y) WIRELESS_DRV_UNPACK = esp-wireless-drivers-3rdparty diff --git a/arch/xtensa/src/esp32/esp32_rtc.c b/arch/xtensa/src/esp32/esp32_rtc.c index c765f092e2..8476a0e676 100644 --- a/arch/xtensa/src/esp32/esp32_rtc.c +++ b/arch/xtensa/src/esp32/esp32_rtc.c @@ -157,13 +157,11 @@ .fe_pd = (val), \ } -#ifdef CONFIG_RTC_DRIVER /* The magic data for the struct esp32_rtc_backup_s that is in RTC slow * memory. */ -# define MAGIC_RTC_SAVE (UINT64_C(0x11223344556677)) -#endif +#define MAGIC_RTC_SAVE UINT64_C(0x11223344556677) /* RTC Memory & Store Register usage */ @@ -228,8 +226,6 @@ struct esp32_rtc_sleep_pd_config_s uint32_t fe_pd : 1; /* Set to 1 to power down Wi-Fi in sleep */ }; -#ifdef CONFIG_RTC_DRIVER - #ifdef CONFIG_RTC_ALARM struct alm_cbinfo_s { @@ -248,8 +244,6 @@ struct esp32_rtc_backup_s int64_t reserved0; }; -#endif - /**************************************************************************** * Private Function Prototypes ****************************************************************************/ @@ -268,7 +262,7 @@ 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_DRIVER +#ifdef CONFIG_RTC_ALARM static void IRAM_ATTR esp32_rt_cb_handler(void *arg); #endif @@ -286,8 +280,6 @@ static struct esp32_rtc_priv_s esp32_rtc_priv = .rtc_dboost_fpd = 1 }; -#ifdef CONFIG_RTC_DRIVER - /* Callback to use when the alarm expires */ #ifdef CONFIG_RTC_ALARM @@ -301,15 +293,11 @@ static RTC_DATA_ATTR struct esp32_rtc_backup_s rtc_saved_data; static struct esp32_rtc_backup_s *g_rtc_save; static bool g_rt_timer_enabled = false; -#endif - /**************************************************************************** * Public Data ****************************************************************************/ -#ifdef CONFIG_RTC_DRIVER volatile bool g_rtc_enabled = false; -#endif /**************************************************************************** * Private Functions @@ -747,7 +735,7 @@ static void esp32_select_rtc_slow_clk(enum esp32_slow_clk_sel_e slow_clk) putreg32((uint32_t)cal_val, RTC_SLOW_CLK_CAL_REG); } -#ifdef CONFIG_RTC_DRIVER +#ifdef CONFIG_RTC_ALARM /**************************************************************************** * Name: esp32_rt_cb_handler @@ -788,7 +776,7 @@ static void IRAM_ATTR esp32_rt_cb_handler(void *arg) } } -#endif /* CONFIG_RTC_DRIVER */ +#endif /* CONFIG_RTC_ALARM */ /**************************************************************************** * Public Functions @@ -1884,8 +1872,6 @@ uint64_t IRAM_ATTR esp32_rtc_get_boot_time(void) + (((uint64_t)getreg32(RTC_BOOT_TIME_HIGH_REG)) << 32); } -#ifdef CONFIG_RTC_DRIVER - /**************************************************************************** * Name: up_rtc_time * @@ -2271,5 +2257,3 @@ int up_rtc_timer_init(void) return OK; } - -#endif /* CONFIG_RTC_DRIVER */