1 /*
2  * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 #pragma once
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 /*
13  ************************* ESP32C6 Root Clock Source ****************************
14  * 1) Internal 17.5MHz RC Oscillator: RC_FAST (may also referred as FOSC in TRM and reg. description)
15  *
16  *    This RC oscillator generates a ~17.5MHz clock signal output as the RC_FAST_CLK.
17  *
18  *    The exact frequency of RC_FAST_CLK can be computed in runtime through calibration.
19  *
20  * 2) External 40MHz Crystal Clock: XTAL
21  *
22  * 3) Internal 136kHz RC Oscillator: RC_SLOW (may also referrred as SOSC in TRM or reg. description)
23  *
24  *    This RC oscillator generates a ~136kHz clock signal output as the RC_SLOW_CLK. The exact frequency of this clock
25  *    can be computed in runtime through calibration.
26  *
27  * 4) Internal 32kHz RC Oscillator: RC32K [NOT RECOMMENDED TO USE]
28  *
29  *    The exact frequency of this clock can be computed in runtime through calibration.
30  *
31  * 5) External 32kHz Crystal Clock (optional): XTAL32K
32  *
33  *    The clock source for this XTAL32K_CLK should be a 32kHz crystal connecting to the XTAL_32K_P and XTAL_32K_N
34  *    pins.
35  *
36  *    XTAL32K_CLK can also be calibrated to get its exact frequency.
37  *
38  * 6) External Slow Clock (optional): OSC_SLOW
39  *
40  *    A slow clock signal generated by an external circuit can be connected to GPIO0 to be the clock source for the
41  *    RTC_SLOW_CLK.
42  *
43  *    OSC_SLOW_CLK can also be calibrated to get its exact frequency.
44  */
45 
46 /* With the default value of FOSC_DFREQ = 100, RC_FAST clock frequency is 17.5 MHz +/- 7% */
47 #define SOC_CLK_RC_FAST_FREQ_APPROX         17500000                            /*!< Approximate RC_FAST_CLK frequency in Hz */
48 #define SOC_CLK_RC_SLOW_FREQ_APPROX         136000                              /*!< Approximate RC_SLOW_CLK frequency in Hz */
49 #define SOC_CLK_RC32K_FREQ_APPROX           32768                               /*!< Approximate RC32K_CLK frequency in Hz */
50 #define SOC_CLK_XTAL32K_FREQ_APPROX         32768                               /*!< Approximate XTAL32K_CLK frequency in Hz */
51 #define SOC_CLK_OSC_SLOW_FREQ_APPROX        32768                               /*!< Approximate OSC_SLOW_CLK (external slow clock) frequency in Hz */
52 
53 // Naming convention: SOC_ROOT_CLK_{loc}_{type}_[attr]
54 // {loc}: EXT, INT
55 // {type}: XTAL, RC
56 // [attr] - optional: [frequency], FAST, SLOW
57 /**
58  * @brief Root clock
59  */
60 typedef enum {
61     SOC_ROOT_CLK_INT_RC_FAST,          /*!< Internal 17.5MHz RC oscillator */
62     SOC_ROOT_CLK_INT_RC_SLOW,          /*!< Internal 136kHz RC oscillator */
63     SOC_ROOT_CLK_EXT_XTAL,             /*!< External 40MHz crystal */
64     SOC_ROOT_CLK_EXT_XTAL32K,          /*!< External 32kHz crystal */
65     SOC_ROOT_CLK_INT_RC32K,            /*!< Internal 32kHz RC oscillator */
66     SOC_ROOT_CLK_EXT_OSC_SLOW,         /*!< External slow clock signal at pin0 */
67 } soc_root_clk_t;
68 
69 /**
70  * @brief CPU_CLK mux inputs, which are the supported clock sources for the CPU_CLK
71  * @note Enum values are matched with the register field values on purpose
72  */
73 typedef enum {
74     SOC_CPU_CLK_SRC_XTAL = 0,              /*!< Select XTAL_CLK as CPU_CLK source */
75     SOC_CPU_CLK_SRC_PLL = 1,               /*!< Select PLL_CLK as CPU_CLK source (PLL_CLK is the output of 40MHz crystal oscillator frequency multiplier, 480MHz) */
76     SOC_CPU_CLK_SRC_RC_FAST = 2,           /*!< Select RC_FAST_CLK as CPU_CLK source */
77     SOC_CPU_CLK_SRC_INVALID,               /*!< Invalid CPU_CLK source */
78 } soc_cpu_clk_src_t;
79 
80 /**
81  * @brief RTC_SLOW_CLK mux inputs, which are the supported clock sources for the RTC_SLOW_CLK
82  * @note Enum values are matched with the register field values on purpose
83  */
84 typedef enum {
85     SOC_RTC_SLOW_CLK_SRC_RC_SLOW = 0,                 /*!< Select RC_SLOW_CLK as RTC_SLOW_CLK source */
86     SOC_RTC_SLOW_CLK_SRC_XTAL32K = 1,                 /*!< Select XTAL32K_CLK as RTC_SLOW_CLK source */
87     SOC_RTC_SLOW_CLK_SRC_RC32K = 2,                   /*!< Select RC32K_CLK as RTC_SLOW_CLK source */
88     SOC_RTC_SLOW_CLK_SRC_OSC_SLOW = 3,                /*!< Select OSC_SLOW_CLK (external slow clock) as RTC_SLOW_CLK source */
89     SOC_RTC_SLOW_CLK_SRC_INVALID,                     /*!< Invalid RTC_SLOW_CLK source */
90 } soc_rtc_slow_clk_src_t;
91 
92 /**
93  * @brief RTC_FAST_CLK mux inputs, which are the supported clock sources for the RTC_FAST_CLK
94  * @note Enum values are matched with the register field values on purpose
95  */
96 typedef enum {
97     SOC_RTC_FAST_CLK_SRC_RC_FAST = 0,      /*!< Select RC_FAST_CLK as RTC_FAST_CLK source */
98     SOC_RTC_FAST_CLK_SRC_XTAL_D2 = 1,      /*!< Select XTAL_D2_CLK as RTC_FAST_CLK source */
99     SOC_RTC_FAST_CLK_SRC_XTAL_DIV = SOC_RTC_FAST_CLK_SRC_XTAL_D2, /*!< Alias name for `SOC_RTC_FAST_CLK_SRC_XTAL_D2` */
100     SOC_RTC_FAST_CLK_SRC_INVALID,          /*!< Invalid RTC_FAST_CLK source */
101 } soc_rtc_fast_clk_src_t;
102 
103 // Naming convention: SOC_MOD_CLK_{[upstream]clock_name}_[attr]
104 // {[upstream]clock_name}: XTAL, (BB)PLL, etc.
105 // [attr] - optional: FAST, SLOW, D<divider>, F<freq>
106 /**
107  * @brief Supported clock sources for modules (CPU, peripherals, RTC, etc.)
108  *
109  * @note enum starts from 1, to save 0 for special purpose
110  */
111 typedef enum {
112     // For CPU domain
113     SOC_MOD_CLK_CPU = 1,                       /*!< CPU_CLK can be sourced from XTAL, PLL, or RC_FAST by configuring soc_cpu_clk_src_t */
114     // For RTC domain
115     SOC_MOD_CLK_RTC_FAST,                      /*!< RTC_FAST_CLK can be sourced from XTAL_D2 or RC_FAST by configuring soc_rtc_fast_clk_src_t */
116     SOC_MOD_CLK_RTC_SLOW,                      /*!< RTC_SLOW_CLK can be sourced from RC_SLOW, XTAL32K, RC32K, or OSC_SLOW by configuring soc_rtc_slow_clk_src_t */
117     // For digital domain: peripherals, WIFI, BLE
118     SOC_MOD_CLK_PLL_F80M,                      /*!< PLL_F80M_CLK is derived from PLL (clock gating + fixed divider of 6), it has a fixed frequency of 80MHz */
119     SOC_MOD_CLK_PLL_F160M,                     /*!< PLL_F160M_CLK is derived from PLL (clock gating + fixed divider of 3), it has a fixed frequency of 160MHz */
120     SOC_MOD_CLK_PLL_F240M,                     /*!< PLL_F240M_CLK is derived from PLL (clock gating + fixed divider of 2), it has a fixed frequency of 240MHz */
121     SOC_MOD_CLK_XTAL32K,                       /*!< XTAL32K_CLK comes from the external 32kHz crystal, passing a clock gating to the peripherals */
122     SOC_MOD_CLK_RC_FAST,                       /*!< RC_FAST_CLK comes from the internal 20MHz rc oscillator, passing a clock gating to the peripherals */
123     SOC_MOD_CLK_XTAL,                          /*!< XTAL_CLK comes from the external 40MHz crystal */
124     // For LP peripherals
125     SOC_MOD_CLK_XTAL_D2,                       /*!< XTAL_D2_CLK comes from the external 40MHz crystal, passing a div of 2 to the LP peripherals */
126 
127     SOC_MOD_CLK_INVALID,                       /*!< Indication of the end of the available module clock sources */
128 } soc_module_clk_t;
129 
130 //////////////////////////////////////////////////SYSTIMER//////////////////////////////////////////////////////////////
131 
132 /**
133  * @brief Type of SYSTIMER clock source
134  */
135 typedef enum {
136     SYSTIMER_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,       /*!< SYSTIMER source clock is XTAL */
137     SYSTIMER_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST, /*!< SYSTIMER source clock is RC_FAST */
138     SYSTIMER_CLK_SRC_DEFAULT = SOC_MOD_CLK_XTAL,    /*!< SYSTIMER source clock default choice is XTAL */
139 } soc_periph_systimer_clk_src_t;
140 
141 //////////////////////////////////////////////////GPTimer///////////////////////////////////////////////////////////////
142 
143 /**
144  * @brief Array initializer for all supported clock sources of GPTimer
145  *
146  * The following code can be used to iterate all possible clocks:
147  * @code{c}
148  * soc_periph_gptimer_clk_src_t gptimer_clks[] = (soc_periph_gptimer_clk_src_t)SOC_GPTIMER_CLKS;
149  * for (size_t i = 0; i< sizeof(gptimer_clks) / sizeof(gptimer_clks[0]); i++) {
150  *     soc_periph_gptimer_clk_src_t clk = gptimer_clks[i];
151  *     // Test GPTimer with the clock `clk`
152  * }
153  * @endcode
154  */
155 #define SOC_GPTIMER_CLKS {SOC_MOD_CLK_PLL_F80M, SOC_MOD_CLK_RC_FAST, SOC_MOD_CLK_XTAL}
156 
157 /**
158  * @brief Type of GPTimer clock source
159  */
160 typedef enum {
161     GPTIMER_CLK_SRC_PLL_F80M = SOC_MOD_CLK_PLL_F80M, /*!< Select PLL_F80M as the source clock */
162     GPTIMER_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST,   /*!< Select RC_FAST as the source clock */
163     GPTIMER_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,         /*!< Select XTAL as the source clock */
164     GPTIMER_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F80M,  /*!< Select PLL_F80M as the default choice */
165 } soc_periph_gptimer_clk_src_t;
166 
167 /**
168  * @brief Type of Timer Group clock source, reserved for the legacy timer group driver
169  */
170 typedef enum {
171     TIMER_SRC_CLK_PLL_F80M = SOC_MOD_CLK_PLL_F80M,     /*!< Timer group clock source is PLL_F80M */
172     TIMER_SRC_CLK_XTAL = SOC_MOD_CLK_XTAL,             /*!< Timer group clock source is XTAL */
173     TIMER_SRC_CLK_DEFAULT = SOC_MOD_CLK_PLL_F80M,      /*!< Timer group clock source default choice is PLL_F80M */
174 } soc_periph_tg_clk_src_legacy_t;
175 
176 //////////////////////////////////////////////////RMT///////////////////////////////////////////////////////////////////
177 
178 /**
179  * @brief Array initializer for all supported clock sources of RMT
180  */
181 #define SOC_RMT_CLKS {SOC_MOD_CLK_PLL_F80M, SOC_MOD_CLK_RC_FAST, SOC_MOD_CLK_XTAL}
182 
183 /**
184  * @brief Type of RMT clock source
185  */
186 typedef enum {
187     RMT_CLK_SRC_PLL_F80M = SOC_MOD_CLK_PLL_F80M, /*!< Select PLL_F80M as the source clock */
188     RMT_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST,   /*!< Select RC_FAST as the source clock */
189     RMT_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,         /*!< Select XTAL as the source clock */
190     RMT_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F80M,  /*!< Select PLL_F80M as the default choice */
191 } soc_periph_rmt_clk_src_t;
192 
193 /**
194  * @brief Type of RMT clock source, reserved for the legacy RMT driver
195  */
196 typedef enum {
197     RMT_BASECLK_PLL_F80M = SOC_MOD_CLK_PLL_F80M, /*!< RMT source clock is PLL_F80M */
198     RMT_BASECLK_XTAL = SOC_MOD_CLK_XTAL,         /*!< RMT source clock is XTAL */
199     RMT_BASECLK_DEFAULT = SOC_MOD_CLK_PLL_F80M,  /*!< RMT source clock default choice is PLL_F80M */
200 } soc_periph_rmt_clk_src_legacy_t;
201 
202 //////////////////////////////////////////////////Temp Sensor///////////////////////////////////////////////////////////
203 
204 /**
205  * @brief Array initializer for all supported clock sources of Temperature Sensor
206  */
207 #define SOC_TEMP_SENSOR_CLKS {SOC_MOD_CLK_XTAL, SOC_MOD_CLK_RC_FAST}
208 
209 /**
210  * @brief Type of Temp Sensor clock source
211  */
212 typedef enum {
213     TEMPERATURE_SENSOR_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,       /*!< Select XTAL as the source clock */
214     TEMPERATURE_SENSOR_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST, /*!< Select RC_FAST as the source clock */
215     TEMPERATURE_SENSOR_CLK_SRC_DEFAULT = SOC_MOD_CLK_XTAL,    /*!< Select XTAL as the default choice */
216 } soc_periph_temperature_sensor_clk_src_t;
217 
218 ///////////////////////////////////////////////////UART/////////////////////////////////////////////////////////////////
219 
220 /**
221  * @brief Type of UART clock source, reserved for the legacy UART driver
222  */
223 typedef enum {
224     UART_SCLK_PLL_F80M = SOC_MOD_CLK_PLL_F80M,          /*!< UART source clock is PLL_F80M */
225     UART_SCLK_RTC = SOC_MOD_CLK_RC_FAST,                /*!< UART source clock is RC_FAST */
226     UART_SCLK_XTAL = SOC_MOD_CLK_XTAL,                  /*!< UART source clock is XTAL */
227     UART_SCLK_DEFAULT = SOC_MOD_CLK_PLL_F80M,           /*!< UART source clock default choice is PLL_F80M */
228 } soc_periph_uart_clk_src_legacy_t;
229 
230 /**
231  * @brief Type of LP_UART clock source
232  */
233 typedef enum {
234     LP_UART_SCLK_LP_FAST = SOC_MOD_CLK_RTC_FAST,        /*!< LP_UART source clock is LP(RTC)_FAST */
235     LP_UART_SCLK_XTAL_D2 = SOC_MOD_CLK_XTAL_D2,         /*!< LP_UART source clock is XTAL_D2 */
236     LP_UART_SCLK_DEFAULT = SOC_MOD_CLK_RTC_FAST,        /*!< LP_UART source clock default choice is LP(RTC)_FAST */
237 } soc_periph_lp_uart_clk_src_t;
238 
239 //////////////////////////////////////////////////MCPWM/////////////////////////////////////////////////////////////////
240 
241 /**
242  * @brief Array initializer for all supported clock sources of MCPWM Timer
243  */
244 #define SOC_MCPWM_TIMER_CLKS {SOC_MOD_CLK_PLL_F160M, SOC_MOD_CLK_XTAL}
245 
246 /**
247  * @brief Type of MCPWM timer clock source
248  */
249 typedef enum {
250     MCPWM_TIMER_CLK_SRC_PLL160M = SOC_MOD_CLK_PLL_F160M, /*!< Select PLL_F160M as the source clock */
251     MCPWM_TIMER_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,         /*!< Select XTAL as the source clock */
252     MCPWM_TIMER_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F160M, /*!< Select PLL_F160M as the default clock choice */
253 } soc_periph_mcpwm_timer_clk_src_t;
254 
255 /**
256  * @brief Array initializer for all supported clock sources of MCPWM Capture Timer
257  */
258 #define SOC_MCPWM_CAPTURE_CLKS {SOC_MOD_CLK_PLL_F160M, SOC_MOD_CLK_XTAL}
259 
260 /**
261  * @brief Type of MCPWM capture clock source
262  */
263 typedef enum {
264     MCPWM_CAPTURE_CLK_SRC_PLL160M = SOC_MOD_CLK_PLL_F160M, /*!< Select PLL_F160M as the source clock */
265     MCPWM_CAPTURE_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,         /*!< Select XTAL as the source clock */
266     MCPWM_CAPTURE_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F160M, /*!< Select PLL_F160M as the default clock choice */
267 } soc_periph_mcpwm_capture_clk_src_t;
268 
269 /**
270  * @brief Array initializer for all supported clock sources of MCPWM Carrier
271  */
272 #define SOC_MCPWM_CARRIER_CLKS {SOC_MOD_CLK_PLL_F160M, SOC_MOD_CLK_XTAL}
273 
274 /**
275  * @brief Type of MCPWM carrier clock source
276  */
277 typedef enum {
278     MCPWM_CARRIER_CLK_SRC_PLL160M = SOC_MOD_CLK_PLL_F160M, /*!< Select PLL_F160M as the source clock */
279     MCPWM_CARRIER_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,         /*!< Select XTAL as the source clock */
280     MCPWM_CARRIER_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F160M, /*!< Select PLL_F160M as the default clock choice */
281 } soc_periph_mcpwm_carrier_clk_src_t;
282 
283 ///////////////////////////////////////////////////// I2S //////////////////////////////////////////////////////////////
284 
285 /**
286  * @brief Array initializer for all supported clock sources of I2S
287  */
288 #define SOC_I2S_CLKS {SOC_MOD_CLK_PLL_F160M, SOC_MOD_CLK_XTAL, I2S_CLK_SRC_EXTERNAL}
289 
290 /**
291  * @brief I2S clock source enum
292  */
293 typedef enum {
294     I2S_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F160M,                /*!< Select PLL_F160M as the default source clock  */
295     I2S_CLK_SRC_PLL_160M = SOC_MOD_CLK_PLL_F160M,               /*!< Select PLL_F160M as the source clock */
296     I2S_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,                        /*!< Select XTAL as the source clock */
297     I2S_CLK_SRC_EXTERNAL = -1,                                  /*!< Select external clock as source clock */
298 } soc_periph_i2s_clk_src_t;
299 
300 /////////////////////////////////////////////////I2C////////////////////////////////////////////////////////////////////
301 
302 /**
303  * @brief Array initializer for all supported clock sources of I2C
304  */
305 #define SOC_I2C_CLKS {SOC_MOD_CLK_XTAL, SOC_MOD_CLK_RC_FAST}
306 
307 /**
308  * @brief Type of I2C clock source.
309  */
310 typedef enum {
311     I2C_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,                        /*!< Select XTAL as the source clock */
312     I2C_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST,                  /*!< Select RC_FAST as the source clock */
313     I2C_CLK_SRC_DEFAULT = SOC_MOD_CLK_XTAL,                     /*!< Select XTAL as the default source clock */
314 } soc_periph_i2c_clk_src_t;
315 
316 ///////////////////////////////////////////////LP_I2C///////////////////////////////////////////////////////////////////
317 
318 /**
319  * @brief Array initializer for all supported clock sources of LP_I2C
320  */
321 #define SOC_LP_I2C_CLKS {SOC_MOD_CLK_RTC_FAST, SOC_MOD_CLK_XTAL_D2}
322 
323 /**
324  * @brief Type of LP_I2C clock source.
325  */
326 typedef enum {
327     LP_I2C_SCLK_LP_FAST = SOC_MOD_CLK_RTC_FAST,                 /*!< LP_I2C source clock is RTC_FAST */
328     LP_I2C_SCLK_XTAL_D2 = SOC_MOD_CLK_XTAL_D2,                  /*!< LP_I2C source clock is XTAL_D2 */
329     LP_I2C_SCLK_DEFAULT = SOC_MOD_CLK_RTC_FAST,                 /*!< LP_I2C source clock default choice is RTC_FAST */
330 } soc_periph_lp_i2c_clk_src_t;
331 
332 /////////////////////////////////////////////////SPI////////////////////////////////////////////////////////////////////
333 
334 /**
335  * @brief Array initializer for all supported clock sources of SPI
336  */
337 #define SOC_SPI_CLKS {SOC_MOD_CLK_PLL_F80M, SOC_MOD_CLK_XTAL, SOC_MOD_CLK_RC_FAST}
338 
339 /**
340  * @brief Type of SPI clock source.
341  */
342 typedef enum {
343     SPI_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F80M,     /*!< Select PLL_80M as SPI source clock */
344     SPI_CLK_SRC_PLL_F80M = SOC_MOD_CLK_PLL_F80M,    /*!< Select PLL_80M as SPI source clock */
345     SPI_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,            /*!< Select XTAL as SPI source clock */
346     SPI_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST,      /*!< Select RC_FAST as SPI source clock */
347 } soc_periph_spi_clk_src_t;
348 
349 //////////////////////////////////////////////////SDM//////////////////////////////////////////////////////////////
350 
351 /**
352  * @brief Array initializer for all supported clock sources of SDM
353  */
354 #define SOC_SDM_CLKS {SOC_MOD_CLK_PLL_F80M, SOC_MOD_CLK_XTAL}
355 
356 /**
357  * @brief Sigma Delta Modulator clock source
358  */
359 typedef enum {
360     SDM_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,         /*!< Select XTAL clock as the source clock */
361     SDM_CLK_SRC_PLL_F80M = SOC_MOD_CLK_PLL_F80M, /*!< Select PLL_F80M clock as the source clock */
362     SDM_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F80M,  /*!< Select PLL_F80M clock as the default clock choice */
363 } soc_periph_sdm_clk_src_t;
364 
365 //////////////////////////////////////////////////GPIO Glitch Filter////////////////////////////////////////////////////
366 
367 /**
368  * @brief Array initializer for all supported clock sources of Glitch Filter
369  */
370 #define SOC_GLITCH_FILTER_CLKS {SOC_MOD_CLK_PLL_F80M, SOC_MOD_CLK_XTAL}
371 
372 /**
373  * @brief Glitch filter clock source
374  */
375 
376 typedef enum {
377     GLITCH_FILTER_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,         /*!< Select XTAL clock as the source clock */
378     GLITCH_FILTER_CLK_SRC_PLL_F80M = SOC_MOD_CLK_PLL_F80M, /*!< Select PLL_F80M clock as the source clock */
379     GLITCH_FILTER_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F80M,  /*!< Select PLL_F80M clock as the default clock choice */
380 } soc_periph_glitch_filter_clk_src_t;
381 
382 //////////////////////////////////////////////////TWAI//////////////////////////////////////////////////////////////////
383 
384 /**
385  * @brief Array initializer for all supported clock sources of TWAI
386  */
387 #define SOC_TWAI_CLKS {SOC_MOD_CLK_XTAL}
388 
389 /**
390  * @brief TWAI clock source
391  */
392 typedef enum {
393     TWAI_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,    /*!< Select XTAL as the source clock */
394     TWAI_CLK_SRC_DEFAULT = SOC_MOD_CLK_XTAL, /*!< Select XTAL as the default clock choice */
395 } soc_periph_twai_clk_src_t;
396 
397 //////////////////////////////////////////////////ADC///////////////////////////////////////////////////////////////////
398 
399 /**
400  * @brief Array initializer for all supported clock sources of ADC digital controller
401  */
402 #define SOC_ADC_DIGI_CLKS {SOC_MOD_CLK_XTAL, SOC_MOD_CLK_PLL_F80M, SOC_MOD_CLK_RC_FAST}
403 
404 /**
405  * @brief ADC digital controller clock source
406  */
407 typedef enum {
408     ADC_DIGI_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,           /*!< Select XTAL as the source clock */
409     ADC_DIGI_CLK_SRC_PLL_F80M = SOC_MOD_CLK_PLL_F80M,   /*!< Select PLL_F80M as the source clock */
410     ADC_DIGI_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST,     /*!< Select RC_FAST as the source clock */
411     ADC_DIGI_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F80M,    /*!< Select PLL_F80M as the default clock choice */
412 } soc_periph_adc_digi_clk_src_t;
413 
414 //////////////////////////////////////////////////MWDT/////////////////////////////////////////////////////////////////
415 
416 /**
417  * @brief Array initializer for all supported clock sources of MWDT
418  */
419 #define SOC_MWDT_CLKS {SOC_MOD_CLK_XTAL, SOC_MOD_CLK_PLL_F80M, SOC_MOD_CLK_RC_FAST}
420 
421 /**
422  * @brief MWDT clock source
423  */
424 typedef enum {
425     MWDT_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,           /*!< Select XTAL as the source clock */
426     MWDT_CLK_SRC_PLL_F80M = SOC_MOD_CLK_PLL_F80M,   /*!< Select PLL fixed 80 MHz as the source clock */
427     MWDT_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST,     /*!< Select RTC fast as the source clock */
428     MWDT_CLK_SRC_DEFAULT = SOC_MOD_CLK_XTAL,        /*!< Select PLL fixed 80 MHz as the default clock choice */
429 } soc_periph_mwdt_clk_src_t;
430 
431 //////////////////////////////////////////////////LEDC/////////////////////////////////////////////////////////////////
432 
433 /**
434  * @brief Array initializer for all supported clock sources of LEDC
435  */
436 #define SOC_LEDC_CLKS {SOC_MOD_CLK_XTAL, SOC_MOD_CLK_PLL_F80M, SOC_MOD_CLK_RC_FAST}
437 
438 /**
439  * @brief Type of LEDC clock source, reserved for the legacy LEDC driver
440  */
441 typedef enum {
442     LEDC_AUTO_CLK = 0,                              /*!< LEDC source clock will be automatically selected based on the giving resolution and duty parameter when init the timer*/
443     LEDC_USE_PLL_DIV_CLK = SOC_MOD_CLK_PLL_F80M,    /*!< Select PLL_F80M clock as the source clock */
444     LEDC_USE_RC_FAST_CLK = SOC_MOD_CLK_RC_FAST,     /*!< Select RC_FAST as the source clock */
445     LEDC_USE_XTAL_CLK = SOC_MOD_CLK_XTAL,           /*!< Select XTAL as the source clock */
446 
447     LEDC_USE_RTC8M_CLK __attribute__((deprecated("please use 'LEDC_USE_RC_FAST_CLK' instead"))) = LEDC_USE_RC_FAST_CLK,   /*!< Alias of 'LEDC_USE_RC_FAST_CLK' */
448 } soc_periph_ledc_clk_src_legacy_t;
449 
450 //////////////////////////////////////////////////PARLIO////////////////////////////////////////////////////////////////
451 
452 /**
453  * @brief Array initializer for all supported clock sources of PARLIO
454  */
455 #define SOC_PARLIO_CLKS {SOC_MOD_CLK_XTAL, SOC_MOD_CLK_PLL_F240M}
456 
457 /**
458  * @brief PARLIO clock source
459  */
460 typedef enum {
461     PARLIO_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,           /*!< Select XTAL as the source clock */
462     PARLIO_CLK_SRC_PLL_F240M = SOC_MOD_CLK_PLL_F240M, /*!< Select PLL_F240M as the source clock */
463     PARLIO_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F240M,   /*!< Select PLL_F240M as the default clock choice */
464 } soc_periph_parlio_clk_src_t;
465 
466 //////////////////////////////////////////////CLOCK OUTPUT///////////////////////////////////////////////////////////
467 typedef enum {
468     CLKOUT_SIG_PLL      = 1,    /*!< PLL_CLK is the output of crystal oscillator frequency multiplier */
469     CLKOUT_SIG_XTAL     = 5,    /*!< Main crystal oscillator clock */
470     CLKOUT_SIG_PLL_F80M = 13,   /*!< From PLL, usually be 80MHz */
471     CLKOUT_SIG_CPU      = 16,   /*!< CPU clock */
472     CLKOUT_SIG_AHB      = 17,   /*!< AHB clock */
473     CLKOUT_SIG_APB      = 18,   /*!< APB clock */
474     CLKOUT_SIG_XTAL32K  = 21,   /*!< External 32kHz crystal clock */
475     CLKOUT_SIG_EXT32K   = 22,   /*!< External slow clock input through XTAL_32K_P */
476     CLKOUT_SIG_RC_FAST  = 23,   /*!< RC fast clock, about 17.5MHz */
477     CLKOUT_SIG_RC_32K   = 24,   /*!< Internal slow RC oscillator */
478     CLKOUT_SIG_RC_SLOW  = 25,   /*!< RC slow clock, depends on the RTC_CLK_SRC configuration */
479     CLKOUT_SIG_INVALID  = 0xFF,
480 } soc_clkout_sig_id_t;
481 
482 #ifdef __cplusplus
483 }
484 #endif
485