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  ************************* ESP32H2 Root Clock Source ****************************
14  * 1) Internal 8MHz RC Oscillator: RC_FAST (usually referred as FOSC in TRM and reg. description)
15  *
16  *    This RC oscillator generates a ~8.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 32MHz Crystal Clock: XTAL
21  *
22  * 3) Internal 136kHz RC Oscillator: RC_SLOW (usually 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 GPIO13 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 CK8M_DFREQ = 860, RC_FAST clock frequency is 8.5 MHz +/- 7% */
47 #define SOC_CLK_RC_FAST_FREQ_APPROX         8500000                             /*!< 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 8.5MHz RC oscillator */
62     SOC_ROOT_CLK_INT_RC_SLOW,          /*!< Internal 136kHz RC oscillator */
63     SOC_ROOT_CLK_EXT_XTAL,             /*!< External 32MHz crystal */
64     SOC_ROOT_CLK_EXT_XTAL32K,          /*!< External 32kHz crystal/clock signal */
65     SOC_ROOT_CLK_INT_RC32K,            /*!< Internal 32kHz RC oscillator */
66     SOC_ROOT_CLK_EXT_OSC_SLOW,         /*!< External slow clock signal at pin13 */
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 one of the outputs of 32MHz crystal oscillator frequency multiplier, 96MHz) */
76     SOC_CPU_CLK_SRC_RC_FAST = 2,           /*!< Select RC_FAST_CLK as CPU_CLK source */
77     SOC_CPU_CLK_SRC_FLASH_PLL = 3,         /*!< Select FLASH_PLL_CLK as CPU_CLK source (FLASH_PLL_CLK is the other output of 32MHz crystal oscillator frequency multiplier, 64MHz) */
78     SOC_CPU_CLK_SRC_INVALID,               /*!< Invalid CPU_CLK source */
79 } soc_cpu_clk_src_t;
80 
81 /**
82  * @brief RTC_SLOW_CLK mux inputs, which are the supported clock sources for the RTC_SLOW_CLK
83  * @note Enum values are matched with the register field values on purpose
84  */
85 typedef enum {
86     SOC_RTC_SLOW_CLK_SRC_RC_SLOW = 0,      /*!< Select RC_SLOW_CLK as RTC_SLOW_CLK source */
87     SOC_RTC_SLOW_CLK_SRC_XTAL32K = 1,      /*!< Select XTAL32K_CLK as RTC_SLOW_CLK source */
88     SOC_RTC_SLOW_CLK_SRC_RC32K = 2,        /*!< Select RC32K_CLK as RTC_SLOW_CLK source */
89     SOC_RTC_SLOW_CLK_SRC_OSC_SLOW = 3,     /*!< Select OSC_SLOW_CLK (external slow clock) as RTC_SLOW_CLK source */
90     SOC_RTC_SLOW_CLK_SRC_INVALID,          /*!< Invalid RTC_SLOW_CLK source */
91 } soc_rtc_slow_clk_src_t;
92 
93 /**
94  * @brief RTC_FAST_CLK mux inputs, which are the supported clock sources for the RTC_FAST_CLK
95  * @note Enum values are matched with the register field values on purpose
96  */
97 typedef enum {
98     SOC_RTC_FAST_CLK_SRC_RC_FAST = 0,      /*!< Select RC_FAST_CLK as RTC_FAST_CLK source */
99     SOC_RTC_FAST_CLK_SRC_XTAL_D2 = 1,      /*!< Select XTAL_D2_CLK (may referred as XTAL_CLK_DIV_2) as RTC_FAST_CLK source */
100     SOC_RTC_FAST_CLK_SRC_XTAL_DIV = SOC_RTC_FAST_CLK_SRC_XTAL_D2, /*!< Alias name for `SOC_RTC_FAST_CLK_SRC_XTAL_D2` */
101     SOC_RTC_FAST_CLK_SRC_LP_PLL = 2,       /*!< Select LP_PLL_CLK as RTC_FAST_CLK source (LP_PLL_CLK is a 8MHz clock sourced from RC32K or XTAL32K)*/
102     SOC_RTC_FAST_CLK_SRC_INVALID,          /*!< Invalid RTC_FAST_CLK source */
103 } soc_rtc_fast_clk_src_t;
104 
105 /**
106  * @brief LP_PLL_CLK mux inputs, which are the supported clock sources for the LP_PLL_CLK
107  * @note Enum values are matched with the register field values on purpose
108  */
109 typedef enum {
110     SOC_LP_PLL_CLK_SRC_RC32K = 0,          /*!< Select RC32K_CLK as LP_PLL_CLK source */
111     SOC_LP_PLL_CLK_SRC_XTAL32K = 1,        /*!< Select XTAL32K_CLK as LP_PLL_CLK source */
112     SOC_LP_PLL_CLK_SRC_INVALID,            /*!< Invalid LP_PLL_CLK source */
113 } soc_lp_pll_clk_src_t;
114 
115 // Naming convention: SOC_MOD_CLK_{[upstream]clock_name}_[attr]
116 // {[upstream]clock_name}: XTAL, (BB)PLL, etc.
117 // [attr] - optional: FAST, SLOW, D<divider>, F<freq>
118 /**
119  * @brief Supported clock sources for modules (CPU, peripherals, RTC, etc.)
120  *
121  * @note enum starts from 1, to save 0 for special purpose
122  */
123 typedef enum {
124     // For CPU domain
125     SOC_MOD_CLK_CPU = 1,                       /*!< CPU_CLK can be sourced from XTAL, PLL, RC_FAST, or PLL2 by configuring soc_cpu_clk_src_t */
126     // For RTC domain
127     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 */
128     SOC_MOD_CLK_RTC_SLOW,                      /*!< RTC_SLOW_CLK can be sourced from RC_SLOW, XTAL32K, OSC_SLOW, or RC32K by configuring soc_rtc_slow_clk_src_t */
129     // For digital domain: peripherals, WIFI, BLE
130     SOC_MOD_CLK_PLL_F48M,                      /*!< PLL_F48M_CLK is derived from PLL (clock gating + fixed divider of 2), it has a fixed frequency of 48MHz */
131     SOC_MOD_CLK_PLL_F64M,                      /*!< PLL_F64M_CLK is derived from FLASH_PLL (clock gating), it has a fixed frequency of 64MHz */
132     SOC_MOD_CLK_PLL_F96M,                      /*!< PLL_F96M_CLK is derived from PLL (clock gating), it has a fixed frequency of 96MHz */
133     SOC_MOD_CLK_XTAL32K,                       /*!< XTAL32K_CLK comes from the external 32kHz crystal, passing a clock gating to the peripherals */
134     SOC_MOD_CLK_RC_FAST,                       /*!< RC_FAST_CLK comes from the internal 8MHz rc oscillator, passing a clock gating to the peripherals */
135     SOC_MOD_CLK_XTAL,                          /*!< XTAL_CLK comes from the external 32MHz crystal */
136     SOC_MOD_CLK_INVALID,                       /*!< Indication of the end of the available module clock sources */
137 } soc_module_clk_t;
138 
139 //////////////////////////////////////////////////SYSTIMER///////////////////////////////////////////////////////////////
140 
141 /**
142  * @brief Type of SYSTIMER clock source
143  */
144 typedef enum {
145     SYSTIMER_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,       /*!< SYSTIMER source clock is XTAL */
146     SYSTIMER_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST, /*!< SYSTIMER source clock is RC_FAST */
147     SYSTIMER_CLK_SRC_DEFAULT = SOC_MOD_CLK_XTAL,    /*!< SYSTIMER source clock default choice is XTAL */
148 } soc_periph_systimer_clk_src_t;
149 
150 //////////////////////////////////////////////////GPTimer///////////////////////////////////////////////////////////////
151 
152 /**
153  * @brief Array initializer for all supported clock sources of GPTimer
154  *
155  * The following code can be used to iterate all possible clocks:
156  * @code{c}
157  * soc_periph_gptimer_clk_src_t gptimer_clks[] = (soc_periph_gptimer_clk_src_t)SOC_GPTIMER_CLKS;
158  * for (size_t i = 0; i< sizeof(gptimer_clks) / sizeof(gptimer_clks[0]); i++) {
159  *     soc_periph_gptimer_clk_src_t clk = gptimer_clks[i];
160  *     // Test GPTimer with the clock `clk`
161  * }
162  * @endcode
163  */
164 #define SOC_GPTIMER_CLKS {SOC_MOD_CLK_PLL_F48M, SOC_MOD_CLK_RC_FAST, SOC_MOD_CLK_XTAL}
165 
166 /**
167  * @brief Type of GPTimer clock source
168  */
169 typedef enum {
170     GPTIMER_CLK_SRC_PLL_F48M = SOC_MOD_CLK_PLL_F48M, /*!< Select PLL_F48M as the source clock */
171     GPTIMER_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST,   /*!< Select RC_FAST as the source clock */
172     GPTIMER_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,         /*!< Select XTAL as the source clock */
173     GPTIMER_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F48M,  /*!< Select PLL_F48M as the default choice */
174 } soc_periph_gptimer_clk_src_t;
175 
176 /**
177  * @brief Type of Timer Group clock source, reserved for the legacy timer group driver
178  */
179 typedef enum {
180     TIMER_SRC_CLK_PLL_F48M = SOC_MOD_CLK_PLL_F48M,     /*!< Timer group clock source is PLL_F48M */
181     TIMER_SRC_CLK_XTAL = SOC_MOD_CLK_XTAL,             /*!< Timer group clock source is XTAL */
182     TIMER_SRC_CLK_DEFAULT = SOC_MOD_CLK_PLL_F48M,      /*!< Timer group clock source default choice is PLL_F48M */
183 } soc_periph_tg_clk_src_legacy_t;
184 
185 //////////////////////////////////////////////////RMT///////////////////////////////////////////////////////////////////
186 
187 /**
188  * @brief Array initializer for all supported clock sources of RMT
189  */
190 #define SOC_RMT_CLKS {SOC_MOD_CLK_XTAL, SOC_MOD_CLK_RC_FAST}
191 
192 /**
193  * @brief Type of RMT clock source
194  */
195 typedef enum {
196     RMT_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST, /*!< Select RC_FAST as the source clock */
197     RMT_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,       /*!< Select XTAL as the source clock */
198     RMT_CLK_SRC_DEFAULT = SOC_MOD_CLK_XTAL,    /*!< Select XTAL as the default choice */
199 } soc_periph_rmt_clk_src_t;
200 
201 /**
202  * @brief Type of RMT clock source, reserved for the legacy RMT driver
203  */
204 typedef enum {
205     RMT_BASECLK_XTAL = SOC_MOD_CLK_XTAL,    /*!< RMT source clock is XTAL */
206     RMT_BASECLK_DEFAULT = SOC_MOD_CLK_XTAL, /*!< RMT source clock default choice is XTAL */
207 } soc_periph_rmt_clk_src_legacy_t;
208 
209 //////////////////////////////////////////////////Temp Sensor///////////////////////////////////////////////////////////
210 
211 /**
212  * @brief Array initializer for all supported clock sources of Temperature Sensor
213  */
214 #define SOC_TEMP_SENSOR_CLKS {SOC_MOD_CLK_XTAL, SOC_MOD_CLK_RC_FAST}
215 
216 /**
217  * @brief Type of Temp Sensor clock source
218  */
219 typedef enum {
220     TEMPERATURE_SENSOR_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,       /*!< Select XTAL as the source clock */
221     TEMPERATURE_SENSOR_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST, /*!< Select RC_FAST as the source clock */
222     TEMPERATURE_SENSOR_CLK_SRC_DEFAULT = SOC_MOD_CLK_XTAL,    /*!< Select XTAL as the default choice */
223 } soc_periph_temperature_sensor_clk_src_t;
224 
225 ///////////////////////////////////////////////////UART/////////////////////////////////////////////////////////////////
226 
227 /**
228  * @brief Type of UART clock source, reserved for the legacy UART driver
229  */
230 typedef enum {
231     UART_SCLK_PLL_F48M = SOC_MOD_CLK_PLL_F48M,     /*!< UART source clock is PLL_F48M */
232     UART_SCLK_RTC = SOC_MOD_CLK_RC_FAST,           /*!< UART source clock is RC_FAST */
233     UART_SCLK_XTAL = SOC_MOD_CLK_XTAL,             /*!< UART source clock is XTAL */
234     UART_SCLK_DEFAULT = SOC_MOD_CLK_PLL_F48M,      /*!< UART source clock default choice is PLL_F48M */
235 } soc_periph_uart_clk_src_legacy_t;
236 
237 //////////////////////////////////////////////////MCPWM/////////////////////////////////////////////////////////////////
238 
239 /**
240  * @brief Array initializer for all supported clock sources of MCPWM Timer
241  */
242 #define SOC_MCPWM_TIMER_CLKS {SOC_MOD_CLK_PLL_F96M, SOC_MOD_CLK_XTAL}
243 
244 /**
245  * @brief Type of MCPWM timer clock source
246  */
247 typedef enum {
248     MCPWM_TIMER_CLK_SRC_PLL96M = SOC_MOD_CLK_PLL_F96M,   /*!< Select PLL_F96M as the source clock */
249     MCPWM_TIMER_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,         /*!< Select XTAL as the source clock */
250     MCPWM_TIMER_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F96M,  /*!< Select PLL_F96M as the default clock choice */
251 } soc_periph_mcpwm_timer_clk_src_t;
252 
253 /**
254  * @brief Array initializer for all supported clock sources of MCPWM Capture Timer
255  */
256 #define SOC_MCPWM_CAPTURE_CLKS {SOC_MOD_CLK_PLL_F96M, SOC_MOD_CLK_XTAL}
257 
258 /**
259  * @brief Type of MCPWM capture clock source
260  */
261 typedef enum {
262     MCPWM_CAPTURE_CLK_SRC_PLL96M = SOC_MOD_CLK_PLL_F96M,   /*!< Select PLL_F96M as the source clock */
263     MCPWM_CAPTURE_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,         /*!< Select XTAL as the source clock */
264     MCPWM_CAPTURE_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F96M,  /*!< Select PLL_F96M as the default clock choice */
265 } soc_periph_mcpwm_capture_clk_src_t;
266 
267 /**
268  * @brief Array initializer for all supported clock sources of MCPWM Carrier
269  */
270 #define SOC_MCPWM_CARRIER_CLKS {SOC_MOD_CLK_PLL_F96M, SOC_MOD_CLK_XTAL}
271 
272 /**
273  * @brief Type of MCPWM carrier clock source
274  */
275 typedef enum {
276     MCPWM_CARRIER_CLK_SRC_PLL96M = SOC_MOD_CLK_PLL_F96M,   /*!< Select PLL_F96M as the source clock */
277     MCPWM_CARRIER_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,         /*!< Select XTAL as the source clock */
278     MCPWM_CARRIER_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F96M,  /*!< Select PLL_F96M as the default clock choice */
279 } soc_periph_mcpwm_carrier_clk_src_t;
280 
281 ///////////////////////////////////////////////////// I2S //////////////////////////////////////////////////////////////
282 
283 /**
284  * @brief Array initializer for all supported clock sources of I2S
285  */
286 #define SOC_I2S_CLKS {SOC_MOD_CLK_PLL_F96M, SOC_MOD_CLK_PLL_F64M, SOC_MOD_CLK_XTAL}
287 
288 /**
289  * @brief I2S clock source enum
290  */
291 typedef enum {
292     I2S_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F96M,                 /*!< Select PLL_F96M as the default source clock */
293     I2S_CLK_SRC_PLL_96M = SOC_MOD_CLK_PLL_F96M,                 /*!< Select PLL_F96M as the source clock */
294     I2S_CLK_SRC_PLL_64M = SOC_MOD_CLK_PLL_F64M,                 /*!< Select PLL_F64M as the source clock */
295     I2S_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,                        /*!< Select XTAL as the source clock */
296 } soc_periph_i2s_clk_src_t;
297 
298 /////////////////////////////////////////////////I2C////////////////////////////////////////////////////////////////////
299 
300 /**
301  * @brief Array initializer for all supported clock sources of I2C
302  */
303 #define SOC_I2C_CLKS {SOC_MOD_CLK_XTAL, SOC_MOD_CLK_RC_FAST}
304 
305 /**
306  * @brief Type of I2C clock source.
307  */
308 typedef enum {
309     I2C_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,                        /*!< Select XTAL as the source clock */
310     I2C_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST,                  /*!< Select RC_FAST as the source clock */
311     I2C_CLK_SRC_DEFAULT = SOC_MOD_CLK_XTAL,                     /*!< Select XTAL as the default source clock */
312 } soc_periph_i2c_clk_src_t;
313 
314 /////////////////////////////////////////////////SPI////////////////////////////////////////////////////////////////////
315 
316 /**
317  * @brief Array initializer for all supported clock sources of SPI
318  */
319 #define SOC_SPI_CLKS {SOC_MOD_CLK_XTAL, SOC_MOD_CLK_RC_FAST, SOC_MOD_CLK_PLL_F48M}
320 
321 /**
322  * @brief Type of SPI clock source.
323  */
324 typedef enum {
325     SPI_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F48M,     /*!< Select PLL_48M as SPI source clock */
326     SPI_CLK_SRC_PLL_F48M = SOC_MOD_CLK_PLL_F48M,    /*!< Select PLL_48M as SPI source clock */
327     SPI_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,            /*!< Select XTAL as SPI source clock */
328     SPI_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST,      /*!< Select RC_FAST as SPI source clock */
329 } soc_periph_spi_clk_src_t;
330 
331 //////////////////////////////////////////////////SDM///////////////////////////////////////////////////////////////////
332 
333 /**
334  * @brief Array initializer for all supported clock sources of SDM
335  */
336 #define SOC_SDM_CLKS {SOC_MOD_CLK_PLL_F48M, SOC_MOD_CLK_XTAL}
337 
338 /**
339  * @brief Sigma Delta Modulator clock source
340  */
341 typedef enum {
342     SDM_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,                        /*!< Select XTAL clock as the source clock */
343     SDM_CLK_SRC_PLL_F48M = SOC_MOD_CLK_PLL_F48M,                /*!< Select PLL_F48M clock as the source clock */
344     SDM_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F48M,                 /*!< Select PLL_F48M as the default clock choice */
345 } soc_periph_sdm_clk_src_t;
346 
347 ///////////////////////////////////////////////////Analog Comparator////////////////////////////////////////////////////
348 
349 /**
350  * @brief Array initializer for all supported clock sources of Analog Comparator
351  */
352 #define SOC_ANA_CMPR_CLKS {SOC_MOD_CLK_PLL_F48M, SOC_MOD_CLK_XTAL}
353 
354 /**
355  * @brief Sigma Delta Modulator clock source
356  */
357 typedef enum {
358     ANA_CMPR_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,                   /*!< Select XTAL clock as the source clock */
359     ANA_CMPR_CLK_SRC_PLL_F48M = SOC_MOD_CLK_PLL_F48M,           /*!< Select PLL_F48M clock as the source clock */
360     ANA_CMPR_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F48M,            /*!< Select PLL_F48M as the default clock choice */
361 } soc_periph_ana_cmpr_clk_src_t;
362 
363 //////////////////////////////////////////////////GPIO Glitch Filter////////////////////////////////////////////////////
364 
365 /**
366  * @brief Array initializer for all supported clock sources of Glitch Filter
367  */
368 #define SOC_GLITCH_FILTER_CLKS {SOC_MOD_CLK_PLL_F48M, SOC_MOD_CLK_XTAL}
369 
370 /**
371  * @brief Glitch filter clock source
372  */
373 
374 typedef enum {
375     GLITCH_FILTER_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,         /*!< Select XTAL clock as the source clock */
376     GLITCH_FILTER_CLK_SRC_PLL_F48M = SOC_MOD_CLK_PLL_F48M, /*!< Select PLL_F48M clock as the source clock */
377     GLITCH_FILTER_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F48M,  /*!< Select PLL_F48M clock as the default clock choice */
378 } soc_periph_glitch_filter_clk_src_t;
379 
380 //////////////////////////////////////////////////TWAI/////////////////////////////////////////////////////////////////
381 
382 /**
383  * @brief Array initializer for all supported clock sources of TWAI
384  */
385 #define SOC_TWAI_CLKS {SOC_MOD_CLK_XTAL}
386 
387 /**
388  * @brief TWAI clock source
389  */
390 typedef enum {
391     TWAI_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,       /*!< Select XTAL as the source clock */
392     TWAI_CLK_SRC_DEFAULT = SOC_MOD_CLK_XTAL,    /*!< Select XTAL as the default clock choice */
393 } soc_periph_twai_clk_src_t;
394 
395 //////////////////////////////////////////////////ADC///////////////////////////////////////////////////////////////////
396 
397 /**
398  * @brief Array initializer for all supported clock sources of ADC digital controller
399  */
400 #define SOC_ADC_DIGI_CLKS {SOC_MOD_CLK_XTAL, SOC_MOD_CLK_PLL_F96M, SOC_MOD_CLK_RC_FAST}
401 
402 /**
403  * @brief ADC digital controller clock source
404  */
405 typedef enum {
406     ADC_DIGI_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,           /*!< Select XTAL as the source clock */
407     ADC_DIGI_CLK_SRC_PLL_F96M = SOC_MOD_CLK_PLL_F96M,   /*!< Select PLL_F96M as the source clock */
408     ADC_DIGI_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST,     /*!< Select RC_FAST as the source clock */
409     ADC_DIGI_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F96M,    /*!< Select PLL_F96M as the default clock choice */
410 } soc_periph_adc_digi_clk_src_t;
411 
412 //////////////////////////////////////////////////MWDT/////////////////////////////////////////////////////////////////
413 
414 /**
415  * @brief Array initializer for all supported clock sources of MWDT
416  */
417 #define SOC_MWDT_CLKS {SOC_MOD_CLK_XTAL, SOC_MOD_CLK_PLL_F48M, SOC_MOD_CLK_RC_FAST}
418 
419 /**
420  * @brief MWDT clock source
421  */
422 typedef enum {
423     MWDT_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,           /*!< Select XTAL as the source clock */
424     MWDT_CLK_SRC_PLL_F48M = SOC_MOD_CLK_PLL_F48M,   /*!< Select PLL fixed 48 MHz as the source clock */
425     MWDT_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST,     /*!< Select RTC fast as the source clock */
426     MWDT_CLK_SRC_DEFAULT = SOC_MOD_CLK_XTAL,        /*!< Select PLL as the default clock choice */
427 } soc_periph_mwdt_clk_src_t;
428 
429 //////////////////////////////////////////////////LEDC/////////////////////////////////////////////////////////////////
430 
431 /**
432  * @brief Array initializer for all supported clock sources of LEDC
433  */
434 #define SOC_LEDC_CLKS {SOC_MOD_CLK_XTAL, SOC_MOD_CLK_PLL_F96M, SOC_MOD_CLK_RC_FAST}
435 
436 /**
437  * @brief Type of LEDC clock source, reserved for the legacy LEDC driver
438  */
439 typedef enum {
440     LEDC_AUTO_CLK = 0,                              /*!< LEDC source clock will be automatically selected based on the giving resolution and duty parameter when init the timer*/
441     LEDC_USE_PLL_DIV_CLK = SOC_MOD_CLK_PLL_F96M,    /*!< Select PLL_F96M clock as the source clock */
442     LEDC_USE_RC_FAST_CLK = SOC_MOD_CLK_RC_FAST,     /*!< Select RC_FAST as the source clock */
443     LEDC_USE_XTAL_CLK = SOC_MOD_CLK_XTAL,           /*!< Select XTAL as the source clock */
444 
445     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' */
446 } soc_periph_ledc_clk_src_legacy_t;
447 
448 //////////////////////////////////////////////////PARLIO////////////////////////////////////////////////////////////////
449 
450 /**
451  * @brief Array initializer for all supported clock sources of PARLIO
452  */
453 #define SOC_PARLIO_CLKS {SOC_MOD_CLK_XTAL, SOC_MOD_CLK_PLL_F96M}
454 
455 /**
456  * @brief PARLIO clock source
457  */
458 typedef enum {
459     PARLIO_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,          /*!< Select XTAL as the source clock */
460     PARLIO_CLK_SRC_PLL_F96M = SOC_MOD_CLK_PLL_F96M,  /*!< Select PLL_F96M as the source clock */
461     PARLIO_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F96M,   /*!< Select PLL_F96M as the default clock choice */
462 } soc_periph_parlio_clk_src_t;
463 
464 //////////////////////////////////////////////////MSPI///////////////////////////////////////////////////////////////////
465 /**
466  * @brief Array initializer for all supported clock sources of MSPI digital controller
467  */
468 #define SOC_MSPI_CLKS {SOC_MOD_CLK_XTAL, SOC_MOD_CLK_RC_FAST, SOC_MOD_CLK_PLL_F64M, SOC_MOD_CLK_PLL_F48M}
469 /**
470  * @brief MSPI digital controller clock source
471  */
472 typedef enum {
473     MSPI_CLK_SRC_XTAL = SOC_MOD_CLK_XTAL,           /*!< Select XTAL as the source clock */
474     MSPI_CLK_SRC_RC_FAST = SOC_MOD_CLK_RC_FAST,     /*!< Select RC_FAST as the source clock */
475     MSPI_CLK_SRC_PLL_F64M = SOC_MOD_CLK_PLL_F64M,   /*!< Select PLL_F64M as the source clock */
476     MSPI_CLK_SRC_PLL_F48M = SOC_MOD_CLK_PLL_F48M,   /*!< Select PLL_F48M as the source clock */
477     MSPI_CLK_SRC_DEFAULT = SOC_MOD_CLK_PLL_F64M,    /*!< Select PLL_F64M as the default clock choice */
478     MSPI_CLK_SRC_ROM_DEFAULT = SOC_MOD_CLK_XTAL,    /*!< Select XTAL as ROM default clock source */
479 } soc_periph_mspi_clk_src_t;
480 
481 #ifdef __cplusplus
482 }
483 #endif
484