From b03e08dc4e4de399336d26478ff8649b4f0fe9f8 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Sat, 14 Oct 2017 00:27:56 +0800 Subject: [PATCH] soc/rtc: add function to convert CPU frequency in MHz to rtc_cpu_freq_t --- components/soc/esp32/include/soc/rtc.h | 8 ++++++++ components/soc/esp32/rtc_clk.c | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/components/soc/esp32/include/soc/rtc.h b/components/soc/esp32/include/soc/rtc.h index 2c4b4d320c..f13c113b4e 100644 --- a/components/soc/esp32/include/soc/rtc.h +++ b/components/soc/esp32/include/soc/rtc.h @@ -315,6 +315,14 @@ rtc_cpu_freq_t rtc_clk_cpu_freq_get(); */ uint32_t rtc_clk_cpu_freq_value(rtc_cpu_freq_t cpu_freq); +/** + * @brief Get rtc_cpu_freq_t enum value for given CPU frequency + * @param cpu_freq_mhz CPU frequency, one of 80, 160, 240, 2, and XTAL frequency + * @param[out] out_val output, rtc_cpu_freq_t value corresponding to the frequency + * @return true if the given frequency value matches one of enum values + */ + bool rtc_clk_cpu_freq_from_mhz(int cpu_freq_mhz, rtc_cpu_freq_t* out_val); + /** * @brief Store new APB frequency value into RTC_APB_FREQ_REG * diff --git a/components/soc/esp32/rtc_clk.c b/components/soc/esp32/rtc_clk.c index 0b1f902517..6e2b0909d0 100644 --- a/components/soc/esp32/rtc_clk.c +++ b/components/soc/esp32/rtc_clk.c @@ -504,6 +504,24 @@ uint32_t rtc_clk_cpu_freq_value(rtc_cpu_freq_t cpu_freq) } } +bool rtc_clk_cpu_freq_from_mhz(int mhz, rtc_cpu_freq_t* out_val) +{ + if (mhz == 240) { + *out_val = RTC_CPU_FREQ_240M; + } else if (mhz == 160) { + *out_val = RTC_CPU_FREQ_160M; + } else if (mhz == 80) { + *out_val = RTC_CPU_FREQ_80M; + } else if (mhz == (int) rtc_clk_xtal_freq_get()) { + *out_val = RTC_CPU_FREQ_XTAL; + } else if (mhz == 2) { + *out_val = RTC_CPU_FREQ_2M; + } else { + return false; + } + return true; +} + /* Values of RTC_XTAL_FREQ_REG and RTC_APB_FREQ_REG are stored as two copies in * lower and upper 16-bit halves. These are the routines to work with such a * representation.