|
|
@@ -9,7 +9,7 @@
|
|
|
extern "C" {
|
|
|
#endif
|
|
|
|
|
|
-/**
|
|
|
+/*
|
|
|
************************* ESP32S2 Root Clock Source ****************************
|
|
|
* 1) Internal 8MHz RC Oscillator: RC_FAST (usually referred as FOSC or CK8M/CLK8M in TRM and reg. description)
|
|
|
*
|
|
|
@@ -28,26 +28,25 @@ extern "C" {
|
|
|
*
|
|
|
* 4) External 32kHz Crystal Clock (optional): XTAL32K
|
|
|
*
|
|
|
- * The clock source for this XTAL32K_CLK can be either a 32kHz crystal connecting to the 32K_XP and 32K_XN pins
|
|
|
- * or a 32kHz clock signal generated by an external circuit. The external signal must be connected to the 32K_XN pin.
|
|
|
- * Additionally, a 1nF capacitor must be placed between the 32K_XP pin and ground. In this case, the 32K_XP pin
|
|
|
- * cannot be used as a GPIO pin.
|
|
|
+ * The clock source for this XTAL32K_CLK can be either a 32kHz crystal connecting to the XTAL_32K_P and XTAL_32K_N
|
|
|
+ * pins or a 32kHz clock signal generated by an external circuit. The external signal must be connected to the
|
|
|
+ * XTAL_32K_P pin.
|
|
|
*
|
|
|
* XTAL32K_CLK can also be calibrated to get its exact frequency.
|
|
|
*/
|
|
|
|
|
|
/* With the default value of CK8M_DFREQ = 172, RC_FAST clock frequency is 8.5 MHz +/- 7% */
|
|
|
-#define SOC_CLK_RC_FAST_FREQ_APPROX 8500000
|
|
|
-#define SOC_CLK_RC_SLOW_FREQ_APPROX 90000
|
|
|
-#define SOC_CLK_RC_FAST_D256_FREQ_APPROX (SOC_CLK_RC_FAST_FREQ_APPROX / 256)
|
|
|
-#define SOC_CLK_XTAL32K_FREQ_APPROX 32768
|
|
|
+#define SOC_CLK_RC_FAST_FREQ_APPROX 8500000 /*!< Approximate RC_FAST_CLK frequency in Hz */
|
|
|
+#define SOC_CLK_RC_SLOW_FREQ_APPROX 90000 /*!< Approximate RC_SLOW_CLK frequency in Hz */
|
|
|
+#define SOC_CLK_RC_FAST_D256_FREQ_APPROX (SOC_CLK_RC_FAST_FREQ_APPROX / 256) /*!< Approximate RC_FAST_D256_CLK frequency in Hz */
|
|
|
+#define SOC_CLK_XTAL32K_FREQ_APPROX 32768 /*!< Approximate XTAL32K_CLK frequency in Hz */
|
|
|
|
|
|
+// Naming convention: SOC_ROOT_CLK_{loc}_{type}_[attr]
|
|
|
+// {loc}: EXT, INT
|
|
|
+// {type}: XTAL, RC
|
|
|
+// [attr] - optional: [frequency], FAST, SLOW
|
|
|
/**
|
|
|
* @brief Root clock
|
|
|
- * Naming convention: SOC_ROOT_CLK_{loc}_{type}_[attr]
|
|
|
- * {loc}: EXT, INT
|
|
|
- * {type}: XTAL, RC
|
|
|
- * [attr] - optional: [frequency], FAST, SLOW
|
|
|
*/
|
|
|
typedef enum {
|
|
|
SOC_ROOT_CLK_INT_RC_FAST, /*!< Internal 8MHz RC oscillator */
|
|
|
@@ -58,55 +57,59 @@ typedef enum {
|
|
|
|
|
|
/**
|
|
|
* @brief CPU_CLK mux inputs, which are the supported clock sources for the CPU_CLK
|
|
|
+ * @note Enum values are matched with the register field values on purpose
|
|
|
*/
|
|
|
typedef enum {
|
|
|
- SOC_CPU_CLK_SRC_XTAL, /*!< Select XTAL_CLK as CPU_CLK source */
|
|
|
- SOC_CPU_CLK_SRC_PLL, /*!< Select PLL_CLK as CPU_CLK source (PLL_CLK is the output of 40MHz crystal oscillator frequency multiplier, can be 480MHz or 320MHz) */
|
|
|
- SOC_CPU_CLK_SRC_RC_FAST, /*!< Select RC_FAST_CLK as CPU_CLK source */
|
|
|
- SOC_CPU_CLK_SRC_APLL, /*!< Select APLL_CLK as CPU_CLK source */
|
|
|
+ SOC_CPU_CLK_SRC_XTAL = 0, /*!< Select XTAL_CLK as CPU_CLK source */
|
|
|
+ SOC_CPU_CLK_SRC_PLL = 1, /*!< Select PLL_CLK as CPU_CLK source (PLL_CLK is the output of 40MHz crystal oscillator frequency multiplier, can be 480MHz or 320MHz) */
|
|
|
+ SOC_CPU_CLK_SRC_RC_FAST = 2, /*!< Select RC_FAST_CLK as CPU_CLK source */
|
|
|
+ SOC_CPU_CLK_SRC_APLL = 3, /*!< Select APLL_CLK as CPU_CLK source */
|
|
|
} soc_cpu_clk_src_t;
|
|
|
|
|
|
/**
|
|
|
* @brief RTC_SLOW_CLK mux inputs, which are the supported clock sources for the RTC_SLOW_CLK
|
|
|
+ * @note Enum values are matched with the register field values on purpose
|
|
|
*/
|
|
|
typedef enum {
|
|
|
- SOC_RTC_SLOW_CLK_SRC_RC_SLOW, /*!< Select RC_SLOW_CLK as RTC_SLOW_CLK source */
|
|
|
- SOC_RTC_SLOW_CLK_SRC_XTAL32K, /*!< Select XTAL32K_CLK as RTC_SLOW_CLK source */
|
|
|
- SOC_RTC_SLOW_CLK_SRC_RC_FAST_D256, /*!< Select RC_FAST_D256_CLK (referred as FOSC_DIV or 8m_d256/8md256 in TRM and reg. description) as RTC_SLOW_CLK source */
|
|
|
+ SOC_RTC_SLOW_CLK_SRC_RC_SLOW = 0, /*!< Select RC_SLOW_CLK as RTC_SLOW_CLK source */
|
|
|
+ SOC_RTC_SLOW_CLK_SRC_XTAL32K = 1, /*!< Select XTAL32K_CLK as RTC_SLOW_CLK source */
|
|
|
+ SOC_RTC_SLOW_CLK_SRC_RC_FAST_D256 = 2, /*!< Select RC_FAST_D256_CLK (referred as FOSC_DIV or 8m_d256/8md256 in TRM and reg. description) as RTC_SLOW_CLK source */
|
|
|
} soc_rtc_slow_clk_src_t;
|
|
|
|
|
|
/**
|
|
|
* @brief RTC_FAST_CLK mux inputs, which are the supported clock sources for the RTC_FAST_CLK
|
|
|
+ * @note Enum values are matched with the register field values on purpose
|
|
|
*/
|
|
|
typedef enum {
|
|
|
- SOC_RTC_FAST_CLK_SRC_XTAL_D4, /*!< Select XTAL_D4_CLK (may referred as XTAL_CLK_DIV_4) as RTC_FAST_CLK source */
|
|
|
+ SOC_RTC_FAST_CLK_SRC_XTAL_D4 = 0, /*!< Select XTAL_D4_CLK (may referred as XTAL_CLK_DIV_4) as RTC_FAST_CLK source */
|
|
|
SOC_RTC_FAST_CLK_SRC_XTAL_DIV = SOC_RTC_FAST_CLK_SRC_XTAL_D4, /*!< Alias name for `SOC_RTC_FAST_CLK_SRC_XTAL_D4` */
|
|
|
- SOC_RTC_FAST_CLK_SRC_RC_FAST, /*!< Select RC_FAST_CLK as RTC_FAST_CLK source */
|
|
|
+ SOC_RTC_FAST_CLK_SRC_RC_FAST = 1, /*!< Select RC_FAST_CLK as RTC_FAST_CLK source */
|
|
|
} soc_rtc_fast_clk_src_t;
|
|
|
|
|
|
+// Naming convention: SOC_MOD_CLK_{[upstream]clock_name}_[attr]
|
|
|
+// {[upstream]clock_name}: APB, APLL, (BB)PLL, etc.
|
|
|
+// [attr] - optional: FAST, SLOW, D<divider>, F<freq>
|
|
|
/**
|
|
|
- * @brief Supported clock sources for modules (CPU, peripherials, RTC, etc.)
|
|
|
- * Naming convention: SOC_MOD_CLK_{[upstream]clock_name}_[attr]
|
|
|
- * {[upstream]clock_name}: APB, APLL, (BB)PLL, etc.
|
|
|
- * [attr] - optional: FAST, SLOW, D<divider>, F<freq>
|
|
|
+ * @brief Supported clock sources for modules (CPU, peripherals, RTC, etc.)
|
|
|
+ *
|
|
|
* @note enum starts from 1, to save 0 for special purpose
|
|
|
*/
|
|
|
typedef enum {
|
|
|
// For CPU domain
|
|
|
- SOC_MOD_CLK_CPU = 1, /*< CPU_CLK can be sourced from XTAL, PLL, RC_FAST, or APLL by configuring soc_cpu_clk_src_t */
|
|
|
+ SOC_MOD_CLK_CPU = 1, /*!< CPU_CLK can be sourced from XTAL, PLL, RC_FAST, or APLL by configuring soc_cpu_clk_src_t */
|
|
|
// For RTC domain
|
|
|
- SOC_MOD_CLK_RTC_FAST = 2, /*< RTC_FAST_CLK can be sourced from XTAL_D4 or RC_FAST by configuring soc_rtc_fast_clk_src_t */
|
|
|
- SOC_MOD_CLK_RTC_SLOW = 3, /*< RTC_SLOW_CLK can be sourced from RC_SLOW, XTAL32K, or RC_FAST_D256 by configuring soc_rtc_slow_clk_src_t */
|
|
|
+ SOC_MOD_CLK_RTC_FAST, /*!< RTC_FAST_CLK can be sourced from XTAL_D4 or RC_FAST by configuring soc_rtc_fast_clk_src_t */
|
|
|
+ SOC_MOD_CLK_RTC_SLOW, /*!< RTC_SLOW_CLK can be sourced from RC_SLOW, XTAL32K, or RC_FAST_D256 by configuring soc_rtc_slow_clk_src_t */
|
|
|
// For digital domain: peripherals, WIFI, BLE
|
|
|
- SOC_MOD_CLK_APB = 4, /*< APB_CLK is highly dependent on the CPU_CLK source */
|
|
|
- SOC_MOD_CLK_PLL_F160M = 5, /*< PLL_F160M_CLK is derived from PLL, and has a fixed frequency of 160MHz */
|
|
|
- SOC_MOD_CLK_XTAL32K = 6, /*< XTAL32K_CLK comes from the external 32kHz crystal, passing a clock gating to the peripherals */
|
|
|
- SOC_MOD_CLK_RC_FAST = 7, /*< RC_FAST_CLK comes from the internal 8MHz rc oscillator, passing a clock gating to the peripherals */
|
|
|
- SOC_MOD_CLK_RC_FAST_D256 = 8, /*< RC_FAST_D256_CLK is derived from the internal 8MHz rc oscillator, divided by 256, and passing a clock gating to the peripherals */
|
|
|
- SOC_MOD_CLK_XTAL = 9, /*< XTAL_CLK comes from the external 40MHz crystal */
|
|
|
- SOC_MOD_CLK_APB_F1M = 10, /*< APB_F1M_CLK (referred as REF_TICK in TRM) is derived from APB, it has a fixed frequency of 1MHz even when APB frequency changes */
|
|
|
- SOC_MOD_CLK_APLL = 11, /*< APLL is sourced from PLL, and its frequency is configurable through APLL configuration registers */
|
|
|
- SOC_MOD_CLK_TEMP_SENSOR = 12, /*< TEMP_SENSOR_CLK comes directly from the internal 8MHz rc oscillator */
|
|
|
+ SOC_MOD_CLK_APB, /*!< APB_CLK is highly dependent on the CPU_CLK source */
|
|
|
+ SOC_MOD_CLK_PLL_F160M, /*!< PLL_F160M_CLK is derived from PLL, and has a fixed frequency of 160MHz */
|
|
|
+ SOC_MOD_CLK_XTAL32K, /*!< XTAL32K_CLK comes from the external 32kHz crystal, passing a clock gating to the peripherals */
|
|
|
+ SOC_MOD_CLK_RC_FAST, /*!< RC_FAST_CLK comes from the internal 8MHz rc oscillator, passing a clock gating to the peripherals */
|
|
|
+ SOC_MOD_CLK_RC_FAST_D256, /*!< RC_FAST_D256_CLK is derived from the internal 8MHz rc oscillator, divided by 256, and passing a clock gating to the peripherals */
|
|
|
+ SOC_MOD_CLK_XTAL, /*!< XTAL_CLK comes from the external 40MHz crystal */
|
|
|
+ SOC_MOD_CLK_REF_TICK, /*!< REF_TICK is derived from XTAL or RC_FAST via a divider, it has a fixed frequency of 1MHz by default */
|
|
|
+ SOC_MOD_CLK_APLL, /*!< APLL is sourced from PLL, and its frequency is configurable through APLL configuration registers */
|
|
|
+ SOC_MOD_CLK_TEMP_SENSOR, /*!< TEMP_SENSOR_CLK comes directly from the internal 8MHz rc oscillator */
|
|
|
} soc_module_clk_t;
|
|
|
|
|
|
|
|
|
@@ -114,6 +117,7 @@ typedef enum {
|
|
|
|
|
|
/**
|
|
|
* @brief Array initializer for all supported clock sources of GPTimer
|
|
|
+ *
|
|
|
* The following code can be used to iterate all possible clocks:
|
|
|
* @code{c}
|
|
|
* soc_periph_gptimer_clk_src_t gptimer_clks[] = (soc_periph_gptimer_clk_src_t)SOC_GPTIMER_CLKS;
|
|
|
@@ -165,25 +169,25 @@ typedef enum {
|
|
|
/**
|
|
|
* @brief Array initializer for all supported clock sources of RMT
|
|
|
*/
|
|
|
-#define SOC_RMT_CLKS {SOC_MOD_CLK_APB, SOC_MOD_CLK_APB_F1M}
|
|
|
+#define SOC_RMT_CLKS {SOC_MOD_CLK_APB, SOC_MOD_CLK_REF_TICK}
|
|
|
|
|
|
/**
|
|
|
* @brief Type of RMT clock source
|
|
|
*/
|
|
|
typedef enum {
|
|
|
- RMT_CLK_SRC_NONE = 0, /*!< No clock source is selected */
|
|
|
- RMT_CLK_SRC_APB = SOC_MOD_CLK_APB, /*!< Select APB as the source clock */
|
|
|
- RMT_CLK_SRC_APB_F1M = SOC_MOD_CLK_APB_F1M, /*!< Select APB_F1M (a.k.a REF_TICK) as the source clock */
|
|
|
- RMT_CLK_SRC_DEFAULT = SOC_MOD_CLK_APB, /*!< Select APB as the default choice */
|
|
|
+ RMT_CLK_SRC_NONE = 0, /*!< No clock source is selected */
|
|
|
+ RMT_CLK_SRC_APB = SOC_MOD_CLK_APB, /*!< Select APB as the source clock */
|
|
|
+ RMT_CLK_SRC_REF_TICK = SOC_MOD_CLK_REF_TICK, /*!< Select REF_TICK as the source clock */
|
|
|
+ RMT_CLK_SRC_DEFAULT = SOC_MOD_CLK_APB, /*!< Select APB as the default choice */
|
|
|
} soc_periph_rmt_clk_src_t;
|
|
|
|
|
|
/**
|
|
|
* @brief Type of RMT clock source, reserved for the legacy RMT driver
|
|
|
*/
|
|
|
typedef enum {
|
|
|
- RMT_BASECLK_APB = SOC_MOD_CLK_APB, /*!< RMT source clock is APB CLK */
|
|
|
- RMT_BASECLK_REF = SOC_MOD_CLK_APB_F1M, /*!< RMT source clock is APB_F1M */
|
|
|
- RMT_BASECLK_DEFAULT = SOC_MOD_CLK_APB, /*!< RMT source clock default choice is APB */
|
|
|
+ RMT_BASECLK_APB = SOC_MOD_CLK_APB, /*!< RMT source clock is APB CLK */
|
|
|
+ RMT_BASECLK_REF = SOC_MOD_CLK_REF_TICK, /*!< RMT source clock is REF_TICK */
|
|
|
+ RMT_BASECLK_DEFAULT = SOC_MOD_CLK_APB, /*!< RMT source clock default choice is APB */
|
|
|
} soc_periph_rmt_clk_src_legacy_t;
|
|
|
|
|
|
//////////////////////////////////////////////////Temp Sensor///////////////////////////////////////////////////////////
|
|
|
@@ -207,9 +211,9 @@ typedef enum {
|
|
|
* @brief Type of UART clock source, reserved for the legacy UART driver
|
|
|
*/
|
|
|
typedef enum {
|
|
|
- UART_SCLK_APB = SOC_MOD_CLK_APB, /*!< UART source clock is APB CLK */
|
|
|
- UART_SCLK_REF_TICK = SOC_MOD_CLK_APB_F1M, /*!< UART source clock is APB_F1M */
|
|
|
- UART_SCLK_DEFAULT = SOC_MOD_CLK_APB, /*!< UART source clock default choice is APB */
|
|
|
+ UART_SCLK_APB = SOC_MOD_CLK_APB, /*!< UART source clock is APB CLK */
|
|
|
+ UART_SCLK_REF_TICK = SOC_MOD_CLK_REF_TICK, /*!< UART source clock is REF_TICK */
|
|
|
+ UART_SCLK_DEFAULT = SOC_MOD_CLK_APB, /*!< UART source clock default choice is APB */
|
|
|
} soc_periph_uart_clk_src_legacy_t;
|
|
|
|
|
|
#ifdef __cplusplus
|