1 /*
2 * Copyright 2022-2023, NXP
3 * All rights reserved.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8 #ifndef _FSL_CLOCK_H_
9 #define _FSL_CLOCK_H_
10
11 #include "fsl_common.h"
12
13 /*! @addtogroup clock */
14 /*! @{ */
15
16 /*! @file */
17
18 /*******************************************************************************
19 * Definitions
20 *****************************************************************************/
21
22 /*! @name Driver version */
23 /*@{*/
24 /*! @brief CLOCK driver version 2.0.0. */
25 #define FSL_CLOCK_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
26 /*@}*/
27
28 /*! @brief Configure whether driver controls clock
29 *
30 * When set to 0, peripheral drivers will enable clock in initialize function
31 * and disable clock in de-initialize function. When set to 1, peripheral
32 * driver will not control the clock, application could control the clock out of
33 * the driver.
34 *
35 * @note All drivers share this feature switcher. If it is set to 1, application
36 * should handle clock enable and disable for all drivers.
37 */
38 #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL))
39 #define FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL 0
40 #endif
41
42 /*!
43 * @brief User-defined the size of cache for CLOCK_PllGetConfig() function.
44 *
45 * Once define this MACRO to be non-zero value, CLOCK_PllGetConfig() function
46 * would cache the recent calulation and accelerate the execution to get the
47 * right settings.
48 */
49 #ifndef CLOCK_USR_CFG_PLL_CONFIG_CACHE_COUNT
50 #define CLOCK_USR_CFG_PLL_CONFIG_CACHE_COUNT 2U
51 #endif
52
53 /* Definition for delay API in clock driver, users can redefine it to the real application. */
54 #ifndef SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY
55 #define SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY (150000000UL)
56 #endif
57
58 /*! @brief Clock ip name array for ROM. */
59 #define ROM_CLOCKS \
60 { \
61 kCLOCK_Rom \
62 }
63 /*! @brief Clock ip name array for SRAM. */
64 #define SRAM_CLOCKS \
65 { \
66 kCLOCK_Sram1, kCLOCK_Sram2, kCLOCK_Sram3, kCLOCK_Sram4, kCLOCK_Sram5, kCLOCK_Sram6, kCLOCK_Sram7 \
67 }
68 /*! @brief Clock ip name array for FMC. */
69 #define FMC_CLOCKS \
70 { \
71 kCLOCK_Fmc \
72 }
73 /*! @brief Clock ip name array for INPUTMUX. */
74 #define INPUTMUX_CLOCKS \
75 { \
76 kCLOCK_InputMux0 \
77 }
78 /*! @brief Clock ip name array for GPIO. */
79 #define GPIO_CLOCKS \
80 { \
81 kCLOCK_Gpio0, kCLOCK_Gpio1, kCLOCK_Gpio2, kCLOCK_Gpio3, kCLOCK_Gpio4 \
82 }
83 /*! @brief Clock ip name array for PINT. */
84 #define PINT_CLOCKS \
85 { \
86 kCLOCK_Pint \
87 }
88 /*! @brief Clock ip name array for DMA. */
89 #define DMA_CLOCKS \
90 { \
91 kCLOCK_Dma0, kCLOCK_Dma1 \
92 }
93 /*! @brief Clock gate name array for EDMA. */
94 #define EDMA_CLOCKS \
95 { \
96 kCLOCK_Dma0, kCLOCK_Dma1 \
97 }
98 /*! @brief Clock ip name array for CRC. */
99 #define CRC_CLOCKS \
100 { \
101 kCLOCK_Crc0 \
102 }
103 /*! @brief Clock ip name array for WWDT. */
104 #define WWDT_CLOCKS \
105 { \
106 kCLOCK_Wwdt0, kCLOCK_Wwdt1 \
107 }
108 /*! @brief Clock ip name array for LPADC. */
109 #define LPADC_CLOCKS \
110 { \
111 kCLOCK_Adc0, kCLOCK_Adc1 \
112 }
113 /*! @brief Clock ip name array for MRT. */
114 #define MRT_CLOCKS \
115 { \
116 kCLOCK_Mrt \
117 }
118 /*! @brief Clock ip name array for OSTIMER. */
119 #define OSTIMER_CLOCKS \
120 { \
121 kCLOCK_OsTimer \
122 }
123 /*! @brief Clock ip name array for UTICK. */
124 #define UTICK_CLOCKS \
125 { \
126 kCLOCK_Utick \
127 }
128 /*! @brief Clock ip name array for LP_FLEXCOMM. */
129 #define LP_FLEXCOMM_CLOCKS \
130 { \
131 kCLOCK_LPFlexComm0, kCLOCK_LPFlexComm1, kCLOCK_LPFlexComm2, kCLOCK_LPFlexComm3, kCLOCK_LPFlexComm4, \
132 kCLOCK_LPFlexComm5, kCLOCK_LPFlexComm6, kCLOCK_LPFlexComm7 \
133 }
134 /*! @brief Clock ip name array for LPUART. */
135 #define LPUART_CLOCKS \
136 { \
137 kCLOCK_LPUart0, kCLOCK_LPUart1, kCLOCK_LPUart2, kCLOCK_LPUart3, kCLOCK_LPUart4, kCLOCK_LPUart5, \
138 kCLOCK_LPUart6, kCLOCK_LPUart7 \
139 }
140 /*! @brief Clock ip name array for LPI2C. */
141 #define LPI2C_CLOCKS \
142 { \
143 kCLOCK_LPI2c0, kCLOCK_LPI2c1, kCLOCK_LPI2c2, kCLOCK_LPI2c3, kCLOCK_LPI2c4, kCLOCK_LPI2c5, kCLOCK_LPI2c6, \
144 kCLOCK_LPI2c7 \
145 }
146 /*! @brief Clock ip name array for LSPI. */
147 #define LPSPI_CLOCKS \
148 { \
149 kCLOCK_LPSpi0, kCLOCK_LPSpi1, kCLOCK_LPSpi2, kCLOCK_LPSpi3, kCLOCK_LPSpi4, kCLOCK_LPSpi5, kCLOCK_LPSpi6, \
150 kCLOCK_LPSpi7 \
151 }
152 /*! @brief Clock ip name array for CTIMER. */
153 #define CTIMER_CLOCKS \
154 { \
155 kCLOCK_Timer0, kCLOCK_Timer1, kCLOCK_Timer2, kCLOCK_Timer3, kCLOCK_Timer4 \
156 }
157 /*! @brief Clock ip name array for FREQME. */
158 #define FREQME_CLOCKS \
159 { \
160 kCLOCK_Freqme \
161 }
162 /*! @brief Clock ip name array for PUF. */
163 #define PUF_CLOCKS \
164 { \
165 kCLOCK_Puf \
166 }
167 /*! @brief Clock ip name array for VREF. */
168 #define VREF_CLOCKS \
169 { \
170 kCLOCK_Vref \
171 }
172 /*! @brief Clock ip name array for PWM. */
173 #define PWM_CLOCKS \
174 { \
175 {kCLOCK_Pwm0_Sm0, kCLOCK_Pwm0_Sm1, kCLOCK_Pwm0_Sm2, kCLOCK_Pwm0_Sm3}, \
176 { \
177 kCLOCK_Pwm1_Sm0, kCLOCK_Pwm1_Sm1, kCLOCK_Pwm1_Sm2, kCLOCK_Pwm1_Sm3 \
178 } \
179 }
180 /*! @brief Clock ip name array for QDC. */
181 #define QDC_CLOCKS \
182 { \
183 kCLOCK_Qdc0, kCLOCK_Qdc1 \
184 }
185 /*! @brief Clock ip name array for FLEXIO. */
186 #define FLEXIO_CLOCKS \
187 { \
188 kCLOCK_Flexio \
189 }
190 /*! @brief Clock ip name array for FLEXCAN. */
191 #define FLEXCAN_CLOCKS \
192 { \
193 kCLOCK_Flexcan0, kCLOCK_Flexcan1 \
194 }
195 /*! @brief Clock ip name array for I3C */
196 #define I3C_CLOCKS \
197 { \
198 kCLOCK_I3c0, kCLOCK_I3c1 \
199 }
200 /*! @brief Clock ip name array for USDHC. */
201 #define USDHC_CLOCKS \
202 { \
203 kCLOCK_uSdhc \
204 }
205 /*! @brief Clock ip name array for SAI. */
206 #define SAI_CLOCKS \
207 { \
208 kCLOCK_Sai0, kCLOCK_Sai1 \
209 }
210 /*! @brief Clock ip name array for RTC. */
211 #define RTC_CLOCKS \
212 { \
213 kCLOCK_Rtc0 \
214 }
215 /*! @brief Clock ip name array for PDM. */
216 #define PDM_CLOCKS \
217 { \
218 kCLOCK_Micfil \
219 }
220 /*! @brief Clock ip name array for ERM. */
221 #define ERM_CLOCKS \
222 { \
223 kCLOCK_Erm \
224 }
225 /*! @brief Clock ip name array for EIM. */
226 #define EIM_CLOCKS \
227 { \
228 kCLOCK_Eim \
229 }
230 /*! @brief Clock ip name array for TRNG. */
231 #define TRNG_CLOCKS \
232 { \
233 kCLOCK_Trng \
234 }
235 /*! @brief Clock ip name array for LPCMP. */
236 #define LPCMP_CLOCKS \
237 { \
238 kCLOCK_None, kCLOCK_None, kCLOCK_Cmp2 \
239 }
240 /*! @brief Clock gate name used for CLOCK_EnableClock/CLOCK_DisableClock. */
241 /*------------------------------------------------------------------------------
242 clock_ip_name_t definition:
243 ------------------------------------------------------------------------------*/
244
245 #define CLK_GATE_REG_OFFSET_SHIFT 8U
246 #define CLK_GATE_REG_OFFSET_MASK 0xFFFFFF00U
247 #define CLK_GATE_BIT_SHIFT_SHIFT 0U
248 #define CLK_GATE_BIT_SHIFT_MASK 0x000000FFU
249
250 #define CLK_GATE_DEFINE(reg_offset, bit_shift) \
251 ((((reg_offset) << CLK_GATE_REG_OFFSET_SHIFT) & CLK_GATE_REG_OFFSET_MASK) | \
252 (((bit_shift) << CLK_GATE_BIT_SHIFT_SHIFT) & CLK_GATE_BIT_SHIFT_MASK))
253
254 #define CLK_GATE_ABSTRACT_REG_OFFSET(x) (((uint32_t)(x)&CLK_GATE_REG_OFFSET_MASK) >> CLK_GATE_REG_OFFSET_SHIFT)
255 #define CLK_GATE_ABSTRACT_BITS_SHIFT(x) (((uint32_t)(x)&CLK_GATE_BIT_SHIFT_MASK) >> CLK_GATE_BIT_SHIFT_SHIFT)
256
257 #define AHB_CLK_CTRL0 0
258 #define AHB_CLK_CTRL1 1
259 #define AHB_CLK_CTRL2 2
260 #define AHB_CLK_CTRL3 3
261 #define REG_PWM0SUBCTL 250
262 #define REG_PWM1SUBCTL 251
263
264 /*! @brief Clock gate name used for CLOCK_EnableClock/CLOCK_DisableClock. */
265 typedef enum _clock_ip_name
266 {
267 kCLOCK_IpInvalid = 0U, /*!< Invalid Ip Name. */
268 kCLOCK_None = 0U, /*!< None clock gate. */
269
270 kCLOCK_Rom = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 1), /*!< Clock gate name: Rom. */
271 kCLOCK_Sram1 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 2), /*!< Clock gate name: Sram1. */
272 kCLOCK_Sram2 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 3), /*!< Clock gate name: Sram2. */
273 kCLOCK_Sram3 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 4), /*!< Clock gate name: Sram3. */
274 kCLOCK_Sram4 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 5), /*!< Clock gate name: Sram4. */
275 kCLOCK_Sram5 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 6), /*!< Clock gate name: Sram5. */
276 kCLOCK_Sram6 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 7), /*!< Clock gate name: Sram6. */
277 kCLOCK_Sram7 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 8), /*!< Clock gate name: Sram7. */
278 kCLOCK_Fmu = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 9), /*!< Clock gate name: Fmu. */
279 kCLOCK_Fmc = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 10), /*!< Clock gate name: Fmc. */
280 kCLOCK_InputMux0 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 12), /*!< Clock gate name: InputMux0. */
281 kCLOCK_InputMux = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 12), /*!< Clock gate name: InputMux0. */
282 kCLOCK_Port0 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 13), /*!< Clock gate name: Port0. */
283 kCLOCK_Port1 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 14), /*!< Clock gate name: Port1. */
284 kCLOCK_Port2 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 15), /*!< Clock gate name: Port2. */
285 kCLOCK_Port3 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 16), /*!< Clock gate name: Port3. */
286 kCLOCK_Port4 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 17), /*!< Clock gate name: Port4. */
287 kCLOCK_Gpio0 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 19), /*!< Clock gate name: Gpio0. */
288 kCLOCK_Gpio1 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 20), /*!< Clock gate name: Gpio1. */
289 kCLOCK_Gpio2 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 21), /*!< Clock gate name: Gpio2. */
290 kCLOCK_Gpio3 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 22), /*!< Clock gate name: Gpio3. */
291 kCLOCK_Gpio4 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 23), /*!< Clock gate name: Gpio4. */
292 kCLOCK_Pint = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 25), /*!< Clock gate name: Pint. */
293 kCLOCK_Dma0 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 26), /*!< Clock gate name: Dma0. */
294 kCLOCK_Crc0 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 27), /*!< Clock gate name: Crc. */
295 kCLOCK_Wwdt0 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 28), /*!< Clock gate name: Wwdt0. */
296 kCLOCK_Wwdt1 = CLK_GATE_DEFINE(AHB_CLK_CTRL0, 29), /*!< Clock gate name: Wwdt1. */
297
298 kCLOCK_Mrt = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 0), /*!< Clock gate name: Mrt. */
299 kCLOCK_OsTimer = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 1), /*!< Clock gate name: OsTimer. */
300 kCLOCK_Sct = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 2), /*!< Clock gate name: Sct. */
301 kCLOCK_Adc0 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 3), /*!< Clock gate name: Adc0. */
302 kCLOCK_Adc1 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 4), /*!< Clock gate name: Adc1. */
303 kCLOCK_Rtc0 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 6), /*!< Clock gate name: Rtc. */
304 kCLOCK_Utick = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 10), /*!< Clock gate name: Utick. */
305 kCLOCK_LPFlexComm0 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 11), /*!< Clock gate name: LPFlexComm0. */
306 kCLOCK_LPFlexComm1 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 12), /*!< Clock gate name: LPFlexComm1. */
307 kCLOCK_LPFlexComm2 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 13), /*!< Clock gate name: LPFlexComm2. */
308 kCLOCK_LPFlexComm3 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 14), /*!< Clock gate name: LPFlexComm3. */
309 kCLOCK_LPFlexComm4 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 15), /*!< Clock gate name: LPFlexComm4. */
310 kCLOCK_LPFlexComm5 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 16), /*!< Clock gate name: LPFlexComm5. */
311 kCLOCK_LPFlexComm6 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 17), /*!< Clock gate name: LPFlexComm6. */
312 kCLOCK_LPFlexComm7 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 18), /*!< Clock gate name: LPFlexComm7. */
313 kCLOCK_LPUart0 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 11), /*!< Clock gate name: LPUart0. */
314 kCLOCK_LPUart1 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 12), /*!< Clock gate name: LPUart1. */
315 kCLOCK_LPUart2 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 13), /*!< Clock gate name: LPUart2. */
316 kCLOCK_LPUart3 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 14), /*!< Clock gate name: LPUart3. */
317 kCLOCK_LPUart4 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 15), /*!< Clock gate name: LPUart4. */
318 kCLOCK_LPUart5 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 16), /*!< Clock gate name: LPUart5. */
319 kCLOCK_LPUart6 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 17), /*!< Clock gate name: LPUart6. */
320 kCLOCK_LPUart7 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 18), /*!< Clock gate name: LPUart7. */
321 kCLOCK_LPSpi0 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 11), /*!< Clock gate name: LPSpi0. */
322 kCLOCK_LPSpi1 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 12), /*!< Clock gate name: LPSpi1. */
323 kCLOCK_LPSpi2 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 13), /*!< Clock gate name: LPSpi2. */
324 kCLOCK_LPSpi3 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 14), /*!< Clock gate name: LPSpi3. */
325 kCLOCK_LPSpi4 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 15), /*!< Clock gate name: LPSpi4. */
326 kCLOCK_LPSpi5 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 16), /*!< Clock gate name: LPSpi5. */
327 kCLOCK_LPSpi6 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 17), /*!< Clock gate name: LPSpi6. */
328 kCLOCK_LPSpi7 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 18), /*!< Clock gate name: LPSpi7. */
329 kCLOCK_LPI2c0 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 11), /*!< Clock gate name: LPI2c0. */
330 kCLOCK_LPI2c1 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 12), /*!< Clock gate name: LPI2c1. */
331 kCLOCK_LPI2c2 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 13), /*!< Clock gate name: LPI2c2. */
332 kCLOCK_LPI2c3 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 14), /*!< Clock gate name: LPI2c3. */
333 kCLOCK_LPI2c4 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 15), /*!< Clock gate name: LPI2c4. */
334 kCLOCK_LPI2c5 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 16), /*!< Clock gate name: LPI2c5. */
335 kCLOCK_LPI2c6 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 17), /*!< Clock gate name: LPI2c6. */
336 kCLOCK_LPI2c7 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 18), /*!< Clock gate name: LPI2c7. */
337 kCLOCK_Micfil = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 21), /*!< Clock gate name: Micfil. */
338 kCLOCK_Timer2 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 22), /*!< Clock gate name: Timer2. */
339 kCLOCK_Usb0FsDcd = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 24), /*!< Clock gate name: Usb0FsDcd. */
340 kCLOCK_Timer0 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 26), /*!< Clock gate name: Timer0. */
341 kCLOCK_Timer1 = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 27), /*!< Clock gate name: Timer1. */
342 kCLOCK_PkcRam = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 29), /*!< Clock gate name: PkcRam. */
343 kCLOCK_Smartdma = CLK_GATE_DEFINE(AHB_CLK_CTRL1, 31), /*!< Clock gate name: SmartDma. */
344
345 kCLOCK_Espi = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 0), /*!< Clock gate name: Espi. */
346 kCLOCK_Dma1 = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 1), /*!< Clock gate name: Dma1. */
347 kCLOCK_Flexio = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 4), /*!< Clock gate name: Flexio. */
348 kCLOCK_Sai0 = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 5), /*!< Clock gate name: Sai0. */
349 kCLOCK_Sai1 = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 6), /*!< Clock gate name: Sai1. */
350 kCLOCK_Tro = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 7), /*!< Clock gate name: Tro. */
351 kCLOCK_Freqme = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 8), /*!< Clock gate name: Freqme. */
352 kCLOCK_Trng = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 13), /*!< Clock gate name: Trng. */
353 kCLOCK_Flexcan0 = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 14), /*!< Clock gate name: Flexcan0. */
354 kCLOCK_Flexcan1 = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 15), /*!< Clock gate name: Flexcan1. */
355 kCLOCK_UsbHs = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 16), /*!< Clock gate name: UsbHs. */
356 kCLOCK_UsbHsPhy = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 17), /*!< Clock gate name: UsbHsPhy. */
357 kCLOCK_Css = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 18), /*!< Clock gate name: Css. */
358 kCLOCK_Timer3 = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 21), /*!< Clock gate name: Timer3. */
359 kCLOCK_Timer4 = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 22), /*!< Clock gate name: Timer4. */
360 kCLOCK_Puf = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 23), /*!< Clock gate name: Puf. */
361 kCLOCK_Pkc = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 24), /*!< Clock gate name: Pkc. */
362 kCLOCK_Scg = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 26), /*!< Clock gate name: Scg. */
363 kCLOCK_Gdet = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 29), /*!< Clock gate name: Gdet. */
364 kCLOCK_Sm3 = CLK_GATE_DEFINE(AHB_CLK_CTRL2, 30), /*!< Clock gate name: Sm3. */
365
366 kCLOCK_I3c0 = CLK_GATE_DEFINE(AHB_CLK_CTRL3, 0), /*!< Clock gate name: I3c0. */
367 kCLOCK_I3c1 = CLK_GATE_DEFINE(AHB_CLK_CTRL3, 1), /*!< Clock gate name: I3c1. */
368 kCLOCK_Qdc0 = CLK_GATE_DEFINE(AHB_CLK_CTRL3, 4), /*!< Clock gate name: Qdc0. */
369 kCLOCK_Qdc1 = CLK_GATE_DEFINE(AHB_CLK_CTRL3, 5), /*!< Clock gate name: Qdc1. */
370 kCLOCK_Pwm0 = CLK_GATE_DEFINE(AHB_CLK_CTRL3, 6), /*!< Clock gate name: Pwm0. */
371 kCLOCK_Pwm1 = CLK_GATE_DEFINE(AHB_CLK_CTRL3, 7), /*!< Clock gate name: Pwm1. */
372 kCLOCK_Evtg = CLK_GATE_DEFINE(AHB_CLK_CTRL3, 8), /*!< Clock gate name: Evtg. */
373 kCLOCK_Cmp2 = CLK_GATE_DEFINE(AHB_CLK_CTRL3, 18), /*!< Clock gate name: Cmp2. */
374 kCLOCK_Vref = CLK_GATE_DEFINE(AHB_CLK_CTRL3, 19), /*!< Clock gate name: Vref. */
375 kCLOCK_Ewm = CLK_GATE_DEFINE(AHB_CLK_CTRL3, 23), /*!< Clock gate name: Ewm. */
376 kCLOCK_Ewm0 = CLK_GATE_DEFINE(AHB_CLK_CTRL3, 23), /*!< Clock gate name: Ewm. */
377 kCLOCK_Eim = CLK_GATE_DEFINE(AHB_CLK_CTRL3, 24), /*!< Clock gate name: Eim. */
378 kCLOCK_Erm = CLK_GATE_DEFINE(AHB_CLK_CTRL3, 25), /*!< Clock gate name: Erm. */
379 kCLOCK_Intm = CLK_GATE_DEFINE(AHB_CLK_CTRL3, 26), /*!< Clock gate name: Intm. */
380
381 kCLOCK_Pwm0_Sm0 = CLK_GATE_DEFINE(REG_PWM0SUBCTL, 0U), /*!< Clock gate name: PWM0 SM0. */
382 kCLOCK_Pwm0_Sm1 = CLK_GATE_DEFINE(REG_PWM0SUBCTL, 1U), /*!< Clock gate name: PWM0 SM1. */
383 kCLOCK_Pwm0_Sm2 = CLK_GATE_DEFINE(REG_PWM0SUBCTL, 2U), /*!< Clock gate name: PWM0 SM2. */
384 kCLOCK_Pwm0_Sm3 = CLK_GATE_DEFINE(REG_PWM0SUBCTL, 3U), /*!< Clock gate name: PWM0 SM3. */
385
386 kCLOCK_Pwm1_Sm0 = CLK_GATE_DEFINE(REG_PWM1SUBCTL, 0U), /*!< Clock gate name: PWM1 SM0. */
387 kCLOCK_Pwm1_Sm1 = CLK_GATE_DEFINE(REG_PWM1SUBCTL, 1U), /*!< Clock gate name: PWM1 SM1. */
388 kCLOCK_Pwm1_Sm2 = CLK_GATE_DEFINE(REG_PWM1SUBCTL, 2U), /*!< Clock gate name: PWM1 SM2. */
389 kCLOCK_Pwm1_Sm3 = CLK_GATE_DEFINE(REG_PWM1SUBCTL, 3U) /*!< Clock gate name: PWM1 SM3. */
390
391 } clock_ip_name_t;
392
393 /*! @brief Peripherals clock source definition. */
394 #define BUS_CLK kCLOCK_BusClk
395
396 #define I2C0_CLK_SRC BUS_CLK
397
398 /*! @brief Clock name used to get clock frequency. */
399 typedef enum _clock_name
400 {
401 kCLOCK_CoreSysClk, /*!< Core/system clock (aka MAIN_CLK) */
402 kCLOCK_BusClk, /*!< Bus clock (AHB clock) */
403 kCLOCK_SystickClk0, /*!< Systick clock0 */
404 kCLOCK_ClockOut, /*!< CLOCKOUT */
405 kCLOCK_Fro12M, /*!< FRO12M */
406 kCLOCK_Clk1M, /*!< CLK1M */
407 kCLOCK_FroHf, /*!< FRO48/144 */
408 kCLOCK_Clk48M, /*!< CLK48M */
409 kCLOCK_Clk144M, /*!< CLK144M */
410 kCLOCK_Clk16K0, /*!< CLK16K[0] */
411 kCLOCK_Clk16K1, /*!< CLK16K[1] */
412 kCLOCK_Clk16K2, /*!< CLK16K[2] */
413 kCLOCK_Clk16K3, /*!< CLK16K[3] */
414 kCLOCK_ExtClk, /*!< External Clock */
415 kCLOCK_Osc32K0, /*!< OSC32K[0] */
416 kCLOCK_Osc32K1, /*!< OSC32K[1] */
417 kCLOCK_Osc32K2, /*!< OSC32K[2] */
418 kCLOCK_Osc32K3, /*!< OSC32K[3] */
419 kCLOCK_Pll0Out, /*!< PLL0 Output */
420 kCLOCK_Pll1Out, /*!< PLL1 Output */
421 kCLOCK_UsbPllOut, /*!< USB PLL Output */
422 kCLOCK_LpOsc, /*!< lp_osc */
423 } clock_name_t;
424
425 /*! @brief Clock Mux Switches
426 * The encoding is as follows each connection identified is 32bits wide while 24bits are valuable
427 * starting from LSB upwards
428 *
429 * [4 bits for choice, 0 means invalid choice] [8 bits mux ID]*
430 *
431 */
432
433 #define CLK_ATTACH_ID(mux, sel, pos) \
434 ((((uint32_t)(mux) << 0U) | (((uint32_t)(sel) + 1U) & 0xFU) << 12U) << ((uint32_t)(pos)*16U))
435 #define MUX_A(mux, sel) CLK_ATTACH_ID((mux), (sel), 0U)
436 #define MUX_B(mux, sel, selector) (CLK_ATTACH_ID((mux), (sel), 1U) | ((selector) << 24U))
437
438 #define GET_ID_ITEM(connection) ((connection)&0xFFFFU)
439 #define GET_ID_NEXT_ITEM(connection) ((connection) >> 16U)
440 #define GET_ID_ITEM_MUX(connection) (((uint16_t)connection) & 0xFFFU)
441 #define GET_ID_ITEM_SEL(connection) ((uint8_t)((((uint32_t)(connection)&0xF000U) >> 12U) - 1U))
442 #define GET_ID_SELECTOR(connection) ((connection)&0xF000000U)
443
444 #define CM_SYSTICKCLKSEL0 0U
445 #define CM_TRACECLKSEL ((0x268 - 0x260) / 4)
446 #define CM_CTIMERCLKSEL0 ((0x26C - 0x260) / 4)
447 #define CM_CTIMERCLKSEL1 ((0x270 - 0x260) / 4)
448 #define CM_CTIMERCLKSEL2 ((0x274 - 0x260) / 4)
449 #define CM_CTIMERCLKSEL3 ((0x278 - 0x260) / 4)
450 #define CM_CTIMERCLKSEL4 ((0x27C - 0x260) / 4)
451 #define CM_CLKOUTCLKSEL ((0x288 - 0x260) / 4)
452 #define CM_ADC0CLKSEL ((0x2A4 - 0x260) / 4)
453 #define CM_FCCLKSEL0 ((0x2B0 - 0x260) / 4)
454 #define CM_FCCLKSEL1 ((0x2B4 - 0x260) / 4)
455 #define CM_FCCLKSEL2 ((0x2B8 - 0x260) / 4)
456 #define CM_FCCLKSEL3 ((0x2BC - 0x260) / 4)
457 #define CM_FCCLKSEL4 ((0x2C0 - 0x260) / 4)
458 #define CM_FCCLKSEL5 ((0x2C4 - 0x260) / 4)
459 #define CM_FCCLKSEL6 ((0x2C8 - 0x260) / 4)
460 #define CM_FCCLKSEL7 ((0x2CC - 0x260) / 4)
461 #define CM_ADC1CLKSEL ((0x464 - 0x260) / 4)
462 #define CM_PLLCLKDIVSEL ((0x52C - 0x260) / 4)
463 #define CM_I3C0FCLKSEL ((0x530 - 0x260) / 4)
464 #define CM_MICFILFCLKSEL ((0x548 - 0x260) / 4)
465 #define CM_FLEXIOCLKSEL ((0x560 - 0x260) / 4)
466 #define CM_FLEXCAN0CLKSEL ((0x5A0 - 0x260) / 4)
467 #define CM_FLEXCAN1CLKSEL ((0x5A8 - 0x260) / 4)
468 #define CM_EWM0CLKSEL ((0x5D4 - 0x260) / 4)
469 #define CM_WDT1CLKSEL ((0x5D8 - 0x260) / 4)
470 #define CM_OSTIMERCLKSEL ((0x5E0 - 0x260) / 4)
471 #define CM_CMP0FCLKSEL ((0x5F0 - 0x260) / 4)
472 #define CM_CMP0RRCLKSEL ((0x5F8 - 0x260) / 4)
473 #define CM_CMP1FCLKSEL ((0x600 - 0x260) / 4)
474 #define CM_CMP1RRCLKSEL ((0x608 - 0x260) / 4)
475 #define CM_UTICKCLKSEL ((0x878 - 0x260) / 4)
476 #define CM_SAI0CLKSEL ((0x880 - 0x260) / 4)
477 #define CM_SAI1CLKSEL ((0x884 - 0x260) / 4)
478 #define CM_I3C1FCLKSEL ((0xB30 - 0x260) / 4)
479
480 #define CM_SCGRCCRSCSCLKSEL 0x3FEU
481
482 /*!
483 * @brief The enumerator of clock attach Id.
484 */
485 typedef enum _clock_attach_id
486 {
487 kCLK_IN_to_MAIN_CLK = MUX_A(CM_SCGRCCRSCSCLKSEL, 1), /*!< Attach clk_in to MAIN_CLK. */
488 kFRO12M_to_MAIN_CLK = MUX_A(CM_SCGRCCRSCSCLKSEL, 2), /*!< Attach FRO_12M to MAIN_CLK. */
489 kFRO_HF_to_MAIN_CLK = MUX_A(CM_SCGRCCRSCSCLKSEL, 3), /*!< Attach FRO_HF to MAIN_CLK. */
490 kXTAL32K2_to_MAIN_CLK = MUX_A(CM_SCGRCCRSCSCLKSEL, 4), /*!< Attach xtal32k[2] to MAIN_CLK. */
491 kPLL0_to_MAIN_CLK = MUX_A(CM_SCGRCCRSCSCLKSEL, 5), /*!< Attach PLL0 to MAIN_CLK. */
492 kPLL1_to_MAIN_CLK = MUX_A(CM_SCGRCCRSCSCLKSEL, 6), /*!< Attach PLL1 to MAIN_CLK. */
493 kUSB_PLL_to_MAIN_CLK = MUX_A(CM_SCGRCCRSCSCLKSEL, 7), /*!< Attach USB PLL to MAIN_CLK. */
494 kNONE_to_MAIN_CLK = MUX_A(CM_SCGRCCRSCSCLKSEL, 15), /*!< Attach NONE to MAIN_CLK. */
495
496 kSYSTICK_DIV0_to_SYSTICK0 = MUX_A(CM_SYSTICKCLKSEL0, 0), /*!< Attach SYSTICK_DIV0 to SYSTICK0. */
497 kCLK_1M_to_SYSTICK0 = MUX_A(CM_SYSTICKCLKSEL0, 1), /*!< Attach Clk 1 MHz to SYSTICK0. */
498 kLPOSC_to_SYSTICK0 = MUX_A(CM_SYSTICKCLKSEL0, 2), /*!< Attach LP Oscillator to SYSTICK0. */
499 kNONE_to_SYSTICK0 = MUX_A(CM_SYSTICKCLKSEL0, 7), /*!< Attach NONE to SYSTICK0. */
500
501 kTRACE_DIV_to_TRACE = MUX_A(CM_TRACECLKSEL, 0), /*!< Attach TRACE_DIV to TRACE. */
502 kCLK_1M_to_TRACE = MUX_A(CM_TRACECLKSEL, 1), /*!< Attach Clk 1 MHz to TRACE. */
503 kLPOSC_to_TRACE = MUX_A(CM_TRACECLKSEL, 2), /*!< Attach LP Oscillator to TRACE. */
504 kNONE_to_TRACE = MUX_A(CM_TRACECLKSEL, 7), /*!< Attach NONE to TRACE. */
505
506 kCLK_1M_to_CTIMER0 = MUX_A(CM_CTIMERCLKSEL0, 0), /*!< Attach CLK_1M to CTIMER0. */
507 kPLL0_to_CTIMER0 = MUX_A(CM_CTIMERCLKSEL0, 1), /*!< Attach PLL0 to CTIMER0. */
508 kPLL1_CLK0_to_CTIMER0 = MUX_A(CM_CTIMERCLKSEL0, 2), /*!< Attach PLL1_clk0 to CTIMER0. */
509 kFRO_HF_to_CTIMER0 = MUX_A(CM_CTIMERCLKSEL0, 3), /*!< Attach FRO_HF to CTIMER0. */
510 kFRO12M_to_CTIMER0 = MUX_A(CM_CTIMERCLKSEL0, 4), /*!< Attach FRO 12MHz to CTIMER0. */
511 kSAI0_MCLK_IN_to_CTIMER0 = MUX_A(CM_CTIMERCLKSEL0, 5), /*!< Attach SAI0 MCLK IN to CTIMER0. */
512 kLPOSC_to_CTIMER0 = MUX_A(CM_CTIMERCLKSEL0, 6), /*!< Attach LP Oscillator to CTIMER0. */
513 kSAI1_MCLK_IN_to_CTIMER0 = MUX_A(CM_CTIMERCLKSEL0, 8), /*!< Attach SAI1 MCLK IN to CTIMER0. */
514 kSAI0_TX_BCLK_to_CTIMER0 = MUX_A(CM_CTIMERCLKSEL0, 9), /*!< Attach SAI0 TX_BCLK to CTIMER0. */
515 kSAI0_RX_BCLK_to_CTIMER0 = MUX_A(CM_CTIMERCLKSEL0, 10), /*!< Attach SAI0 RX_BCLK to CTIMER0. */
516 kSAI1_TX_BCLK_to_CTIMER0 = MUX_A(CM_CTIMERCLKSEL0, 11), /*!< Attach SAI1 TX_BCLK to CTIMER0. */
517 kSAI1_RX_BCLK_to_CTIMER0 = MUX_A(CM_CTIMERCLKSEL0, 12), /*!< Attach SAI1 RX_BCLK to CTIMER0. */
518 kNONE_to_CTIMER0 = MUX_A(CM_CTIMERCLKSEL0, 15), /*!< Attach NONE to CTIMER0. */
519
520 kCLK_1M_to_CTIMER1 = MUX_A(CM_CTIMERCLKSEL1, 0), /*!< Attach CLK_1M to CTIMER1. */
521 kPLL0_to_CTIMER1 = MUX_A(CM_CTIMERCLKSEL1, 1), /*!< Attach PLL0 to CTIMER1. */
522 kPLL1_CLK0_to_CTIMER1 = MUX_A(CM_CTIMERCLKSEL1, 2), /*!< Attach PLL1_clk0 to CTIMER1. */
523 kFRO_HF_to_CTIMER1 = MUX_A(CM_CTIMERCLKSEL1, 3), /*!< Attach FRO_HF to CTIMER1. */
524 kFRO12M_to_CTIMER1 = MUX_A(CM_CTIMERCLKSEL1, 4), /*!< Attach FRO 12MHz to CTIMER1. */
525 kSAI0_MCLK_IN_to_CTIMER1 = MUX_A(CM_CTIMERCLKSEL1, 5), /*!< Attach SAI0 MCLK IN to CTIMER1. */
526 kLPOSC_to_CTIMER1 = MUX_A(CM_CTIMERCLKSEL1, 6), /*!< Attach LP Oscillator to CTIMER1. */
527 kSAI1_MCLK_IN_to_CTIMER1 = MUX_A(CM_CTIMERCLKSEL1, 8), /*!< Attach SAI1 MCLK IN to CTIMER1. */
528 kSAI0_TX_BCLK_to_CTIMER1 = MUX_A(CM_CTIMERCLKSEL1, 9), /*!< Attach SAI0 TX_BCLK to CTIMER1. */
529 kSAI0_RX_BCLK_to_CTIMER1 = MUX_A(CM_CTIMERCLKSEL1, 10), /*!< Attach SAI0 RX_BCLK to CTIMER1. */
530 kSAI1_TX_BCLK_to_CTIMER1 = MUX_A(CM_CTIMERCLKSEL1, 11), /*!< Attach SAI1 TX_BCLK to CTIMER1. */
531 kSAI1_RX_BCLK_to_CTIMER1 = MUX_A(CM_CTIMERCLKSEL1, 12), /*!< Attach SAI1 RX_BCLK to CTIMER1. */
532 kNONE_to_CTIMER1 = MUX_A(CM_CTIMERCLKSEL1, 15), /*!< Attach NONE to CTIMER1. */
533
534 kCLK_1M_to_CTIMER2 = MUX_A(CM_CTIMERCLKSEL2, 0), /*!< Attach CLK_1M to CTIMER2. */
535 kPLL0_to_CTIMER2 = MUX_A(CM_CTIMERCLKSEL2, 1), /*!< Attach PLL0 to CTIMER2. */
536 kPLL1_CLK0_to_CTIMER2 = MUX_A(CM_CTIMERCLKSEL2, 2), /*!< Attach PLL1_clk0 to CTIMER2. */
537 kFRO_HF_to_CTIMER2 = MUX_A(CM_CTIMERCLKSEL2, 3), /*!< Attach FRO_HF to CTIMER2. */
538 kFRO12M_to_CTIMER2 = MUX_A(CM_CTIMERCLKSEL2, 4), /*!< Attach FRO 12MHz to CTIMER2. */
539 kSAI0_MCLK_IN_to_CTIMER2 = MUX_A(CM_CTIMERCLKSEL2, 5), /*!< Attach SAI0 MCLK IN to CTIMER2. */
540 kLPOSC_to_CTIMER2 = MUX_A(CM_CTIMERCLKSEL2, 6), /*!< Attach LP Oscillator to CTIMER2. */
541 kSAI1_MCLK_IN_to_CTIMER2 = MUX_A(CM_CTIMERCLKSEL2, 8), /*!< Attach SAI1 MCLK IN to CTIMER2. */
542 kSAI0_TX_BCLK_to_CTIMER2 = MUX_A(CM_CTIMERCLKSEL2, 9), /*!< Attach SAI0 TX_BCLK to CTIMER2. */
543 kSAI0_RX_BCLK_to_CTIMER2 = MUX_A(CM_CTIMERCLKSEL2, 10), /*!< Attach SAI0 RX_BCLK to CTIMER2. */
544 kSAI1_TX_BCLK_to_CTIMER2 = MUX_A(CM_CTIMERCLKSEL2, 11), /*!< Attach SAI1 TX_BCLK to CTIMER2. */
545 kSAI1_RX_BCLK_to_CTIMER2 = MUX_A(CM_CTIMERCLKSEL2, 12), /*!< Attach SAI1 RX_BCLK to CTIMER2. */
546 kNONE_to_CTIMER2 = MUX_A(CM_CTIMERCLKSEL2, 15), /*!< Attach NONE to CTIMER2. */
547
548 kCLK_1M_to_CTIMER3 = MUX_A(CM_CTIMERCLKSEL3, 0), /*!< Attach CLK_1M to CTIMER3. */
549 kPLL0_to_CTIMER3 = MUX_A(CM_CTIMERCLKSEL3, 1), /*!< Attach PLL0 to CTIMER3. */
550 kPLL1_CLK0_to_CTIMER3 = MUX_A(CM_CTIMERCLKSEL3, 2), /*!< Attach PLL1_clk0 to CTIMER3. */
551 kFRO_HF_to_CTIMER3 = MUX_A(CM_CTIMERCLKSEL3, 3), /*!< Attach FRO_HF to CTIMER3. */
552 kFRO12M_to_CTIMER3 = MUX_A(CM_CTIMERCLKSEL3, 4), /*!< Attach FRO 12MHz to CTIMER3. */
553 kSAI0_MCLK_IN_to_CTIMER3 = MUX_A(CM_CTIMERCLKSEL3, 5), /*!< Attach SAI0 MCLK IN to CTIMER3. */
554 kLPOSC_to_CTIMER3 = MUX_A(CM_CTIMERCLKSEL3, 6), /*!< Attach LP Oscillator to CTIMER3. */
555 kSAI1_MCLK_IN_to_CTIMER3 = MUX_A(CM_CTIMERCLKSEL3, 8), /*!< Attach SAI1 MCLK IN to CTIMER3. */
556 kSAI0_TX_BCLK_to_CTIMER3 = MUX_A(CM_CTIMERCLKSEL3, 9), /*!< Attach SAI0 TX_BCLK to CTIMER3. */
557 kSAI0_RX_BCLK_to_CTIMER3 = MUX_A(CM_CTIMERCLKSEL3, 10), /*!< Attach SAI0 RX_BCLK to CTIMER3. */
558 kSAI1_TX_BCLK_to_CTIMER3 = MUX_A(CM_CTIMERCLKSEL3, 11), /*!< Attach SAI1 TX_BCLK to CTIMER3. */
559 kSAI1_RX_BCLK_to_CTIMER3 = MUX_A(CM_CTIMERCLKSEL3, 12), /*!< Attach SAI1 RX_BCLK to CTIMER3. */
560 kNONE_to_CTIMER3 = MUX_A(CM_CTIMERCLKSEL3, 15), /*!< Attach NONE to CTIMER3. */
561
562 kCLK_1M_to_CTIMER4 = MUX_A(CM_CTIMERCLKSEL4, 0), /*!< Attach CLK_1M to CTIMER4. */
563 kPLL0_to_CTIMER4 = MUX_A(CM_CTIMERCLKSEL4, 1), /*!< Attach PLL0 to CTIMER4. */
564 kPLL1_CLK0_to_CTIMER4 = MUX_A(CM_CTIMERCLKSEL4, 2), /*!< Attach PLL1_clk0 to CTIMER4. */
565 kFRO_HF_to_CTIMER4 = MUX_A(CM_CTIMERCLKSEL4, 3), /*!< Attach FRO_HF to CTIMER4. */
566 kFRO12M_to_CTIMER4 = MUX_A(CM_CTIMERCLKSEL4, 4), /*!< Attach FRO 12MHz to CTIMER4. */
567 kSAI0_MCLK_IN_to_CTIMER4 = MUX_A(CM_CTIMERCLKSEL4, 5), /*!< Attach SAI0 MCLK IN to CTIMER4. */
568 kLPOSC_to_CTIMER4 = MUX_A(CM_CTIMERCLKSEL4, 6), /*!< Attach LP Oscillator to CTIMER4. */
569 kSAI1_MCLK_IN_to_CTIMER4 = MUX_A(CM_CTIMERCLKSEL4, 8), /*!< Attach SAI1 MCLK IN to CTIMER4. */
570 kSAI0_TX_BCLK_to_CTIMER4 = MUX_A(CM_CTIMERCLKSEL4, 9), /*!< Attach SAI0 TX_BCLK to CTIMER4. */
571 kSAI0_RX_BCLK_to_CTIMER4 = MUX_A(CM_CTIMERCLKSEL4, 10), /*!< Attach SAI0 RX_BCLK to CTIMER4. */
572 kSAI1_TX_BCLK_to_CTIMER4 = MUX_A(CM_CTIMERCLKSEL4, 11), /*!< Attach SAI1 TX_BCLK to CTIMER4. */
573 kSAI1_RX_BCLK_to_CTIMER4 = MUX_A(CM_CTIMERCLKSEL4, 12), /*!< Attach SAI1 RX_BCLK to CTIMER4. */
574 kNONE_to_CTIMER4 = MUX_A(CM_CTIMERCLKSEL4, 15), /*!< Attach NONE to CTIMER4. */
575
576 kMAIN_CLK_to_CLKOUT = MUX_A(CM_CLKOUTCLKSEL, 0), /*!< Attach MAIN_CLK to CLKOUT. */
577 kPLL0_to_CLKOUT = MUX_A(CM_CLKOUTCLKSEL, 1), /*!< Attach PLL0 to CLKOUT. */
578 kCLK_IN_to_CLKOUT = MUX_A(CM_CLKOUTCLKSEL, 2), /*!< Attach Clk_in to CLKOUT. */
579 kFRO_HF_to_CLKOUT = MUX_A(CM_CLKOUTCLKSEL, 3), /*!< Attach FRO_HF to CLKOUT. */
580 kFRO12M_to_CLKOUT = MUX_A(CM_CLKOUTCLKSEL, 4), /*!< Attach FRO 12 MHz to CLKOUT. */
581 kPLL1_CLK0_to_CLKOUT = MUX_A(CM_CLKOUTCLKSEL, 5), /*!< Attach PLL1_clk0 to CLKOUT. */
582 kLPOSC_to_CLKOUT = MUX_A(CM_CLKOUTCLKSEL, 6), /*!< Attach LP Oscillator to CLKOUT. */
583 kUSB_PLL_to_CLKOUT = MUX_A(CM_CLKOUTCLKSEL, 7), /*!< Attach USB_PLL to CLKOUT. */
584 kNONE_to_CLKOUT = MUX_A(CM_CLKOUTCLKSEL, 15), /*!< Attach NONE to CLKOUT. */
585
586 kPLL0_to_ADC0 = MUX_A(CM_ADC0CLKSEL, 1), /*!< Attach PLL0 to ADC0. */
587 kFRO_HF_to_ADC0 = MUX_A(CM_ADC0CLKSEL, 2), /*!< Attach FRO_HF to ADC0. */
588 kFRO12M_to_ADC0 = MUX_A(CM_ADC0CLKSEL, 3), /*!< Attach FRO 12 MHz to ADC0. */
589 kCLK_IN_to_ADC0 = MUX_A(CM_ADC0CLKSEL, 4), /*!< Attach Clk_in to ADC0. */
590 kPLL1_CLK0_to_ADC0 = MUX_A(CM_ADC0CLKSEL, 5), /*!< Attach PLL1_clk0 to ADC0. */
591 kUSB_PLL_to_ADC0 = MUX_A(CM_ADC0CLKSEL, 6), /*!< Attach USB PLL to ADC0. */
592 kNONE_to_ADC0 = MUX_A(CM_ADC0CLKSEL, 7), /*!< Attach NONE to ADC0. */
593
594 kPLL_DIV_to_FLEXCOMM0 = MUX_A(CM_FCCLKSEL0, 1), /*!< Attach PLL_DIV to FLEXCOMM0. */
595 kFRO12M_to_FLEXCOMM0 = MUX_A(CM_FCCLKSEL0, 2), /*!< Attach FRO12M to FLEXCOMM0. */
596 kFRO_HF_DIV_to_FLEXCOMM0 = MUX_A(CM_FCCLKSEL0, 3), /*!< Attach FRO_HF_DIV to FLEXCOMM0. */
597 kCLK_1M_to_FLEXCOMM0 = MUX_A(CM_FCCLKSEL0, 4), /*!< Attach CLK_1MHz to FLEXCOMM0. */
598 kUSB_PLL_to_FLEXCOMM0 = MUX_A(CM_FCCLKSEL0, 5), /*!< Attach USB_PLL to FLEXCOMM0. */
599 kLPOSC_to_FLEXCOMM0 = MUX_A(CM_FCCLKSEL0, 6), /*!< Attach LP Oscillator to FLEXCOMM0. */
600 kNONE_to_FLEXCOMM0 = MUX_A(CM_FCCLKSEL0, 7), /*!< Attach NONE to FLEXCOMM0. */
601
602 kPLL_DIV_to_FLEXCOMM1 = MUX_A(CM_FCCLKSEL1, 1), /*!< Attach PLL_DIV to FLEXCOMM1. */
603 kFRO12M_to_FLEXCOMM1 = MUX_A(CM_FCCLKSEL1, 2), /*!< Attach FRO12M to FLEXCOMM1. */
604 kFRO_HF_DIV_to_FLEXCOMM1 = MUX_A(CM_FCCLKSEL1, 3), /*!< Attach FRO_HF_DIV to FLEXCOMM1. */
605 kCLK_1M_to_FLEXCOMM1 = MUX_A(CM_FCCLKSEL1, 4), /*!< Attach CLK_1MHz to FLEXCOMM1. */
606 kUSB_PLL_to_FLEXCOMM1 = MUX_A(CM_FCCLKSEL1, 5), /*!< Attach USB_PLL to FLEXCOMM1. */
607 kLPOSC_to_FLEXCOMM1 = MUX_A(CM_FCCLKSEL1, 6), /*!< Attach LP Oscillator to FLEXCOMM1. */
608 kNONE_to_FLEXCOMM1 = MUX_A(CM_FCCLKSEL1, 7), /*!< Attach NONE to FLEXCOMM1. */
609
610 kPLL_DIV_to_FLEXCOMM2 = MUX_A(CM_FCCLKSEL2, 1), /*!< Attach PLL_DIV to FLEXCOMM2. */
611 kFRO12M_to_FLEXCOMM2 = MUX_A(CM_FCCLKSEL2, 2), /*!< Attach FRO12M to FLEXCOMM2. */
612 kFRO_HF_DIV_to_FLEXCOMM2 = MUX_A(CM_FCCLKSEL2, 3), /*!< Attach FRO_HF_DIV to FLEXCOMM2. */
613 kCLK_1M_to_FLEXCOMM2 = MUX_A(CM_FCCLKSEL2, 4), /*!< Attach CLK_1MHz to FLEXCOMM2. */
614 kUSB_PLL_to_FLEXCOMM2 = MUX_A(CM_FCCLKSEL2, 5), /*!< Attach USB_PLL to FLEXCOMM2. */
615 kLPOSC_to_FLEXCOMM2 = MUX_A(CM_FCCLKSEL2, 6), /*!< Attach LP Oscillator to FLEXCOMM2. */
616 kNONE_to_FLEXCOMM2 = MUX_A(CM_FCCLKSEL2, 7), /*!< Attach NONE to FLEXCOMM2. */
617
618 kPLL_DIV_to_FLEXCOMM3 = MUX_A(CM_FCCLKSEL3, 1), /*!< Attach PLL_DIV to FLEXCOMM3. */
619 kFRO12M_to_FLEXCOMM3 = MUX_A(CM_FCCLKSEL3, 2), /*!< Attach FRO12M to FLEXCOMM3. */
620 kFRO_HF_DIV_to_FLEXCOMM3 = MUX_A(CM_FCCLKSEL3, 3), /*!< Attach FRO_HF_DIV to FLEXCOMM3. */
621 kCLK_1M_to_FLEXCOMM3 = MUX_A(CM_FCCLKSEL3, 4), /*!< Attach CLK_1MHz to FLEXCOMM3. */
622 kUSB_PLL_to_FLEXCOMM3 = MUX_A(CM_FCCLKSEL3, 5), /*!< Attach USB_PLL to FLEXCOMM3. */
623 kLPOSC_to_FLEXCOMM3 = MUX_A(CM_FCCLKSEL3, 6), /*!< Attach LP Oscillator to FLEXCOMM3. */
624 kNONE_to_FLEXCOMM3 = MUX_A(CM_FCCLKSEL3, 7), /*!< Attach NONE to FLEXCOMM3. */
625
626 kPLL_DIV_to_FLEXCOMM4 = MUX_A(CM_FCCLKSEL4, 1), /*!< Attach PLL_DIV to FLEXCOMM4. */
627 kFRO12M_to_FLEXCOMM4 = MUX_A(CM_FCCLKSEL4, 2), /*!< Attach FRO12M to FLEXCOMM4. */
628 kFRO_HF_DIV_to_FLEXCOMM4 = MUX_A(CM_FCCLKSEL4, 3), /*!< Attach FRO_HF_DIV to FLEXCOMM4. */
629 kCLK_1M_to_FLEXCOMM4 = MUX_A(CM_FCCLKSEL4, 4), /*!< Attach CLK_1MHz to FLEXCOMM4. */
630 kUSB_PLL_to_FLEXCOMM4 = MUX_A(CM_FCCLKSEL4, 5), /*!< Attach USB_PLL to FLEXCOMM4. */
631 kLPOSC_to_FLEXCOMM4 = MUX_A(CM_FCCLKSEL4, 6), /*!< Attach LP Oscillator to FLEXCOMM4. */
632 kNONE_to_FLEXCOMM4 = MUX_A(CM_FCCLKSEL4, 7), /*!< Attach NONE to FLEXCOMM4. */
633
634 kPLL_DIV_to_FLEXCOMM5 = MUX_A(CM_FCCLKSEL5, 1), /*!< Attach PLL_DIV to FLEXCOMM5. */
635 kFRO12M_to_FLEXCOMM5 = MUX_A(CM_FCCLKSEL5, 2), /*!< Attach FRO12M to FLEXCOMM5. */
636 kFRO_HF_DIV_to_FLEXCOMM5 = MUX_A(CM_FCCLKSEL5, 3), /*!< Attach FRO_HF_DIV to FLEXCOMM5. */
637 kCLK_1M_to_FLEXCOMM5 = MUX_A(CM_FCCLKSEL5, 4), /*!< Attach CLK_1MHz to FLEXCOMM5. */
638 kUSB_PLL_to_FLEXCOMM5 = MUX_A(CM_FCCLKSEL5, 5), /*!< Attach USB_PLL to FLEXCOMM5. */
639 kLPOSC_to_FLEXCOMM5 = MUX_A(CM_FCCLKSEL5, 6), /*!< Attach LP Oscillator to FLEXCOMM5. */
640 kNONE_to_FLEXCOMM5 = MUX_A(CM_FCCLKSEL5, 7), /*!< Attach NONE to FLEXCOMM5. */
641
642 kPLL_DIV_to_FLEXCOMM6 = MUX_A(CM_FCCLKSEL6, 1), /*!< Attach PLL_DIV to FLEXCOMM6. */
643 kFRO12M_to_FLEXCOMM6 = MUX_A(CM_FCCLKSEL6, 2), /*!< Attach FRO12M to FLEXCOMM6. */
644 kFRO_HF_DIV_to_FLEXCOMM6 = MUX_A(CM_FCCLKSEL6, 3), /*!< Attach FRO_HF_DIV to FLEXCOMM6. */
645 kCLK_1M_to_FLEXCOMM6 = MUX_A(CM_FCCLKSEL6, 4), /*!< Attach CLK_1MHz to FLEXCOMM6. */
646 kUSB_PLL_to_FLEXCOMM6 = MUX_A(CM_FCCLKSEL6, 5), /*!< Attach USB_PLL to FLEXCOMM6. */
647 kLPOSC_to_FLEXCOMM6 = MUX_A(CM_FCCLKSEL6, 6), /*!< Attach LP Oscillator to FLEXCOMM6. */
648 kNONE_to_FLEXCOMM6 = MUX_A(CM_FCCLKSEL6, 7), /*!< Attach NONE to FLEXCOMM6. */
649
650 kPLL_DIV_to_FLEXCOMM7 = MUX_A(CM_FCCLKSEL7, 1), /*!< Attach PLL_DIV to FLEXCOMM7. */
651 kFRO12M_to_FLEXCOMM7 = MUX_A(CM_FCCLKSEL7, 2), /*!< Attach FRO12M to FLEXCOMM7. */
652 kFRO_HF_DIV_to_FLEXCOMM7 = MUX_A(CM_FCCLKSEL7, 3), /*!< Attach FRO_HF_DIV to FLEXCOMM7. */
653 kCLK_1M_to_FLEXCOMM7 = MUX_A(CM_FCCLKSEL7, 4), /*!< Attach CLK_1MHz to FLEXCOMM7. */
654 kUSB_PLL_to_FLEXCOMM7 = MUX_A(CM_FCCLKSEL7, 5), /*!< Attach USB_PLL to FLEXCOMM7. */
655 kLPOSC_to_FLEXCOMM7 = MUX_A(CM_FCCLKSEL7, 6), /*!< Attach LP Oscillator to FLEXCOMM7. */
656 kNONE_to_FLEXCOMM7 = MUX_A(CM_FCCLKSEL7, 7), /*!< Attach NONE to FLEXCOMM7. */
657
658 kPLL0_to_ADC1 = MUX_A(CM_ADC1CLKSEL, 1), /*!< Attach PLL0 to ADC1. */
659 kFRO_HF_to_ADC1 = MUX_A(CM_ADC1CLKSEL, 2), /*!< Attach FRO_HF to ADC1. */
660 kFRO12M_to_ADC1 = MUX_A(CM_ADC1CLKSEL, 3), /*!< Attach FRO12M to ADC1. */
661 kCLK_IN_to_ADC1 = MUX_A(CM_ADC1CLKSEL, 4), /*!< Attach clk_in to ADC1. */
662 kPLL1_CLK0_to_ADC1 = MUX_A(CM_ADC1CLKSEL, 5), /*!< Attach PLL1_clk0 to ADC1. */
663 kUSB_PLL_to_ADC1 = MUX_A(CM_ADC1CLKSEL, 6), /*!< Attach USB PLL to ADC1. */
664 kNONE_to_ADC1 = MUX_A(CM_ADC1CLKSEL, 7), /*!< Attach NONE to ADC1. */
665
666 kPLL0_to_PLLCLKDIV = MUX_A(CM_PLLCLKDIVSEL, 0), /*!< Attach PLL0 to PLLCLKDIV. */
667 kPLL1_CLK0_to_PLLCLKDIV = MUX_A(CM_PLLCLKDIVSEL, 1), /*!< Attach pll1_clk0 to PLLCLKDIV. */
668 kNONE_to_PLLCLKDIV = MUX_A(CM_PLLCLKDIVSEL, 1), /*!< Attach NONE to PLLCLKDIV. */
669
670 kPLL0_to_I3C0FCLK = MUX_A(CM_I3C0FCLKSEL, 1), /*!< Attach PLL0 to I3C0FCLK. */
671 kFRO_HF_to_I3C0FCLK = MUX_A(CM_I3C0FCLKSEL, 3), /*!< Attach FRO_HF to I3C0FCLK. */
672 kCLK_1M_to_I3C0FCLK = MUX_A(CM_I3C0FCLKSEL, 4), /*!< Attach CLK_1M to I3C0FCLK. */
673 kPLL1_CLK0_to_I3C0FCLK = MUX_A(CM_I3C0FCLKSEL, 5), /*!< Attach PLL1_clk0 to I3C0FCLK. */
674 kUSB_PLL_to_I3C0FCLK = MUX_A(CM_I3C0FCLKSEL, 6), /*!< Attach USB PLL to I3C0FCLK. */
675 kNONE_to_I3C0FCLK = MUX_A(CM_I3C0FCLKSEL, 7), /*!< Attach NONE to I3C0FCLK. */
676
677 kPLL0_to_I3C0FCLKSTC = MUX_A(CM_I3C0FCLKSEL, 1), /*!< Attach PLL0 to I3C0FCLKSTC. */
678 kFRO_HF_to_I3C0FCLKSTC = MUX_A(CM_I3C0FCLKSEL, 3), /*!< Attach FRO_HF to I3C0FCLKSTC. */
679 kCLK_1M_to_I3C0FCLKSTC = MUX_A(CM_I3C0FCLKSEL, 4), /*!< Attach CLK_1M to I3C0FCLKSTC. */
680 kPLL1_CLK0_to_I3C0FCLKSTC = MUX_A(CM_I3C0FCLKSEL, 5), /*!< Attach PLL1_clk0 to I3C0FCLKSTC. */
681 kUSB_PLL_to_I3C0FCLKSTC = MUX_A(CM_I3C0FCLKSEL, 6), /*!< Attach USB PLL to I3C0FCLKSTC. */
682 kNONE_to_I3C0FCLKSTC = MUX_A(CM_I3C0FCLKSEL, 7), /*!< Attach NONE to I3C0FCLKSTC. */
683
684 kPLL0_to_I3C0FCLKSlow = MUX_A(CM_I3C0FCLKSEL, 1), /*!< Attach PLL0 to I3C0FCLKS. */
685 kFRO_HF_to_I3C0FCLKSlow = MUX_A(CM_I3C0FCLKSEL, 3), /*!< Attach FRO_HF to I3C0FCLKS. */
686 kCLK_1M_to_I3C0FCLKSlow = MUX_A(CM_I3C0FCLKSEL, 4), /*!< Attach CLK_1M to I3C0FCLKS. */
687 kPLL1_CLK0_to_I3C0FCLKSlow = MUX_A(CM_I3C0FCLKSEL, 5), /*!< Attach PLL1_clk0 to I3C0FCLKS. */
688 kUSB_PLL_to_I3C0FCLKSlow = MUX_A(CM_I3C0FCLKSEL, 6), /*!< Attach USB PLL to I3C0FCLKS. */
689 kNONE_to_I3C0FCLKSlow = MUX_A(CM_I3C0FCLKSEL, 7), /*!< Attach NONE to I3C0FCLKS. */
690
691 kFRO12M_to_MICFILF = MUX_A(CM_MICFILFCLKSEL, 0), /*!< Attach FRO_12M to MICFILF. */
692 kPLL0_to_MICFILF = MUX_A(CM_MICFILFCLKSEL, 1), /*!< Attach PLL0 to MICFILF. */
693 kCLK_IN_to_MICFILF = MUX_A(CM_MICFILFCLKSEL, 2), /*!< Attach Clk_in to MICFILF. */
694 kFRO_HF_to_MICFILF = MUX_A(CM_MICFILFCLKSEL, 3), /*!< Attach FRO_HF to MICFILF. */
695 kPLL1_CLK0_to_MICFILF = MUX_A(CM_MICFILFCLKSEL, 4), /*!< Attach PLL1_clk0 to MICFILF. */
696 kSAI0_MCLK_IN_to_MICFILF = MUX_A(CM_MICFILFCLKSEL, 5), /*!< Attach SAI0_MCLK to MICFILF. */
697 kUSB_PLL_to_MICFILF = MUX_A(CM_MICFILFCLKSEL, 6), /*!< Attach USB PLL to MICFILF. */
698 kSAI1_MCLK_IN_to_MICFILF = MUX_A(CM_MICFILFCLKSEL, 8), /*!< Attach SAI1_MCLK to MICFILF. */
699 kNONE_to_MICFILF = MUX_A(CM_MICFILFCLKSEL, 15), /*!< Attach NONE to MICFILF. */
700
701 kPLL0_to_FLEXIO = MUX_A(CM_FLEXIOCLKSEL, 1), /*!< Attach PLL0 to FLEXIO. */
702 kCLK_IN_to_FLEXIO = MUX_A(CM_FLEXIOCLKSEL, 2), /*!< Attach Clk_in to FLEXIO. */
703 kFRO_HF_to_FLEXIO = MUX_A(CM_FLEXIOCLKSEL, 3), /*!< Attach FRO_HF to FLEXIO. */
704 kFRO12M_to_FLEXIO = MUX_A(CM_FLEXIOCLKSEL, 4), /*!< Attach FRO_12M to FLEXIO. */
705 kPLL1_CLK0_to_FLEXIO = MUX_A(CM_FLEXIOCLKSEL, 5), /*!< Attach pll1_clk0 to FLEXIO. */
706 kUSB_PLL_to_FLEXIO = MUX_A(CM_FLEXIOCLKSEL, 6), /*!< Attach USB PLL to FLEXIO. */
707 kNONE_to_FLEXIO = MUX_A(CM_FLEXIOCLKSEL, 7), /*!< Attach NONE to FLEXIO. */
708
709 kPLL0_to_FLEXCAN0 = MUX_A(CM_FLEXCAN0CLKSEL, 1), /*!< Attach PLL0 to FLEXCAN0. */
710 kCLK_IN_to_FLEXCAN0 = MUX_A(CM_FLEXCAN0CLKSEL, 2), /*!< Attach Clk_in to FLEXCAN0. */
711 kFRO_HF_to_FLEXCAN0 = MUX_A(CM_FLEXCAN0CLKSEL, 3), /*!< Attach FRO_HF to FLEXCAN0. */
712 kPLL1_CLK0_to_FLEXCAN0 = MUX_A(CM_FLEXCAN0CLKSEL, 5), /*!< Attach pll1_clk0 to FLEXCAN0. */
713 kUSB_PLL_to_FLEXCAN0 = MUX_A(CM_FLEXCAN0CLKSEL, 6), /*!< Attach USB PLL to FLEXCAN0. */
714 kNONE_to_FLEXCAN0 = MUX_A(CM_FLEXCAN0CLKSEL, 7), /*!< Attach NONE to FLEXCAN0. */
715
716 kPLL0_to_FLEXCAN1 = MUX_A(CM_FLEXCAN1CLKSEL, 1), /*!< Attach PLL0 to FLEXCAN1. */
717 kCLK_IN_to_FLEXCAN1 = MUX_A(CM_FLEXCAN1CLKSEL, 2), /*!< Attach Clk_in to FLEXCAN1. */
718 kFRO_HF_to_FLEXCAN1 = MUX_A(CM_FLEXCAN1CLKSEL, 3), /*!< Attach FRO_HF to FLEXCAN1. */
719 kPLL1_CLK0_to_FLEXCAN1 = MUX_A(CM_FLEXCAN1CLKSEL, 5), /*!< Attach pll1_clk0 to FLEXCAN1. */
720 kUSB_PLL_to_FLEXCAN1 = MUX_A(CM_FLEXCAN1CLKSEL, 6), /*!< Attach USB PLL to FLEXCAN1. */
721 kNONE_to_FLEXCAN1 = MUX_A(CM_FLEXCAN1CLKSEL, 7), /*!< Attach NONE to FLEXCAN1. */
722
723 kCLK_16K2_to_EWM0 = MUX_A(CM_EWM0CLKSEL, 0), /*!< Attach clk_16k[2] to EWM0. */
724 kXTAL32K2_to_EWM0 = MUX_A(CM_EWM0CLKSEL, 1), /*!< Attach xtal32k[2] to EWM0. */
725
726 kCLK_16K2_to_WDT1 = MUX_A(CM_WDT1CLKSEL, 0), /*!< Attach FRO16K clock 2 to WDT1. */
727 kFRO_HF_DIV_to_WDT1 = MUX_A(CM_WDT1CLKSEL, 1), /*!< Attach FRO_HF_DIV to WDT1. */
728 kCLK_1M_to_WDT1 = MUX_A(CM_WDT1CLKSEL, 2), /*!< Attach clk_1m to WDT1. */
729 kCLK_1M_2_to_WDT1 = MUX_A(CM_WDT1CLKSEL, 3), /*!< Attach clk_1m to WDT1. */
730
731 kCLK_16K2_to_OSTIMER = MUX_A(CM_OSTIMERCLKSEL, 0), /*!< Attach clk_16k[2] to OSTIMER. */
732 kXTAL32K2_to_OSTIMER = MUX_A(CM_OSTIMERCLKSEL, 1), /*!< Attach xtal32k[2] to OSTIMER. */
733 kCLK_1M_to_OSTIMER = MUX_A(CM_OSTIMERCLKSEL, 2), /*!< Attach clk_1m to OSTIMER. */
734 kNONE_to_OSTIMER = MUX_A(CM_OSTIMERCLKSEL, 3), /*!< Attach NONE to OSTIMER. */
735
736 kPLL0_to_CMP0F = MUX_A(CM_CMP0FCLKSEL, 1), /*!< Attach PLL0 to CMP0F. */
737 kFRO_HF_to_CMP0F = MUX_A(CM_CMP0FCLKSEL, 2), /*!< Attach FRO_HF to CMP0F. */
738 kFRO12M_to_CMP0F = MUX_A(CM_CMP0FCLKSEL, 3), /*!< Attach FRO_12M to CMP0F. */
739 kCLK_IN_to_CMP0F = MUX_A(CM_CMP0FCLKSEL, 4), /*!< Attach Clk_in to CMP0F. */
740 kPLL1_CLK0_to_CMP0F = MUX_A(CM_CMP0FCLKSEL, 5), /*!< Attach PLL1_clk0 to CMP0F. */
741 kUSB_PLL_to_CMP0F = MUX_A(CM_CMP0FCLKSEL, 6), /*!< Attach USB PLL to CMP0F. */
742 kNONE_to_CMP0F = MUX_A(CM_CMP0FCLKSEL, 7), /*!< Attach NONE to CMP0F. */
743
744 kPLL0_to_CMP0RR = MUX_A(CM_CMP0RRCLKSEL, 1), /*!< Attach PLL0 to CMP0RR. */
745 kFRO_HF_to_CMP0RR = MUX_A(CM_CMP0RRCLKSEL, 2), /*!< Attach FRO_HF to CMP0RR. */
746 kFRO12M_to_CMP0RR = MUX_A(CM_CMP0RRCLKSEL, 3), /*!< Attach FRO_12M to CMP0RR. */
747 kCLK_IN_to_CMP0RR = MUX_A(CM_CMP0RRCLKSEL, 4), /*!< Attach Clk_in to CMP0RR. */
748 kPLL1_CLK0_to_CMP0RR = MUX_A(CM_CMP0RRCLKSEL, 5), /*!< Attach PLL1_clk0 to CMP0RR. */
749 kUSB_PLL_to_CMP0RR = MUX_A(CM_CMP0RRCLKSEL, 6), /*!< Attach USB PLL to CMP0RR. */
750 kNONE_to_CMP0RR = MUX_A(CM_CMP0RRCLKSEL, 7), /*!< Attach NONE to CMP0RR. */
751
752 kPLL0_to_CMP1F = MUX_A(CM_CMP1FCLKSEL, 1), /*!< Attach PLL0 to CMP1F. */
753 kFRO_HF_to_CMP1F = MUX_A(CM_CMP1FCLKSEL, 2), /*!< Attach FRO_HF to CMP1F. */
754 kFRO12M_to_CMP1F = MUX_A(CM_CMP1FCLKSEL, 3), /*!< Attach FRO_12M to CMP1F. */
755 kCLK_IN_to_CMP1F = MUX_A(CM_CMP1FCLKSEL, 4), /*!< Attach Clk_in to CMP1F. */
756 kPLL1_CLK0_to_CMP1F = MUX_A(CM_CMP1FCLKSEL, 5), /*!< Attach PLL1_clk0 to CMP1F. */
757 kUSB_PLL_to_CMP1F = MUX_A(CM_CMP1FCLKSEL, 6), /*!< Attach USB PLL to CMP1F. */
758 kNONE_to_CMP1F = MUX_A(CM_CMP1FCLKSEL, 7), /*!< Attach NONE to CMP1F. */
759
760 kPLL0_to_CMP1RR = MUX_A(CM_CMP1RRCLKSEL, 1), /*!< Attach PLL0 to CMP1RR. */
761 kFRO_HF_to_CMP1RR = MUX_A(CM_CMP1RRCLKSEL, 2), /*!< Attach FRO_HF to CMP1RR. */
762 kFRO12M_to_CMP1RR = MUX_A(CM_CMP1RRCLKSEL, 3), /*!< Attach FRO_12M to CMP1RR. */
763 kCLK_IN_to_CMP1RR = MUX_A(CM_CMP1RRCLKSEL, 4), /*!< Attach Clk_in to CMP1RR. */
764 kPLL1_CLK0_to_CMP1RR = MUX_A(CM_CMP1RRCLKSEL, 5), /*!< Attach PLL1_clk0 to CMP1RR. */
765 kUSB_PLL_to_CMP1RR = MUX_A(CM_CMP1RRCLKSEL, 6), /*!< Attach USB PLL to CMP1RR. */
766 kNONE_to_CMP1RR = MUX_A(CM_CMP1RRCLKSEL, 7), /*!< Attach NONE to CMP1RR. */
767
768 kCLK_IN_to_UTICK = MUX_A(CM_UTICKCLKSEL, 0), /*!< Attach Clk_in to UTICK. */
769 kXTAL32K2_to_UTICK = MUX_A(CM_UTICKCLKSEL, 1), /*!< Attach xtal32k[2] to UTICK. */
770 kCLK_1M_to_UTICK = MUX_A(CM_UTICKCLKSEL, 2), /*!< Attach clk_1m to UTICK. */
771 kNONE_to_UTICK = MUX_A(CM_UTICKCLKSEL, 3), /*!< Attach NONE to UTICK. */
772
773 kPLL0_to_SAI0 = MUX_A(CM_SAI0CLKSEL, 1), /*!< Attach PLL0 to SAI0. */
774 kCLK_IN_to_SAI0 = MUX_A(CM_SAI0CLKSEL, 2), /*!< Attach Clk_in to SAI0. */
775 kFRO_HF_to_SAI0 = MUX_A(CM_SAI0CLKSEL, 3), /*!< Attach FRO_HF to SAI0. */
776 kPLL1_CLK0_to_SAI0 = MUX_A(CM_SAI0CLKSEL, 4), /*!< Attach PLL1_clk0 to SAI0. */
777 kUSB_PLL_to_SAI0 = MUX_A(CM_SAI0CLKSEL, 6), /*!< Attach USB PLL to SAI0. */
778 kNONE_to_SAI0 = MUX_A(CM_SAI0CLKSEL, 7), /*!< Attach NONE to SAI0. */
779
780 kPLL0_to_SAI1 = MUX_A(CM_SAI1CLKSEL, 1), /*!< Attach PLL0 to SAI1. */
781 kCLK_IN_to_SAI1 = MUX_A(CM_SAI1CLKSEL, 2), /*!< Attach Clk_in to SAI1. */
782 kFRO_HF_to_SAI1 = MUX_A(CM_SAI1CLKSEL, 3), /*!< Attach FRO_HF to SAI1. */
783 kPLL1_CLK0_to_SAI1 = MUX_A(CM_SAI1CLKSEL, 4), /*!< Attach PLL1_clk0 to SAI1. */
784 kUSB_PLL_to_SAI1 = MUX_A(CM_SAI1CLKSEL, 6), /*!< Attach USB PLL to SAI1. */
785 kNONE_to_SAI1 = MUX_A(CM_SAI1CLKSEL, 7), /*!< Attach NONE to SAI1. */
786
787 kPLL0_to_I3C1FCLK = MUX_A(CM_I3C1FCLKSEL, 1), /*!< Attach PLL0 to I3C1FCLK. */
788 kFRO_HF_to_I3C1FCLK = MUX_A(CM_I3C1FCLKSEL, 3), /*!< Attach FRO_HF to I3C1FCLK. */
789 kCLK_1M_to_I3C1FCLK = MUX_A(CM_I3C1FCLKSEL, 4), /*!< Attach CLK_1M to I3C1FCLK. */
790 kPLL1_CLK0_to_I3C1FCLK = MUX_A(CM_I3C1FCLKSEL, 5), /*!< Attach PLL1_clk0 to I3C1FCLK. */
791 kUSB_PLL_to_I3C1FCLK = MUX_A(CM_I3C1FCLKSEL, 6), /*!< Attach USB PLL to I3C1FCLK. */
792 kNONE_to_I3C1FCLK = MUX_A(CM_I3C1FCLKSEL, 7), /*!< Attach NONE to I3C1FCLK. */
793
794 kPLL0_to_I3C1FCLKSTC = MUX_A(CM_I3C1FCLKSEL, 1), /*!< Attach PLL0 to I3C1FCLKSTC. */
795 kFRO_HF_to_I3C1FCLKSTC = MUX_A(CM_I3C1FCLKSEL, 3), /*!< Attach FRO_HF to I3C1FCLKSTC. */
796 kCLK_1M_to_I3C1FCLKSTC = MUX_A(CM_I3C1FCLKSEL, 4), /*!< Attach CLK_1M to I3C1FCLKSTC. */
797 kPLL1_CLK0_to_I3C1FCLKSTC = MUX_A(CM_I3C1FCLKSEL, 5), /*!< Attach PLL1_clk0 to I3C1FCLKSTC. */
798 kUSB_PLL_to_I3C1FCLKSTC = MUX_A(CM_I3C1FCLKSEL, 6), /*!< Attach USB PLL to I3C1FCLKSTC. */
799 kNONE_to_I3C1FCLKSTC = MUX_A(CM_I3C1FCLKSEL, 7), /*!< Attach NONE to I3C1FCLKSTC. */
800
801 kPLL0_to_I3C1FCLKSlow = MUX_A(CM_I3C1FCLKSEL, 1), /*!< Attach PLL0 to I3C1FCLKS. */
802 kFRO_HF_to_I3C1FCLKSlow = MUX_A(CM_I3C1FCLKSEL, 3), /*!< Attach FRO_HF to I3C1FCLKS. */
803 kCLK_1M_to_I3C1FCLKSlow = MUX_A(CM_I3C1FCLKSEL, 4), /*!< Attach CLK_1M to I3C1FCLKS. */
804 kPLL1_CLK0_to_I3C1FCLKSlow = MUX_A(CM_I3C1FCLKSEL, 5), /*!< Attach PLL1_clk0 to I3C1FCLKS. */
805 kUSB_PLL_to_I3C1FCLKSlow = MUX_A(CM_I3C1FCLKSEL, 6), /*!< Attach USB PLL to I3C1FCLKS. */
806 kNONE_to_I3C1FCLKSlow = MUX_A(CM_I3C1FCLKSEL, 7), /*!< Attach NONE to I3C1FCLKS. */
807
808 kNONE_to_NONE = (int)0x80000000U, /*!< Attach NONE to NONE. */
809
810 } clock_attach_id_t;
811
812 /*! @brief Clock dividers */
813 typedef enum _clock_div_name
814 {
815 kCLOCK_DivSystickClk0 = 0, /*!< Systick Clk0 Divider. */
816 kCLOCK_DivTraceClk = ((0x308 - 0x300) / 4), /*!< Trace Clk Divider. */
817 kCLOCK_DivSlowClk = ((0x378 - 0x300) / 4), /*!< SLOW CLK Divider. */
818 kCLOCK_DivAhbClk = ((0x380 - 0x300) / 4), /*!< Ahb Clk Divider. */
819 kCLOCK_DivClkOut = ((0x384 - 0x300) / 4), /*!< ClkOut Clk Divider. */
820 kCLOCK_DivFrohfClk = ((0x388 - 0x300) / 4), /*!< Frohf Clk Divider. */
821 kCLOCK_DivWdt0Clk = ((0x38C - 0x300) / 4), /*!< Wdt0 Clk Divider. */
822 kCLOCK_DivAdc0Clk = ((0x394 - 0x300) / 4), /*!< Adc0 Clk Divider. */
823 kCLOCK_DivPllClk = ((0x3C4 - 0x300) / 4), /*!< Pll Clk Divider. */
824 kCLOCK_DivCtimer0Clk = ((0x3D0 - 0x300) / 4), /*!< Ctimer0 Clk Divider. */
825 kCLOCK_DivCtimer1Clk = ((0x3D4 - 0x300) / 4), /*!< Ctimer1 Clk Divider. */
826 kCLOCK_DivCtimer2Clk = ((0x3D8 - 0x300) / 4), /*!< Ctimer2 Clk Divider. */
827 kCLOCK_DivCtimer3Clk = ((0x3DC - 0x300) / 4), /*!< Ctimer3 Clk Divider. */
828 kCLOCK_DivCtimer4Clk = ((0x3E0 - 0x300) / 4), /*!< Ctimer4 Clk Divider. */
829 kCLOCK_DivPLL1Clk0 = ((0x3E4 - 0x300) / 4), /*!< PLL1 Clk0 Divider. */
830 kCLOCK_DivPLL1Clk1 = ((0x3E8 - 0x300) / 4), /*!< Pll1 Clk1 Divider. */
831 kCLOCK_DivUtickClk = ((0x3F0 - 0x300) / 4), /*!< Utick Clk Divider. */
832 kCLOCK_DivFrg = ((0x3F4 - 0x300) / 4), /*!< CLKOUT FRG Clk Divider. */
833 kCLOCK_DivAdc1Clk = ((0x468 - 0x300) / 4), /*!< Adc1 Clk Divider. */
834 kCLOCK_DivI3c0FClk = ((0x540 - 0x300) / 4), /*!< I3C0 FClk Divider. */
835 kCLOCK_DivMicfilFClk = ((0x54C - 0x300) / 4), /*!< MICFILFCLK Divider. */
836 kCLOCK_DivFlexioClk = ((0x564 - 0x300) / 4), /*!< Flexio Clk Divider. */
837 kCLOCK_DivFlexcan0Clk = ((0x5A4 - 0x300) / 4), /*!< Flexcan0 Clk Divider. */
838 kCLOCK_DivFlexcan1Clk = ((0x5AC - 0x300) / 4), /*!< Flexcan1 Clk Divider. */
839 kCLOCK_DivWdt1Clk = ((0x5DC - 0x300) / 4), /*!< Wdt1 Clk Divider. */
840 kCLOCK_DivCmp0FClk = ((0x5F4 - 0x300) / 4), /*!< Cmp0 FClk Divider. */
841 kCLOCK_DivCmp0rrClk = ((0x5FC - 0x300) / 4), /*!< Cmp0rr Clk Divider. */
842 kCLOCK_DivCmp1FClk = ((0x604 - 0x300) / 4), /*!< Cmp1 FClk Divider. */
843 kCLOCK_DivCmp1rrClk = ((0x60C - 0x300) / 4), /*!< Cmp1rr Clk Divider. */
844 kCLOCK_DivFlexcom0Clk = ((0x850 - 0x300) / 4), /*!< Flexcom0 Clk Divider. */
845 kCLOCK_DivFlexcom1Clk = ((0x854 - 0x300) / 4), /*!< Flexcom1 Clk Divider. */
846 kCLOCK_DivFlexcom2Clk = ((0x858 - 0x300) / 4), /*!< Flexcom2 Clk Divider. */
847 kCLOCK_DivFlexcom3Clk = ((0x85C - 0x300) / 4), /*!< Flexcom3 Clk Divider. */
848 kCLOCK_DivFlexcom4Clk = ((0x860 - 0x300) / 4), /*!< Flexcom4 Clk Divider. */
849 kCLOCK_DivFlexcom5Clk = ((0x864 - 0x300) / 4), /*!< Flexcom5 Clk Divider. */
850 kCLOCK_DivFlexcom6Clk = ((0x868 - 0x300) / 4), /*!< Flexcom6 Clk Divider. */
851 kCLOCK_DivFlexcom7Clk = ((0x86C - 0x300) / 4), /*!< Flexcom7 Clk Divider. */
852 kCLOCK_DivSai0Clk = ((0x888 - 0x300) / 4), /*!< Sai0 Clk Divider. */
853 kCLOCK_DivSai1Clk = ((0x88C - 0x300) / 4), /*!< Sai1 Clk Divider. */
854 kCLOCK_DivI3c1FClk = ((0xB40 - 0x300) / 4), /*!< I3C1 FClk Divider. */
855 } clock_div_name_t;
856
857 /*! @brief OSC32K clock gate */
858 typedef enum _osc32k_clk_gate_id
859 {
860 kCLOCK_Osc32kToVbat = 0x1, /*!< OSC32K[0] to VBAT domain. */
861 kCLOCK_Osc32kToVsys = 0x2, /*!< OSC32K[1] to VSYS domain. */
862 kCLOCK_Osc32kToWake = 0x4, /*!< OSC32K[2] to WAKE domain. */
863 kCLOCK_Osc32kToMain = 0x8, /*!< OSC32K[3] to MAIN domain. */
864 kCLOCK_Osc32kToAll = 0xF, /*!< OSC32K to VBAT,VSYS,WAKE,MAIN domain. */
865 } osc32k_clk_gate_id_t;
866
867 /*! @brief CLK16K clock gate */
868 typedef enum _clk16k_clk_gate_id
869 {
870 kCLOCK_Clk16KToVbat = 0x1, /*!< Clk16k[0] to VBAT domain. */
871 kCLOCK_Clk16KToVsys = 0x2, /*!< Clk16k[1] to VSYS domain. */
872 kCLOCK_Clk16KToWake = 0x4, /*!< Clk16k[2] to WAKE domain. */
873 kCLOCK_Clk16KToMain = 0x8, /*!< Clk16k[3] to MAIN domain. */
874 kCLOCK_Clk16KToAll = 0xF, /*!< Clk16k to VBAT,VSYS,WAKE,MAIN domain. */
875 } clk16k_clk_gate_id_t;
876
877 /*! @brief system clocks enable controls */
878 typedef enum _clock_ctrl_enable
879 {
880 kCLOCK_FRO1MHZ_CLK_ENA =
881 SYSCON_CLOCK_CTRL_FRO1MHZ_CLK_ENA_MASK, /*!< Enables FRO_1MHz clock for clock muxing in clock gen. */
882 kCLOCK_CLKIN_ENA = SYSCON_CLOCK_CTRL_CLKIN_ENA_MASK, /*!< Enables clk_in clock for MICD, EMVSIM0/1, CAN0/1, I3C0/1,
883 SAI0/1, clkout */
884 kCLOCK_FRO_HF_ENA =
885 SYSCON_CLOCK_CTRL_FRO_HF_ENA_MASK, /*!< Enables FRO HF clock for the Frequency Measure module. */
886 kCLOCK_FRO12MHZ_ENA = SYSCON_CLOCK_CTRL_FRO12MHZ_ENA_MASK, /*!< Enables the FRO_12MHz clock for the Flash,
887 LPTIMER0/1, and Frequency Measurement modules. */
888 kCLOCK_FRO1MHZ_ENA =
889 SYSCON_CLOCK_CTRL_FRO1MHZ_ENA_MASK, /*!< Enables the FRO_1MHz clock for RTC module and for UTICK. */
890 kCLOCK_CLKIN_ENA_FM_USBH_LPT =
891 SYSCON_CLOCK_CTRL_CLKIN_ENA_FM_USBH_LPT_MASK, /*!< Enables the clk_in clock for the Frequency Measurement, USB
892 HS and LPTIMER0/1 modules. */
893 } clock_ctrl_enable_t;
894
895 /*! @brief Source of the USB HS PHY. */
896 typedef enum _clock_usb_phy_src
897 {
898 kCLOCK_Usbphy480M = 0, /*!< Use 480M. */
899 } clock_usb_phy_src_t;
900
901 /*!
902 * @brief SCG status return codes.
903 */
904 enum _scg_status
905 {
906 kStatus_SCG_Busy = MAKE_STATUS(kStatusGroup_SCG, 1), /*!< Clock is busy. */
907 kStatus_SCG_InvalidSrc = MAKE_STATUS(kStatusGroup_SCG, 2) /*!< Invalid source. */
908 };
909
910 /*!
911 * @brief firc trim mode.
912 */
913 typedef enum _firc_trim_mode
914 {
915 kSCG_FircTrimNonUpdate = SCG_FIRCCSR_FIRCTREN_MASK,
916 /*!< Trim enable but not enable trim value update. In this mode, the
917 trim value is fixed to the initialized value which is defined by
918 trimCoar and trimFine in configure structure \ref trim_config_t.*/
919
920 kSCG_FircTrimUpdate = SCG_FIRCCSR_FIRCTREN_MASK | SCG_FIRCCSR_FIRCTRUP_MASK
921 /*!< Trim enable and trim value update enable. In this mode, the trim
922 value is auto update. */
923
924 } firc_trim_mode_t;
925
926 /*!
927 * @brief firc trim source.
928 */
929 typedef enum _firc_trim_src
930 {
931 kSCG_FircTrimSrcUsb0 = 0U, /*!< USB0 start of frame (1kHz). */
932 kSCG_FircTrimSrcSysOsc = 2U, /*!< System OSC. */
933 kSCG_FircTrimSrcRtcOsc = 3U, /*!< RTC OSC (32.768 kHz). */
934 } firc_trim_src_t;
935
936 /*!
937 * @brief firc trim configuration.
938 */
939 typedef struct _firc_trim_config
940 {
941 firc_trim_mode_t trimMode; /*!< Trim mode. */
942 firc_trim_src_t trimSrc; /*!< Trim source. */
943 uint16_t trimDiv; /*!< Divider of SOSC. */
944
945 uint8_t trimCoar; /*!< Trim coarse value; Irrelevant if trimMode is kSCG_TrimUpdate. */
946 uint8_t trimFine; /*!< Trim fine value; Irrelevant if trimMode is kSCG_TrimUpdate. */
947 } firc_trim_config_t;
948
949 /*!
950 * @brief sirc trim mode.
951 */
952 typedef enum _sirc_trim_mode
953 {
954 kSCG_SircTrimNonUpdate = SCG_SIRCCSR_SIRCTREN_MASK,
955 /*!< Trim enable but not enable trim value update. In this mode, the
956 trim value is fixed to the initialized value which is defined by
957 trimCoar and trimFine in configure structure \ref trim_config_t.*/
958
959 kSCG_SircTrimUpdate = SCG_SIRCCSR_SIRCTREN_MASK | SCG_SIRCCSR_SIRCTRUP_MASK
960 /*!< Trim enable and trim value update enable. In this mode, the trim
961 value is auto update. */
962
963 } sirc_trim_mode_t;
964
965 /*!
966 * @brief sirc trim source.
967 */
968 typedef enum _sirc_trim_src
969 {
970 kSCG_SircTrimSrcSysOsc = 2U, /*!< System OSC. */
971 kSCG_SircTrimSrcRtcOsc = 3U, /*!< RTC OSC (32.768 kHz). */
972 } sirc_trim_src_t;
973
974 /*!
975 * @brief sirc trim configuration.
976 */
977 typedef struct _sirc_trim_config
978 {
979 sirc_trim_mode_t trimMode; /*!< Trim mode. */
980 sirc_trim_src_t trimSrc; /*!< Trim source. */
981 uint16_t trimDiv; /*!< Divider of SOSC. */
982
983 uint8_t cltrim; /*!< Trim coarse value; Irrelevant if trimMode is kSCG_TrimUpdate. */
984 uint8_t ccotrim; /*!< Trim fine value; Irrelevant if trimMode is kSCG_TrimUpdate. */
985 } sirc_trim_config_t;
986
987 /*!
988 * @brief SCG system OSC monitor mode.
989 */
990 typedef enum _scg_sosc_monitor_mode
991 {
992 kSCG_SysOscMonitorDisable = 0U, /*!< Monitor disabled. */
993 kSCG_SysOscMonitorInt = SCG_SOSCCSR_SOSCCM_MASK, /*!< Interrupt when the SOSC error is detected. */
994 kSCG_SysOscMonitorReset =
995 SCG_SOSCCSR_SOSCCM_MASK | SCG_SOSCCSR_SOSCCMRE_MASK /*!< Reset when the SOSC error is detected. */
996 } scg_sosc_monitor_mode_t;
997
998 /*!
999 * @brief SCG ROSC monitor mode.
1000 */
1001 typedef enum _scg_rosc_monitor_mode
1002 {
1003 kSCG_RoscMonitorDisable = 0U, /*!< Monitor disabled. */
1004 kSCG_RoscMonitorInt = SCG_ROSCCSR_ROSCCM_MASK, /*!< Interrupt when the RTC OSC error is detected. */
1005 kSCG_RoscMonitorReset =
1006 SCG_ROSCCSR_ROSCCM_MASK | SCG_ROSCCSR_ROSCCMRE_MASK /*!< Reset when the RTC OSC error is detected. */
1007 } scg_rosc_monitor_mode_t;
1008
1009 /*!
1010 * @brief SCG UPLL monitor mode.
1011 */
1012 typedef enum _scg_upll_monitor_mode
1013 {
1014 kSCG_UpllMonitorDisable = 0U, /*!< Monitor disabled. */
1015 kSCG_UpllMonitorInt = SCG_UPLLCSR_UPLLCM_MASK, /*!< Interrupt when the UPLL error is detected. */
1016 kSCG_UpllMonitorReset =
1017 SCG_UPLLCSR_UPLLCM_MASK | SCG_UPLLCSR_UPLLCMRE_MASK /*!< Reset when the UPLL error is detected. */
1018 } scg_upll_monitor_mode_t;
1019
1020 /*!
1021 * @brief SCG PLL0 monitor mode.
1022 */
1023 typedef enum _scg_pll0_monitor_mode
1024 {
1025 kSCG_Pll0MonitorDisable = 0U, /*!< Monitor disabled. */
1026 kSCG_Pll0MonitorInt = SCG_APLLCSR_APLLCM_MASK, /*!< Interrupt when the PLL0 Clock error is detected. */
1027 kSCG_Pll0MonitorReset =
1028 SCG_APLLCSR_APLLCM_MASK | SCG_APLLCSR_APLLCMRE_MASK /*!< Reset when the PLL0 Clock error is detected. */
1029 } scg_pll0_monitor_mode_t;
1030
1031 /*!
1032 * @brief SCG PLL1 monitor mode.
1033 */
1034 typedef enum _scg_pll1_monitor_mode
1035 {
1036 kSCG_Pll1MonitorDisable = 0U, /*!< Monitor disabled. */
1037 kSCG_Pll1MonitorInt = SCG_SPLLCSR_SPLLCM_MASK, /*!< Interrupt when the PLL1 Clock error is detected. */
1038 kSCG_Pll1MonitorReset =
1039 SCG_SPLLCSR_SPLLCM_MASK | SCG_SPLLCSR_SPLLCMRE_MASK /*!< Reset when the PLL1 Clock error is detected. */
1040 } scg_pll1_monitor_mode_t;
1041
1042 /*!
1043 * @brief The enumerator of internal capacitance of OSC's XTAL pin.
1044 */
1045 typedef enum _vbat_osc_xtal_cap
1046 {
1047 kVBAT_OscXtal0pFCap = 0x0U, /*!< The internal capacitance for XTAL pin is 0pF. */
1048 kVBAT_OscXtal2pFCap = 0x1U, /*!< The internal capacitance for XTAL pin is 2pF. */
1049 kVBAT_OscXtal4pFCap = 0x2U, /*!< The internal capacitance for XTAL pin is 4pF. */
1050 kVBAT_OscXtal6pFCap = 0x3U, /*!< The internal capacitance for XTAL pin is 6pF. */
1051 kVBAT_OscXtal8pFCap = 0x4U, /*!< The internal capacitance for XTAL pin is 8pF. */
1052 kVBAT_OscXtal10pFCap = 0x5U, /*!< The internal capacitance for XTAL pin is 10pF. */
1053 kVBAT_OscXtal12pFCap = 0x6U, /*!< The internal capacitance for XTAL pin is 12pF. */
1054 kVBAT_OscXtal14pFCap = 0x7U, /*!< The internal capacitance for XTAL pin is 14pF. */
1055 kVBAT_OscXtal16pFCap = 0x8U, /*!< The internal capacitance for XTAL pin is 16pF. */
1056 kVBAT_OscXtal18pFCap = 0x9U, /*!< The internal capacitance for XTAL pin is 18pF. */
1057 kVBAT_OscXtal20pFCap = 0xAU, /*!< The internal capacitance for XTAL pin is 20pF. */
1058 kVBAT_OscXtal22pFCap = 0xBU, /*!< The internal capacitance for XTAL pin is 22pF. */
1059 kVBAT_OscXtal24pFCap = 0xCU, /*!< The internal capacitance for XTAL pin is 24pF. */
1060 kVBAT_OscXtal26pFCap = 0xDU, /*!< The internal capacitance for XTAL pin is 26pF. */
1061 kVBAT_OscXtal28pFCap = 0xEU, /*!< The internal capacitance for XTAL pin is 28pF. */
1062 kVBAT_OscXtal30pFCap = 0xFU, /*!< The internal capacitance for XTAL pin is 30pF. */
1063 } vbat_osc_xtal_cap_t;
1064
1065 /*!
1066 * @brief The enumerator of internal capacitance of OSC's EXTAL pin.
1067 */
1068 typedef enum _vbat_osc_extal_cap
1069 {
1070 kVBAT_OscExtal0pFCap = 0x0U, /*!< The internal capacitance for EXTAL pin is 0pF. */
1071 kVBAT_OscExtal2pFCap = 0x1U, /*!< The internal capacitance for EXTAL pin is 2pF. */
1072 kVBAT_OscExtal4pFCap = 0x2U, /*!< The internal capacitance for EXTAL pin is 4pF. */
1073 kVBAT_OscExtal6pFCap = 0x3U, /*!< The internal capacitance for EXTAL pin is 6pF. */
1074 kVBAT_OscExtal8pFCap = 0x4U, /*!< The internal capacitance for EXTAL pin is 8pF. */
1075 kVBAT_OscExtal10pFCap = 0x5U, /*!< The internal capacitance for EXTAL pin is 10pF. */
1076 kVBAT_OscExtal12pFCap = 0x6U, /*!< The internal capacitance for EXTAL pin is 12pF. */
1077 kVBAT_OscExtal14pFCap = 0x7U, /*!< The internal capacitance for EXTAL pin is 14pF. */
1078 kVBAT_OscExtal16pFCap = 0x8U, /*!< The internal capacitance for EXTAL pin is 16pF. */
1079 kVBAT_OscExtal18pFCap = 0x9U, /*!< The internal capacitance for EXTAL pin is 18pF. */
1080 kVBAT_OscExtal20pFCap = 0xAU, /*!< The internal capacitance for EXTAL pin is 20pF. */
1081 kVBAT_OscExtal22pFCap = 0xBU, /*!< The internal capacitance for EXTAL pin is 22pF. */
1082 kVBAT_OscExtal24pFCap = 0xCU, /*!< The internal capacitance for EXTAL pin is 24pF. */
1083 kVBAT_OscExtal26pFCap = 0xDU, /*!< The internal capacitance for EXTAL pin is 26pF. */
1084 kVBAT_OscExtal28pFCap = 0xEU, /*!< The internal capacitance for EXTAL pin is 28pF. */
1085 kVBAT_OscExtal30pFCap = 0xFU, /*!< The internal capacitance for EXTAL pin is 30pF. */
1086 } vbat_osc_extal_cap_t;
1087
1088 /*!
1089 * @brief The enumerator of osc amplifier gain fine adjustment.
1090 * Changes the oscillator amplitude by modifying the automatic gain control (AGC).
1091 */
1092 typedef enum _vbat_osc_fine_adjustment_value
1093 {
1094 kVBAT_OscCoarseAdjustment05 = 0U,
1095 kVBAT_OscCoarseAdjustment10 = 1U,
1096 kVBAT_OscCoarseAdjustment18 = 2U,
1097 kVBAT_OscCoarseAdjustment33 = 3U,
1098 } vbat_osc_coarse_adjustment_value_t;
1099
1100 /*!
1101 * @brief The structure of oscillator configuration.
1102 */
1103 typedef struct _vbat_osc_config
1104 {
1105 bool enableInternalCapBank; /*!< enable/disable the internal capacitance bank. */
1106
1107 bool enableCrystalOscillatorBypass; /*!< enable/disable the crystal oscillator bypass. */
1108
1109 vbat_osc_xtal_cap_t xtalCap; /*!< The internal capacitance for the OSC XTAL pin from the capacitor bank,
1110 only useful when the internal capacitance bank is enabled. */
1111 vbat_osc_extal_cap_t extalCap; /*!< The internal capacitance for the OSC EXTAL pin from the capacitor bank, only
1112 useful when the internal capacitance bank is enabled. */
1113 vbat_osc_coarse_adjustment_value_t
1114 coarseAdjustment; /*!< 32kHz crystal oscillator amplifier coarse adjustment value. */
1115 } vbat_osc_config_t;
1116
1117 /*!
1118 * @brief The active run mode (voltage level).
1119 */
1120 typedef enum _run_mode
1121 {
1122 kMD_Mode, /*!< Midvoltage (1.0 V). */
1123 kSD_Mode, /*!< Normal voltage (1.1 V). */
1124 kOD_Mode, /*!< Overdrive voltage (1.2 V). */
1125 } run_mode_t;
1126
1127 /*******************************************************************************
1128 * API
1129 ******************************************************************************/
1130
1131 #if defined(__cplusplus)
1132 extern "C" {
1133 #endif /* __cplusplus */
1134
1135 /**
1136 * @brief Enable the clock for specific IP.
1137 * @param clk : Clock to be enabled.
1138 * @return Nothing
1139 */
CLOCK_EnableClock(clock_ip_name_t clk)1140 static inline void CLOCK_EnableClock(clock_ip_name_t clk)
1141 {
1142 uint32_t index = CLK_GATE_ABSTRACT_REG_OFFSET(clk);
1143 uint32_t bit = CLK_GATE_ABSTRACT_BITS_SHIFT(clk);
1144
1145 if (index == (uint32_t)REG_PWM0SUBCTL)
1146 {
1147 SYSCON->PWM0SUBCTL |= (1UL << bit);
1148 SYSCON->AHBCLKCTRLSET[3] = 0x40U;
1149 }
1150 else if (index == (uint32_t)REG_PWM1SUBCTL)
1151 {
1152 SYSCON->PWM1SUBCTL |= (1UL << bit);
1153 SYSCON->AHBCLKCTRLSET[3] = 0x80U;
1154 }
1155 else
1156 {
1157 SYSCON->AHBCLKCTRLSET[index] = (1UL << bit);
1158 }
1159 }
1160
1161 /**
1162 * @brief Disable the clock for specific IP.
1163 * @param clk : Clock to be Disabled.
1164 * @return Nothing
1165 */
CLOCK_DisableClock(clock_ip_name_t clk)1166 static inline void CLOCK_DisableClock(clock_ip_name_t clk)
1167 {
1168 uint32_t index = CLK_GATE_ABSTRACT_REG_OFFSET(clk);
1169 uint32_t bit = CLK_GATE_ABSTRACT_BITS_SHIFT(clk);
1170
1171 if (index == (uint32_t)REG_PWM0SUBCTL)
1172 {
1173 SYSCON->PWM0SUBCTL &= ~(1UL << bit);
1174 if (0U == (SYSCON->PWM0SUBCTL & 0xFU))
1175 {
1176 SYSCON->AHBCLKCTRLCLR[3] = 0x20U;
1177 }
1178 }
1179 else if (index == (uint32_t)REG_PWM1SUBCTL)
1180 {
1181 SYSCON->PWM1SUBCTL &= ~(1UL << bit);
1182 if (0U == (SYSCON->PWM1SUBCTL & 0xFU))
1183 {
1184 SYSCON->AHBCLKCTRLCLR[3] = 0x40U;
1185 }
1186 }
1187 else
1188 {
1189 SYSCON->AHBCLKCTRLCLR[index] = (1UL << bit);
1190 }
1191 }
1192
1193 /**
1194 * @brief Initialize the Core clock to given frequency (48 or 144 MHz).
1195 * This function turns on FIRC and select the given frequency as the source of fro_hf
1196 * @param iFreq : Desired frequency (must be one of CLK_FRO_44MHZ or CLK_FRO_144MHZ)
1197 * @return returns success or fail status.
1198 */
1199 status_t CLOCK_SetupFROHFClocking(uint32_t iFreq);
1200
1201 /**
1202 * @brief Initialize the external osc clock to given frequency.
1203 * @param iFreq : Desired frequency (must be equal to exact rate in Hz)
1204 * @return returns success or fail status.
1205 */
1206 status_t CLOCK_SetupExtClocking(uint32_t iFreq);
1207
1208 /**
1209 * @brief Initialize the external reference clock to given frequency.
1210 * @param iFreq : Desired frequency (must be equal to exact rate in Hz)
1211 * @return returns success or fail status.
1212 */
1213 status_t CLOCK_SetupExtRefClocking(uint32_t iFreq);
1214
1215 /**
1216 * @brief Initialize the XTAL32/EXTAL32 input clock to given frequency.
1217 * @param id : OSC 32 kHz output clock to specified modules, it should use osc32k_clk_gate_id_t value
1218 * @return returns success or fail status.
1219 */
1220 status_t CLOCK_SetupOsc32KClocking(uint32_t id);
1221
1222 /**
1223 * @brief Initialize the FRO16K input clock to given frequency.
1224 * @param id : FRO 16 kHz output clock to specified modules, it should use clk16k_clk_gate_id_t value
1225 * @return returns success or fail status.
1226 */
1227 status_t CLOCK_SetupClk16KClocking(uint32_t id);
1228
1229 /**
1230 * @brief Setup FROHF trim.
1231 * @param config : FROHF trim value
1232 * @return returns success or fail status.
1233 */
1234 status_t CLOCK_FROHFTrimConfig(firc_trim_config_t config);
1235
1236 /**
1237 * @brief Setup FRO 12M trim.
1238 * @param config : FRO 12M trim value
1239 * @return returns success or fail status.
1240 */
1241 status_t CLOCK_FRO12MTrimConfig(sirc_trim_config_t config);
1242
1243 /*!
1244 * @brief Sets the system OSC monitor mode.
1245 *
1246 * This function sets the system OSC monitor mode. The mode can be disabled,
1247 * it can generate an interrupt when the error is disabled, or reset when the error is detected.
1248 *
1249 * @param mode Monitor mode to set.
1250 */
1251 void CLOCK_SetSysOscMonitorMode(scg_sosc_monitor_mode_t mode);
1252
1253 /*!
1254 * @brief Sets the ROSC monitor mode.
1255 *
1256 * This function sets the ROSC monitor mode. The mode can be disabled,
1257 * it can generate an interrupt when the error is disabled, or reset when the error is detected.
1258 *
1259 * @param mode Monitor mode to set.
1260 */
1261 void CLOCK_SetRoscMonitorMode(scg_rosc_monitor_mode_t mode);
1262
1263 /*!
1264 * @brief Sets the UPLL monitor mode.
1265 *
1266 * This function sets the UPLL monitor mode. The mode can be disabled,
1267 * it can generate an interrupt when the error is disabled, or reset when the error is detected.
1268 *
1269 * @param mode Monitor mode to set.
1270 */
1271 void CLOCK_SetUpllMonitorMode(scg_upll_monitor_mode_t mode);
1272
1273 /*!
1274 * @brief Sets the PLL0 monitor mode.
1275 *
1276 * This function sets the PLL0 monitor mode. The mode can be disabled,
1277 * it can generate an interrupt when the error is disabled, or reset when the error is detected.
1278 *
1279 * @param mode Monitor mode to set.
1280 */
1281 void CLOCK_SetPll0MonitorMode(scg_pll0_monitor_mode_t mode);
1282
1283 /*!
1284 * @brief Sets the PLL1 monitor mode.
1285 *
1286 * This function sets the PLL1 monitor mode. The mode can be disabled,
1287 * it can generate an interrupt when the error is disabled, or reset when the error is detected.
1288 *
1289 * @param mode Monitor mode to set.
1290 */
1291 void CLOCK_SetPll1MonitorMode(scg_pll1_monitor_mode_t mode);
1292
1293 /*!
1294 * @brief Config 32k Crystal Oscillator.
1295 *
1296 * @param base VBAT peripheral base address.
1297 * @param config The pointer to the structure \ref vbat_osc_config_t.
1298 */
1299 void VBAT_SetOscConfig(VBAT_Type *base, const vbat_osc_config_t *config);
1300
1301 /*!
1302 * @brief Set the additional number of wait-states added to account for the ratio of system clock period to flash access
1303 * time during full speed power mode.
1304 * @param system_freq_hz : Input frequency
1305 * @param mode : Active run mode (voltage level).
1306 * @return success or fail status
1307 */
1308 status_t CLOCK_SetFLASHAccessCyclesForFreq(uint32_t system_freq_hz, run_mode_t mode);
1309
1310 /**
1311 * @brief Configure the clock selection muxes.
1312 * @param connection : Clock to be configured.
1313 * @return Nothing
1314 */
1315 void CLOCK_AttachClk(clock_attach_id_t connection);
1316
1317 /**
1318 * @brief Get the actual clock attach id.
1319 * This fuction uses the offset in input attach id, then it reads the actual source value in
1320 * the register and combine the offset to obtain an actual attach id.
1321 * @param attachId : Clock attach id to get.
1322 * @return Clock source value.
1323 */
1324 clock_attach_id_t CLOCK_GetClockAttachId(clock_attach_id_t attachId);
1325
1326 /**
1327 * @brief Setup peripheral clock dividers.
1328 * @param div_name : Clock divider name
1329 * @param divided_by_value: Value to be divided
1330 * @return Nothing
1331 */
1332 void CLOCK_SetClkDiv(clock_div_name_t div_name, uint32_t divided_by_value);
1333
1334 /**
1335 * @brief Get peripheral clock dividers.
1336 * @param div_name : Clock divider name
1337 * @return peripheral clock dividers
1338 */
1339 uint32_t CLOCK_GetClkDiv(clock_div_name_t div_name);
1340
1341 /**
1342 * @brief Halt peripheral clock dividers.
1343 * @param div_name : Clock divider name
1344 * @return Nothing
1345 */
1346 void CLOCK_HaltClkDiv(clock_div_name_t div_name);
1347
1348 /**
1349 * @brief system clocks enable controls.
1350 * @param mask : system clocks enable value, it should use clock_ctrl_enable_t value
1351 * @return Nothing
1352 */
1353 void CLOCK_SetupClockCtrl(uint32_t mask);
1354
1355 /*! @brief Return Frequency of selected clock
1356 * @return Frequency of selected clock
1357 */
1358 uint32_t CLOCK_GetFreq(clock_name_t clockName);
1359
1360 /*! @brief Return Frequency of core
1361 * @return Frequency of the core
1362 */
1363 uint32_t CLOCK_GetCoreSysClkFreq(void);
1364
1365 /*! @brief Return Frequency of CTimer functional Clock
1366 * @return Frequency of CTimer functional Clock
1367 */
1368 uint32_t CLOCK_GetCTimerClkFreq(uint32_t id);
1369
1370 /*! @brief Return Frequency of Adc Clock
1371 * @return Frequency of Adc.
1372 */
1373 uint32_t CLOCK_GetAdcClkFreq(uint32_t id);
1374
1375 /*! @brief Return Frequency of LPFlexComm Clock
1376 * @return Frequency of LPFlexComm Clock
1377 */
1378 uint32_t CLOCK_GetLPFlexCommClkFreq(uint32_t id);
1379
1380 /*! @brief Return Frequency of PLL
1381 * @return Frequency of PLL
1382 */
1383 uint32_t CLOCK_GetPll0OutFreq(void);
1384 /*! @brief Return Frequency of USB PLL
1385 * @return Frequency of PLL
1386 */
1387 uint32_t CLOCK_GetPll1OutFreq(void);
1388
1389 /*! @brief Return Frequency of PLLCLKDIV
1390 * @return Frequency of PLLCLKDIV Clock
1391 */
1392 uint32_t CLOCK_GetPllClkDivFreq(void);
1393
1394 /*! @brief Return Frequency of I3C function Clock
1395 * @return Frequency of I3C function Clock
1396 */
1397 uint32_t CLOCK_GetI3cClkFreq(uint32_t id);
1398
1399 /*! @brief Return Frequency of MICFIL Clock
1400 * @return Frequency of MICFIL.
1401 */
1402 uint32_t CLOCK_GetMicfilClkFreq(void);
1403
1404 /*! @brief Return Frequency of FLEXIO
1405 * @return Frequency of FLEXIO Clock
1406 */
1407 uint32_t CLOCK_GetFlexioClkFreq(void);
1408
1409 /*! @brief Return Frequency of FLEXCAN
1410 * @return Frequency of FLEXCAN Clock
1411 */
1412 uint32_t CLOCK_GetFlexcanClkFreq(uint32_t id);
1413
1414 /*! @brief Return Frequency of EWM0 Clock
1415 * @return Frequency of EWM0.
1416 */
1417 uint32_t CLOCK_GetEwm0ClkFreq(void);
1418
1419 /*! @brief Return Frequency of Watchdog
1420 * @return Frequency of Watchdog
1421 */
1422 uint32_t CLOCK_GetWdtClkFreq(uint32_t id);
1423
1424 /*! @brief Return Frequency of OSTIMER
1425 * @return Frequency of OSTIMER Clock
1426 */
1427 uint32_t CLOCK_GetOstimerClkFreq(void);
1428
1429 /*! @brief Return Frequency of CMP Function Clock
1430 * @return Frequency of CMP Function.
1431 */
1432 uint32_t CLOCK_GetCmpFClkFreq(uint32_t id);
1433
1434 /*! @brief Return Frequency of CMP Round Robin Clock
1435 * @return Frequency of CMP Round Robin.
1436 */
1437 uint32_t CLOCK_GetCmpRRClkFreq(uint32_t id);
1438
1439 /*! @brief Return Frequency of UTICK Clock
1440 * @return Frequency of UTICK Clock.
1441 */
1442 uint32_t CLOCK_GetUtickClkFreq(void);
1443
1444 /*! @brief Return Frequency of SAI Clock
1445 * @return Frequency of SAI Clock.
1446 */
1447 uint32_t CLOCK_GetSaiClkFreq(uint32_t id);
1448
1449 /**
1450 * @brief Initialize the SAI MCLK to given frequency.
1451 * @param iFreq : Desired frequency
1452 * @return Nothing
1453 */
1454 void CLOCK_SetupSaiMclk(uint32_t id, uint32_t iFreq);
1455
1456 /**
1457 * @brief Initialize the SAI TX BCLK to given frequency.
1458 * @param iFreq : Desired frequency
1459 * @return Nothing
1460 */
1461 void CLOCK_SetupSaiTxBclk(uint32_t id, uint32_t iFreq);
1462
1463 /**
1464 * @brief Initialize the SAI RX BCLK to given frequency.
1465 * @param iFreq : Desired frequency
1466 * @return Nothing
1467 */
1468 void CLOCK_SetupSaiRxBclk(uint32_t id, uint32_t iFreq);
1469
1470 /**
1471 * @brief Return Frequency of SAI MCLK
1472 * @return Frequency of SAI MCLK
1473 */
1474 uint32_t CLOCK_GetSaiMclkFreq(uint32_t id);
1475
1476 /**
1477 * @brief Return Frequency of SAI TX BCLK
1478 * @return Frequency of SAI TX BCLK
1479 */
1480 uint32_t CLOCK_GetSaiTxBclkFreq(uint32_t id);
1481
1482 /**
1483 * @brief Return Frequency of SAI RX BCLK
1484 * @return Frequency of SAI RX BCLK
1485 */
1486 uint32_t CLOCK_GetSaiRxBclkFreq(uint32_t id);
1487
1488 /*! @brief Return PLL0 input clock rate
1489 * @return PLL0 input clock rate
1490 */
1491 uint32_t CLOCK_GetPLL0InClockRate(void);
1492
1493 /*! @brief Return PLL1 input clock rate
1494 * @return PLL1 input clock rate
1495 */
1496 uint32_t CLOCK_GetPLL1InClockRate(void);
1497
1498 /*! @brief Gets the external UPLL frequency.
1499 * @return The frequency of the external UPLL.
1500 */
1501 uint32_t CLOCK_GetExtUpllFreq(void);
1502
1503 /*! @brief Sets the external UPLL frequency.
1504 * @param The frequency of external UPLL.
1505 */
1506 void CLOCK_SetExtUpllFreq(uint32_t freq);
1507
1508 /*! @brief Check if PLL is locked or not
1509 * @return true if the PLL is locked, false if not locked
1510 */
CLOCK_IsPLL0Locked(void)1511 __STATIC_INLINE bool CLOCK_IsPLL0Locked(void)
1512 {
1513 return (bool)((SCG0->APLLCSR & SCG_APLLCSR_APLL_LOCK_MASK) != 0UL);
1514 }
1515
1516 /*! @brief Check if PLL1 is locked or not
1517 * @return true if the PLL1 is locked, false if not locked
1518 */
CLOCK_IsPLL1Locked(void)1519 __STATIC_INLINE bool CLOCK_IsPLL1Locked(void)
1520 {
1521 return (bool)((SCG0->SPLLCSR & SCG_SPLLCSR_SPLL_LOCK_MASK) != 0UL);
1522 }
1523
1524 /*! @brief PLL configuration structure flags for 'flags' field
1525 * These flags control how the PLL configuration function sets up the PLL setup structure.<br>
1526 *
1527 * When the PLL_CONFIGFLAG_FORCENOFRACT flag is selected, the PLL hardware for the
1528 * automatic bandwidth selection, Spread Spectrum (SS) support, and fractional M-divider
1529 * are not used.<br>
1530 */
1531 #define PLL_CONFIGFLAG_FORCENOFRACT (1U << 2U)
1532 /*!< Force non-fractional output mode, PLL output will not use the fractional, automatic bandwidth, or SS hardware */
1533
1534 /*!
1535 * @brief PLL clock source.
1536 */
1537 typedef enum _pll_clk_src
1538 {
1539 kPll_ClkSrcSysOsc = (0 << 25), /*!< System OSC. */
1540 kPll_ClkSrcFirc = (1 << 25), /*!< Fast IRC. */
1541 kPll_ClkSrcRosc = (2 << 25), /*!< RTC OSC. */
1542 } pll_clk_src_t;
1543
1544 /*! @brief PLL Spread Spectrum (SS) Programmable modulation frequency
1545 * See (MF) field in the PLL0SSCG1 register in the UM.
1546 */
1547 typedef enum _ss_progmodfm
1548 {
1549 kSS_MF_512 = (0 << 2), /*!< Nss = 512 (fm ~= 3.9 - 7.8 kHz) */
1550 kSS_MF_384 = (1 << 2), /*!< Nss ~= 384 (fm ~= 5.2 - 10.4 kHz) */
1551 kSS_MF_256 = (2 << 2), /*!< Nss = 256 (fm ~= 7.8 - 15.6 kHz) */
1552 kSS_MF_128 = (3 << 2), /*!< Nss = 128 (fm ~= 15.6 - 31.3 kHz) */
1553 kSS_MF_64 = (4 << 2), /*!< Nss = 64 (fm ~= 32.3 - 64.5 kHz) */
1554 kSS_MF_32 = (5 << 2), /*!< Nss = 32 (fm ~= 62.5 - 125 kHz) */
1555 kSS_MF_24 = (6 << 2), /*!< Nss ~= 24 (fm ~= 83.3 - 166.6 kHz) */
1556 kSS_MF_16 = (7 << 2) /*!< Nss = 16 (fm ~= 125 - 250 kHz) */
1557 } ss_progmodfm_t;
1558
1559 /*! @brief PLL Spread Spectrum (SS) Programmable frequency modulation depth
1560 * See (MR) field in the PLL0SSCG1 register in the UM.
1561 */
1562 typedef enum _ss_progmoddp
1563 {
1564 kSS_MR_K0 = (0 << 5), /*!< k = 0 (no spread spectrum) */
1565 kSS_MR_K1 = (1 << 5), /*!< k ~= 1 */
1566 kSS_MR_K1_5 = (2 << 5), /*!< k ~= 1.5 */
1567 kSS_MR_K2 = (3 << 5), /*!< k ~= 2 */
1568 kSS_MR_K3 = (4 << 5), /*!< k ~= 3 */
1569 kSS_MR_K4 = (5 << 5), /*!< k ~= 4 */
1570 kSS_MR_K6 = (6 << 5), /*!< k ~= 6 */
1571 kSS_MR_K8 = (7 << 5) /*!< k ~= 8 */
1572 } ss_progmoddp_t;
1573
1574 /*! @brief PLL Spread Spectrum (SS) Modulation waveform control
1575 * See (MC) field in the PLL0SSCG1 register in the UM.<br>
1576 * Compensation for low pass filtering of the PLL to get a triangular
1577 * modulation at the output of the PLL, giving a flat frequency spectrum.
1578 */
1579 typedef enum _ss_modwvctrl
1580 {
1581 kSS_MC_NOC = (0 << 8), /*!< no compensation */
1582 kSS_MC_RECC = (2 << 8), /*!< recommended setting */
1583 kSS_MC_MAXC = (3 << 8), /*!< max. compensation */
1584 } ss_modwvctrl_t;
1585
1586 /*! @brief PLL configuration structure
1587 *
1588 * This structure can be used to configure the settings for a PLL
1589 * setup structure. Fill in the desired configuration for the PLL
1590 * and call the PLL setup function to fill in a PLL setup structure.
1591 */
1592 typedef struct _pll_config
1593 {
1594 uint32_t desiredRate; /*!< Desired PLL rate in Hz */
1595 uint32_t inputSource; /*!< PLL input source */
1596 uint32_t flags; /*!< PLL configuration flags, Or'ed value of PLL_CONFIGFLAG_* definitions */
1597 ss_progmodfm_t ss_mf; /*!< SS Programmable modulation frequency, only applicable when not using
1598 PLL_CONFIGFLAG_FORCENOFRACT flag */
1599 ss_progmoddp_t ss_mr; /*!< SS Programmable frequency modulation depth, only applicable when not using
1600 PLL_CONFIGFLAG_FORCENOFRACT flag */
1601 ss_modwvctrl_t
1602 ss_mc; /*!< SS Modulation waveform control, only applicable when not using PLL_CONFIGFLAG_FORCENOFRACT flag
1603 */
1604 bool mfDither; /*!< false for fixed modulation frequency or true for dithering, only applicable when not using
1605 PLL_CONFIGFLAG_FORCENOFRACT flag */
1606
1607 } pll_config_t;
1608
1609 /*! @brief PLL0 setup structure
1610 * This structure can be used to pre-build a PLL setup configuration
1611 * at run-time and quickly set the PLL to the configuration. It can be
1612 * populated with the PLL setup function. If powering up or waiting
1613 * for PLL lock, the PLL input clock source should be configured prior
1614 * to PLL setup.
1615 */
1616 typedef struct _pll_setup
1617 {
1618 uint32_t pllctrl; /*!< PLL Control register APLLCTRL */
1619 uint32_t pllndiv; /*!< PLL N Divider register APLLNDIV */
1620 uint32_t pllpdiv; /*!< PLL P Divider register APLLPDIV */
1621 uint32_t pllmdiv; /*!< PLL M Divider register APLLMDIV */
1622 uint32_t pllsscg[2]; /*!< PLL Spread Spectrum Control registers APLLSSCG*/
1623 uint32_t pllRate; /*!< Acutal PLL rate */
1624 } pll_setup_t;
1625
1626 /*! @brief PLL status definitions
1627 */
1628 typedef enum _pll_error
1629 {
1630 kStatus_PLL_Success = MAKE_STATUS(kStatusGroup_Generic, 0), /*!< PLL operation was successful */
1631 kStatus_PLL_OutputTooLow = MAKE_STATUS(kStatusGroup_Generic, 1), /*!< PLL output rate request was too low */
1632 kStatus_PLL_OutputTooHigh = MAKE_STATUS(kStatusGroup_Generic, 2), /*!< PLL output rate request was too high */
1633 kStatus_PLL_OutputError = MAKE_STATUS(kStatusGroup_Generic, 3), /*!< PLL output rate error */
1634 kStatus_PLL_InputTooLow = MAKE_STATUS(kStatusGroup_Generic, 4), /*!< PLL input rate is too low */
1635 kStatus_PLL_InputTooHigh = MAKE_STATUS(kStatusGroup_Generic, 5), /*!< PLL input rate is too high */
1636 kStatus_PLL_OutsideIntLimit = MAKE_STATUS(kStatusGroup_Generic, 6), /*!< Requested output rate isn't possible */
1637 kStatus_PLL_CCOTooLow = MAKE_STATUS(kStatusGroup_Generic, 7), /*!< Requested CCO rate isn't possible */
1638 kStatus_PLL_CCOTooHigh = MAKE_STATUS(kStatusGroup_Generic, 8) /*!< Requested CCO rate isn't possible */
1639 } pll_error_t;
1640
1641 /*! @brief Return PLL0 output clock rate from setup structure
1642 * @param pSetup : Pointer to a PLL setup structure
1643 * @return System PLL output clock rate the setup structure will generate
1644 */
1645 uint32_t CLOCK_GetPLLOutFromSetup(pll_setup_t *pSetup);
1646
1647 /*! @brief Set PLL output based on the passed PLL setup data
1648 * @param pControl : Pointer to populated PLL control structure to generate setup with
1649 * @param pSetup : Pointer to PLL setup structure to be filled
1650 * @return PLL_ERROR_SUCCESS on success, or PLL setup error code
1651 * @note Actual frequency for setup may vary from the desired frequency based on the
1652 * accuracy of input clocks, rounding, non-fractional PLL mode, etc.
1653 */
1654 pll_error_t CLOCK_SetupPLLData(pll_config_t *pControl, pll_setup_t *pSetup);
1655
1656 /**
1657 * @brief Set PLL output from PLL setup structure (precise frequency)
1658 * @param pSetup : Pointer to populated PLL setup structure
1659 * @return kStatus_PLL_Success on success, or PLL setup error code
1660 * @note This function will power off the PLL, setup the PLL with the
1661 * new setup data, and then optionally powerup the PLL, wait for PLL lock,
1662 * and adjust system voltages to the new PLL rate. The function will not
1663 * alter any source clocks (ie, main systen clock) that may use the PLL,
1664 * so these should be setup prior to and after exiting the function.
1665 */
1666 pll_error_t CLOCK_SetPLL0Freq(const pll_setup_t *pSetup);
1667
1668 /**
1669 * @brief Set PLL output from PLL setup structure (precise frequency)
1670 * @param pSetup : Pointer to populated PLL setup structure
1671 * @return kStatus_PLL_Success on success, or PLL setup error code
1672 * @note This function will power off the PLL, setup the PLL with the
1673 * new setup data, and then optionally powerup the PLL, wait for PLL lock,
1674 * and adjust system voltages to the new PLL rate. The function will not
1675 * alter any source clocks (ie, main systen clock) that may use the PLL,
1676 * so these should be setup prior to and after exiting the function.
1677 */
1678 pll_error_t CLOCK_SetPLL1Freq(const pll_setup_t *pSetup);
1679
1680 /*! @brief Enable the OSTIMER 32k clock.
1681 * @return Nothing
1682 */
1683 void CLOCK_EnableOstimer32kClock(void);
1684
1685 /*! brief Enable USB HS PHY PLL clock.
1686 *
1687 * This function enables the internal 480MHz USB PHY PLL clock.
1688 *
1689 * param src USB HS PHY PLL clock source.
1690 * param freq The frequency specified by src.
1691 * retval true The clock is set successfully.
1692 * retval false The clock source is invalid to get proper USB HS clock.
1693 */
1694 bool CLOCK_EnableUsbhsPhyPllClock(clock_usb_phy_src_t src, uint32_t freq);
1695
1696 /*! brief Disable USB HS PHY PLL clock.
1697 *
1698 * This function disables USB HS PHY PLL clock.
1699 */
1700 void CLOCK_DisableUsbhsPhyPllClock(void);
1701
1702 /*! brief Enable USB HS clock.
1703 * retval true The clock is set successfully.
1704 * retval false The clock source is invalid to get proper USB HS clock.
1705 */
1706 bool CLOCK_EnableUsbhsClock(void);
1707
1708 /**
1709 * @brief FIRC Auto Trim With SOF.
1710 * @return returns success or fail status.
1711 */
1712 status_t CLOCK_FIRCAutoTrimWithSOF(void);
1713
1714 #if defined(__cplusplus)
1715 }
1716 #endif /* __cplusplus */
1717
1718 /*! @} */
1719
1720 #endif /* _FSL_CLOCK_H_ */
1721