forked from espressif/esp-idf
pm: add powerdown for int_8m on ESP32-H2
Also move the xtal fpu logic to sleep_modes.c
This commit is contained in:
@@ -404,6 +404,11 @@ void rtc_dig_clk8m_disable(void)
|
|||||||
esp_rom_delay_us(DELAY_RTC_CLK_SWITCH);
|
esp_rom_delay_us(DELAY_RTC_CLK_SWITCH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool rtc_dig_8m_enabled(void)
|
||||||
|
{
|
||||||
|
return GET_PERI_REG_MASK(RTC_CNTL_CLK_CONF_REG, RTC_CNTL_DIG_CLK8M_EN_M);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t read_spll_freq(void)
|
uint32_t read_spll_freq(void)
|
||||||
{
|
{
|
||||||
return REG_GET_FIELD(SYSTEM_SYSCLK_CONF_REG, SYSTEM_SPLL_FREQ);
|
return REG_GET_FIELD(SYSTEM_SYSCLK_CONF_REG, SYSTEM_SPLL_FREQ);
|
||||||
|
@@ -202,6 +202,14 @@ void rtc_sleep_init(rtc_sleep_config_t cfg)
|
|||||||
CLEAR_PERI_REG_MASK(RTC_CNTL_DIG_PWC_REG, RTC_CNTL_DG_WRAP_PD_EN);
|
CLEAR_PERI_REG_MASK(RTC_CNTL_DIG_PWC_REG, RTC_CNTL_DG_WRAP_PD_EN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!cfg.int_8m_pd_en) {
|
||||||
|
SET_PERI_REG_MASK(RTC_CNTL_CLK_CONF_REG, RTC_CNTL_CK8M_FORCE_PU);
|
||||||
|
SET_PERI_REG_MASK(RTC_CNTL_CLK_CONF_REG, RTC_CNTL_CK8M_FORCE_NOGATING);
|
||||||
|
} else {
|
||||||
|
CLEAR_PERI_REG_MASK(RTC_CNTL_CLK_CONF_REG, RTC_CNTL_CK8M_FORCE_PU);
|
||||||
|
CLEAR_PERI_REG_MASK(RTC_CNTL_CLK_CONF_REG, RTC_CNTL_CK8M_FORCE_NOGATING);
|
||||||
|
}
|
||||||
|
|
||||||
/* enable VDDSDIO control by state machine */
|
/* enable VDDSDIO control by state machine */
|
||||||
REG_CLR_BIT(RTC_CNTL_SDIO_CONF_REG, RTC_CNTL_SDIO_FORCE);
|
REG_CLR_BIT(RTC_CNTL_SDIO_CONF_REG, RTC_CNTL_SDIO_FORCE);
|
||||||
REG_SET_FIELD(RTC_CNTL_SDIO_CONF_REG, RTC_CNTL_SDIO_PD_EN, cfg.vddsdio_pd_en);
|
REG_SET_FIELD(RTC_CNTL_SDIO_CONF_REG, RTC_CNTL_SDIO_PD_EN, cfg.vddsdio_pd_en);
|
||||||
|
@@ -601,6 +601,11 @@ void rtc_dig_clk8m_enable(void);
|
|||||||
*/
|
*/
|
||||||
void rtc_dig_clk8m_disable(void);
|
void rtc_dig_clk8m_disable(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get whether the rtc digital 8M clock is enabled
|
||||||
|
*/
|
||||||
|
bool rtc_dig_8m_enabled(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Calculate the real clock value after the clock calibration
|
* @brief Calculate the real clock value after the clock calibration
|
||||||
*
|
*
|
||||||
@@ -685,7 +690,7 @@ typedef struct {
|
|||||||
.dig_ret_pd_en = ((sleep_flags) & RTC_SLEEP_PD_DIG_RET) ? 1 : 0, \
|
.dig_ret_pd_en = ((sleep_flags) & RTC_SLEEP_PD_DIG_RET) ? 1 : 0, \
|
||||||
.bt_pd_en = ((sleep_flags) & RTC_SLEEP_PD_BT) ? 1 : 0, \
|
.bt_pd_en = ((sleep_flags) & RTC_SLEEP_PD_BT) ? 1 : 0, \
|
||||||
.cpu_pd_en = ((sleep_flags) & RTC_SLEEP_PD_CPU) ? 1 : 0, \
|
.cpu_pd_en = ((sleep_flags) & RTC_SLEEP_PD_CPU) ? 1 : 0, \
|
||||||
.int_8m_pd_en = is_dslp(sleep_flags) ? 1 : ((sleep_flags) & RTC_SLEEP_PD_INT_8M) ? 1 : 0, \
|
.int_8m_pd_en = ((sleep_flags) & RTC_SLEEP_PD_INT_8M) ? 1 : 0, \
|
||||||
.dig_peri_pd_en = ((sleep_flags) & RTC_SLEEP_PD_DIG_PERIPH) ? 1 : 0, \
|
.dig_peri_pd_en = ((sleep_flags) & RTC_SLEEP_PD_DIG_PERIPH) ? 1 : 0, \
|
||||||
.deep_slp = ((sleep_flags) & RTC_SLEEP_PD_DIG) ? 1 : 0, \
|
.deep_slp = ((sleep_flags) & RTC_SLEEP_PD_DIG) ? 1 : 0, \
|
||||||
.wdt_flashboot_mod_en = 0, \
|
.wdt_flashboot_mod_en = 0, \
|
||||||
@@ -698,7 +703,7 @@ typedef struct {
|
|||||||
: !((sleep_flags) & RTC_SLEEP_PD_INT_8M) ? RTC_CNTL_DBIAS_1V10 \
|
: !((sleep_flags) & RTC_SLEEP_PD_INT_8M) ? RTC_CNTL_DBIAS_1V10 \
|
||||||
: RTC_CNTL_DBIAS_SLP, \
|
: RTC_CNTL_DBIAS_SLP, \
|
||||||
.vddsdio_pd_en = ((sleep_flags) & RTC_SLEEP_PD_VDDSDIO) ? 1 : 0, \
|
.vddsdio_pd_en = ((sleep_flags) & RTC_SLEEP_PD_VDDSDIO) ? 1 : 0, \
|
||||||
.xtal_fpu = is_dslp(sleep_flags) ? 0 : ((sleep_flags) & RTC_SLEEP_PD_XTAL) ? 0 : 1, \
|
.xtal_fpu = ((sleep_flags) & RTC_SLEEP_PD_XTAL) ? 0 : 1, \
|
||||||
.deep_slp_reject = 1, \
|
.deep_slp_reject = 1, \
|
||||||
.light_slp_reject = 1 \
|
.light_slp_reject = 1 \
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user