From: Ivan Grokhotkov Date: Fri, 13 Oct 2017 16:27:56 +0000 (+0800) Subject: soc/rtc: add function to convert CPU frequency in MHz to rtc_cpu_freq_t X-Git-Tag: v3.1-dev~144^2~21 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b03e08dc4e4de399336d26478ff8649b4f0fe9f8;p=esp-idf soc/rtc: add function to convert CPU frequency in MHz to rtc_cpu_freq_t --- 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.