33#if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL))
34#define FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL 0
44#define FSL_CLOCK_DRIVER_VERSION (MAKE_VERSION(2, 4, 0))
47#ifndef SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY
48#define SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY (600000000UL)
52#define CCM_ANALOG_PLL_BYPASS_SHIFT (16U)
53#define CCM_ANALOG_PLL_BYPASS_CLK_SRC_MASK (0xC000U)
54#define CCM_ANALOG_PLL_BYPASS_CLK_SRC_SHIFT (14U)
61#define CCSR_OFFSET 0x0C
62#define CBCDR_OFFSET 0x14
63#define CBCMR_OFFSET 0x18
64#define CSCMR1_OFFSET 0x1C
65#define CSCMR2_OFFSET 0x20
66#define CSCDR1_OFFSET 0x24
67#define CDCDR_OFFSET 0x30
68#define CSCDR2_OFFSET 0x38
69#define CSCDR3_OFFSET 0x3C
70#define CACRR_OFFSET 0x10
71#define CS1CDR_OFFSET 0x28
72#define CS2CDR_OFFSET 0x2C
77#define PLL_ARM_OFFSET 0x00
78#define PLL_SYS_OFFSET 0x30
79#define PLL_USB1_OFFSET 0x10
80#define PLL_AUDIO_OFFSET 0x70
81#define PLL_VIDEO_OFFSET 0xA0
82#define PLL_ENET_OFFSET 0xE0
83#define PLL_USB2_OFFSET 0x20
85#define CCM_TUPLE(reg, shift, mask, busyShift) \
86 (int)(((reg)&0xFFU) | ((shift) << 8U) | ((((mask) >> (shift)) & 0x1FFFU) << 13U) | ((busyShift) << 26U))
87#define CCM_TUPLE_REG(base, tuple) (*((volatile uint32_t *)(((uint32_t)(base)) + ((uint32_t)(tuple)&0xFFU))))
88#define CCM_TUPLE_SHIFT(tuple) ((((uint32_t)tuple) >> 8U) & 0x1FU)
89#define CCM_TUPLE_MASK(tuple) \
90 ((uint32_t)((((uint32_t)(tuple) >> 13U) & 0x1FFFU) << (((((uint32_t)tuple) >> 8U) & 0x1FU))))
91#define CCM_TUPLE_BUSY_SHIFT(tuple) ((((uint32_t)tuple) >> 26U) & 0x3FU)
93#define CCM_NO_BUSY_WAIT (0x20U)
98#define CCM_ANALOG_TUPLE(reg, shift) ((((reg)&0xFFFU) << 16U) | (shift))
99#define CCM_ANALOG_TUPLE_SHIFT(tuple) (((uint32_t)tuple) & 0x1FU)
100#define CCM_ANALOG_TUPLE_REG_OFF(base, tuple, off) \
101 (*((volatile uint32_t *)((uint32_t)(base) + (((uint32_t)(tuple) >> 16U) & 0xFFFU) + (off))))
102#define CCM_ANALOG_TUPLE_REG(base, tuple) CCM_ANALOG_TUPLE_REG_OFF(base, tuple, 0U)
105#if (defined(FSL_FEATURE_CCM_HAS_ERRATA_50235) && FSL_FEATURE_CCM_HAS_ERRATA_50235)
106#define CAN_CLOCK_CHECK_NO_AFFECTS \
107 ((CCM_CSCMR2_CAN_CLK_SEL(2U) != (CCM->CSCMR2 & CCM_CSCMR2_CAN_CLK_SEL_MASK)) || \
108 (CCM_CCGR5_CG12(0) != (CCM->CCGR5 & CCM_CCGR5_CG12_MASK)))
126extern volatile uint32_t g_xtalFreq;
133extern volatile uint32_t g_rtcXtalFreq;
136#define CLOCK_SetXtal0Freq CLOCK_SetXtalFreq
137#define CLOCK_SetXtal32Freq CLOCK_SetRtcXtalFreq
142 kCLOCK_IpInvalid, kCLOCK_Adc1, kCLOCK_Adc2 \
148 kCLOCK_IpInvalid, kCLOCK_Aoi1, kCLOCK_Aoi2 \
160 kCLOCK_IpInvalid, kCLOCK_Acmp1, kCLOCK_Acmp2, kCLOCK_Acmp3, kCLOCK_Acmp4 \
182#define DMAMUX_CLOCKS \
196 kCLOCK_IpInvalid, kCLOCK_Enc1, kCLOCK_Enc2, kCLOCK_Enc3, kCLOCK_Enc4 \
202 kCLOCK_Enet, kCLOCK_IpInvalid, kCLOCK_Enet2 \
212#define FLEXCAN_CLOCKS \
214 kCLOCK_IpInvalid, kCLOCK_Can1, kCLOCK_Can2, kCLOCK_Can3 \
218#define FLEXCAN_PERIPH_CLOCKS \
220 kCLOCK_IpInvalid, kCLOCK_Can1S, kCLOCK_Can2S, kCLOCK_Can3S \
224#define FLEXIO_CLOCKS \
226 kCLOCK_IpInvalid, kCLOCK_Flexio1, kCLOCK_Flexio2, kCLOCK_Flexio3 \
230#define FLEXRAM_CLOCKS \
236#define FLEXSPI_CLOCKS \
238 kCLOCK_FlexSpi, kCLOCK_IpInvalid, kCLOCK_FlexSpi2 \
242#define FLEXSPI_EXSC_CLOCKS \
250 kCLOCK_IpInvalid, kCLOCK_Gpio1, kCLOCK_Gpio2, kCLOCK_Gpio3, kCLOCK_Gpio4, kCLOCK_Gpio5 \
256 kCLOCK_IpInvalid, kCLOCK_Gpt1, kCLOCK_Gpt2 \
266#define LCDIF_CLOCKS \
272#define LCDIF_PERIPH_CLOCKS \
278#define LPI2C_CLOCKS \
280 kCLOCK_IpInvalid, kCLOCK_Lpi2c1, kCLOCK_Lpi2c2, kCLOCK_Lpi2c3, kCLOCK_Lpi2c4 \
284#define LPSPI_CLOCKS \
286 kCLOCK_IpInvalid, kCLOCK_Lpspi1, kCLOCK_Lpspi2, kCLOCK_Lpspi3, kCLOCK_Lpspi4 \
290#define LPUART_CLOCKS \
292 kCLOCK_IpInvalid, kCLOCK_Lpuart1, kCLOCK_Lpuart2, kCLOCK_Lpuart3, kCLOCK_Lpuart4, kCLOCK_Lpuart5, \
293 kCLOCK_Lpuart6, kCLOCK_Lpuart7, kCLOCK_Lpuart8 \
303#define OCRAM_EXSC_CLOCKS \
317 {kCLOCK_IpInvalid, kCLOCK_IpInvalid, kCLOCK_IpInvalid, kCLOCK_IpInvalid}, \
318 {kCLOCK_Pwm1, kCLOCK_Pwm1, kCLOCK_Pwm1, kCLOCK_Pwm1}, \
319 {kCLOCK_Pwm2, kCLOCK_Pwm2, kCLOCK_Pwm2, kCLOCK_Pwm2}, \
320 {kCLOCK_Pwm3, kCLOCK_Pwm3, kCLOCK_Pwm3, kCLOCK_Pwm3}, \
322 kCLOCK_Pwm4, kCLOCK_Pwm4, kCLOCK_Pwm4, kCLOCK_Pwm4 \
333#define RTWDOG_CLOCKS \
341 kCLOCK_IpInvalid, kCLOCK_Sai1, kCLOCK_Sai2, kCLOCK_Sai3 \
351#define SEMC_EXSC_CLOCKS \
359 kCLOCK_IpInvalid, kCLOCK_Timer1, kCLOCK_Timer2, kCLOCK_Timer3, kCLOCK_Timer4 \
377 kCLOCK_IpInvalid, kCLOCK_Wdog1, kCLOCK_Wdog2 \
381#define USDHC_CLOCKS \
383 kCLOCK_IpInvalid, kCLOCK_Usdhc1, kCLOCK_Usdhc2 \
387#define SPDIF_CLOCKS \
393#define XBARA_CLOCKS \
399#define XBARB_CLOCKS \
401 kCLOCK_IpInvalid, kCLOCK_IpInvalid, kCLOCK_Xbar2, kCLOCK_Xbar3 \
404#define CLOCK_SOURCE_NONE (0xFFU)
406#define CLOCK_ROOT_SOUCE \
408 {kCLOCK_SysPllPfd2Clk, kCLOCK_SysPllPfd0Clk, kCLOCK_NoneName, \
409 kCLOCK_NoneName, kCLOCK_NoneName, kCLOCK_NoneName}, \
410 {kCLOCK_SysPllPfd2Clk, kCLOCK_SysPllPfd0Clk, kCLOCK_NoneName, \
411 kCLOCK_NoneName, kCLOCK_NoneName, kCLOCK_NoneName}, \
412 {kCLOCK_SemcClk, kCLOCK_Usb1SwClk, kCLOCK_SysPllPfd2Clk, \
413 kCLOCK_Usb1PllPfd0Clk, kCLOCK_NoneName, kCLOCK_NoneName}, \
414 {kCLOCK_SysPllPfd2Clk, kCLOCK_Usb1PllPfd0Clk, kCLOCK_Usb1PllPfd1Clk, \
415 kCLOCK_SysPllClk, kCLOCK_NoneName, kCLOCK_NoneName}, \
416 {kCLOCK_OscClk, kCLOCK_SysPllPfd2Clk, kCLOCK_Usb1Sw120MClk, \
417 kCLOCK_Usb1PllPfd1Clk, kCLOCK_NoneName, kCLOCK_NoneName}, \
418 {kCLOCK_Usb1PllPfd1Clk, kCLOCK_Usb1PllPfd0Clk, kCLOCK_SysPllClk, \
419 kCLOCK_SysPllPfd2Clk, kCLOCK_NoneName, kCLOCK_NoneName}, \
420 {kCLOCK_SysPllClk, kCLOCK_SysPllPfd2Clk, kCLOCK_SysPllPfd0Clk, \
421 kCLOCK_SysPllPfd1Clk, kCLOCK_NoneName, kCLOCK_NoneName}, \
422 {kCLOCK_Usb1PllPfd2Clk, kCLOCK_VideoPllClk, kCLOCK_AudioPllClk, \
423 kCLOCK_NoneName, kCLOCK_NoneName, kCLOCK_NoneName}, \
424 {kCLOCK_Usb1PllPfd2Clk, kCLOCK_VideoPllClk, kCLOCK_AudioPllClk, \
425 kCLOCK_NoneName, kCLOCK_NoneName, kCLOCK_NoneName}, \
426 {kCLOCK_Usb1PllPfd2Clk, kCLOCK_VideoPllClk, kCLOCK_AudioPllClk, \
427 kCLOCK_NoneName, kCLOCK_NoneName, kCLOCK_NoneName}, \
428 {kCLOCK_Usb1Sw60MClk, kCLOCK_OscClk, kCLOCK_NoneName, \
429 kCLOCK_NoneName, kCLOCK_NoneName, kCLOCK_NoneName}, \
430 {kCLOCK_Usb1Sw60MClk, kCLOCK_OscClk, kCLOCK_Usb1Sw80MClk, \
431 kCLOCK_NoneName, kCLOCK_NoneName, kCLOCK_NoneName}, \
432 {kCLOCK_Usb1Sw80MClk, kCLOCK_OscClk, kCLOCK_NoneName, \
433 kCLOCK_NoneName, kCLOCK_NoneName, kCLOCK_NoneName}, \
434 {kCLOCK_SysPllClk, kCLOCK_Usb1PllPfd3Clk, kCLOCK_VideoPllClk, \
435 kCLOCK_SysPllPfd0Clk, kCLOCK_SysPllPfd1Clk, kCLOCK_Usb1PllPfd1Clk}, \
436 {kCLOCK_AudioPllClk, kCLOCK_Usb1PllPfd2Clk, kCLOCK_VideoPllClk, \
437 kCLOCK_Usb1SwClk, kCLOCK_NoneName, kCLOCK_NoneName}, \
438 {kCLOCK_AudioPllClk, kCLOCK_Usb1PllPfd2Clk, kCLOCK_VideoPllClk, \
439 kCLOCK_Usb1SwClk, kCLOCK_NoneName, kCLOCK_NoneName}, \
440 {kCLOCK_AudioPllClk, kCLOCK_Usb1PllPfd2Clk, kCLOCK_VideoPllClk, \
441 kCLOCK_Usb1PllClk, kCLOCK_NoneName, kCLOCK_NoneName}, \
444#define CLOCK_ROOT_MUX_TUPLE \
446 kCLOCK_Usdhc1Mux, kCLOCK_Usdhc2Mux, kCLOCK_FlexspiMux, kCLOCK_Flexspi2Mux, kCLOCK_CsiMux, kCLOCK_LpspiMux, \
447 kCLOCK_TraceMux, kCLOCK_Sai1Mux, kCLOCK_Sai2Mux, kCLOCK_Sai3Mux, kCLOCK_Lpi2cMux, kCLOCK_CanMux, \
448 kCLOCK_UartMux, kCLOCK_LcdifPreMux, kCLOCK_SpdifMux, kCLOCK_Flexio1Mux, kCLOCK_Flexio2Mux, \
451#define CLOCK_ROOT_NONE_PRE_DIV 0UL
453#define CLOCK_ROOT_DIV_TUPLE \
455 {kCLOCK_NonePreDiv, kCLOCK_Usdhc1Div}, {kCLOCK_NonePreDiv, kCLOCK_Usdhc2Div}, \
456 {kCLOCK_NonePreDiv, kCLOCK_FlexspiDiv}, {kCLOCK_NonePreDiv, kCLOCK_Flexspi2Div}, \
457 {kCLOCK_NonePreDiv, kCLOCK_CsiDiv}, {kCLOCK_NonePreDiv, kCLOCK_LpspiDiv}, \
458 {kCLOCK_NonePreDiv, kCLOCK_TraceDiv}, {kCLOCK_Sai1PreDiv, kCLOCK_Sai1Div}, \
459 {kCLOCK_Sai2PreDiv, kCLOCK_Sai2Div}, {kCLOCK_Sai3PreDiv, kCLOCK_Sai3Div}, \
460 {kCLOCK_NonePreDiv, kCLOCK_Lpi2cDiv}, {kCLOCK_NonePreDiv, kCLOCK_CanDiv}, \
461 {kCLOCK_NonePreDiv, kCLOCK_UartDiv}, {kCLOCK_LcdifPreDiv, kCLOCK_LcdifDiv}, \
462 {kCLOCK_Spdif0PreDiv, kCLOCK_Spdif0Div}, {kCLOCK_Flexio1PreDiv, kCLOCK_Flexio1Div}, \
463 {kCLOCK_Flexio2PreDiv, kCLOCK_Flexio2Div}, \
467typedef enum _clock_name
469 kCLOCK_CpuClk = 0x0U,
470 kCLOCK_AhbClk = 0x1U,
471 kCLOCK_SemcClk = 0x2U,
472 kCLOCK_IpgClk = 0x3U,
473 kCLOCK_PerClk = 0x4U,
475 kCLOCK_OscClk = 0x5U,
476 kCLOCK_RtcClk = 0x6U,
478 kCLOCK_ArmPllClk = 0x7U,
480 kCLOCK_Usb1PllClk = 0x8U,
481 kCLOCK_Usb1PllPfd0Clk = 0x9U,
482 kCLOCK_Usb1PllPfd1Clk = 0xAU,
483 kCLOCK_Usb1PllPfd2Clk = 0xBU,
484 kCLOCK_Usb1PllPfd3Clk = 0xCU,
485 kCLOCK_Usb1SwClk = 0x18U,
486 kCLOCK_Usb1Sw120MClk = 0x19U,
487 kCLOCK_Usb1Sw60MClk = 0x1AU,
488 kCLOCK_Usb1Sw80MClk = 0x1BU,
490 kCLOCK_Usb2PllClk = 0xDU,
492 kCLOCK_SysPllClk = 0xEU,
493 kCLOCK_SysPllPfd0Clk = 0xFU,
494 kCLOCK_SysPllPfd1Clk = 0x10U,
495 kCLOCK_SysPllPfd2Clk = 0x11U,
496 kCLOCK_SysPllPfd3Clk = 0x12U,
498 kCLOCK_EnetPll0Clk = 0x13U,
499 kCLOCK_EnetPll1Clk = 0x14U,
500 kCLOCK_EnetPll2Clk = 0x15U,
502 kCLOCK_AudioPllClk = 0x16U,
503 kCLOCK_VideoPllClk = 0x17U,
505 kCLOCK_NoneName = CLOCK_SOURCE_NONE,
508#define kCLOCK_CoreSysClk kCLOCK_CpuClk
509#define CLOCK_GetCoreSysClkFreq CLOCK_GetCpuClkFreq
514typedef enum _clock_ip_name
516 kCLOCK_IpInvalid = -1,
519 kCLOCK_Aips_tz1 = (0U << 8U) | CCM_CCGR0_CG0_SHIFT,
520 kCLOCK_Aips_tz2 = (0U << 8U) | CCM_CCGR0_CG1_SHIFT,
521 kCLOCK_Mqs = (0U << 8U) | CCM_CCGR0_CG2_SHIFT,
522 kCLOCK_FlexSpiExsc = (0U << 8U) | CCM_CCGR0_CG3_SHIFT,
523 kCLOCK_Sim_M_Main = (0U << 8U) | CCM_CCGR0_CG4_SHIFT,
524 kCLOCK_Dcp = (0U << 8U) | CCM_CCGR0_CG5_SHIFT,
525 kCLOCK_Lpuart3 = (0U << 8U) | CCM_CCGR0_CG6_SHIFT,
526 kCLOCK_Can1 = (0U << 8U) | CCM_CCGR0_CG7_SHIFT,
527 kCLOCK_Can1S = (0U << 8U) | CCM_CCGR0_CG8_SHIFT,
528 kCLOCK_Can2 = (0U << 8U) | CCM_CCGR0_CG9_SHIFT,
529 kCLOCK_Can2S = (0U << 8U) | CCM_CCGR0_CG10_SHIFT,
530 kCLOCK_Trace = (0U << 8U) | CCM_CCGR0_CG11_SHIFT,
531 kCLOCK_Gpt2 = (0U << 8U) | CCM_CCGR0_CG12_SHIFT,
532 kCLOCK_Gpt2S = (0U << 8U) | CCM_CCGR0_CG13_SHIFT,
533 kCLOCK_Lpuart2 = (0U << 8U) | CCM_CCGR0_CG14_SHIFT,
534 kCLOCK_Gpio2 = (0U << 8U) | CCM_CCGR0_CG15_SHIFT,
537 kCLOCK_Lpspi1 = (1U << 8U) | CCM_CCGR1_CG0_SHIFT,
538 kCLOCK_Lpspi2 = (1U << 8U) | CCM_CCGR1_CG1_SHIFT,
539 kCLOCK_Lpspi3 = (1U << 8U) | CCM_CCGR1_CG2_SHIFT,
540 kCLOCK_Lpspi4 = (1U << 8U) | CCM_CCGR1_CG3_SHIFT,
541 kCLOCK_Adc2 = (1U << 8U) | CCM_CCGR1_CG4_SHIFT,
542 kCLOCK_Enet = (1U << 8U) | CCM_CCGR1_CG5_SHIFT,
543 kCLOCK_Pit = (1U << 8U) | CCM_CCGR1_CG6_SHIFT,
544 kCLOCK_Aoi2 = (1U << 8U) | CCM_CCGR1_CG7_SHIFT,
545 kCLOCK_Adc1 = (1U << 8U) | CCM_CCGR1_CG8_SHIFT,
546 kCLOCK_SemcExsc = (1U << 8U) | CCM_CCGR1_CG9_SHIFT,
547 kCLOCK_Gpt1 = (1U << 8U) | CCM_CCGR1_CG10_SHIFT,
548 kCLOCK_Gpt1S = (1U << 8U) | CCM_CCGR1_CG11_SHIFT,
549 kCLOCK_Lpuart4 = (1U << 8U) | CCM_CCGR1_CG12_SHIFT,
550 kCLOCK_Gpio1 = (1U << 8U) | CCM_CCGR1_CG13_SHIFT,
551 kCLOCK_Csu = (1U << 8U) | CCM_CCGR1_CG14_SHIFT,
552 kCLOCK_Gpio5 = (1U << 8U) | CCM_CCGR1_CG15_SHIFT,
555 kCLOCK_OcramExsc = (2U << 8U) | CCM_CCGR2_CG0_SHIFT,
556 kCLOCK_Csi = (2U << 8U) | CCM_CCGR2_CG1_SHIFT,
557 kCLOCK_IomuxcSnvs = (2U << 8U) | CCM_CCGR2_CG2_SHIFT,
558 kCLOCK_Lpi2c1 = (2U << 8U) | CCM_CCGR2_CG3_SHIFT,
559 kCLOCK_Lpi2c2 = (2U << 8U) | CCM_CCGR2_CG4_SHIFT,
560 kCLOCK_Lpi2c3 = (2U << 8U) | CCM_CCGR2_CG5_SHIFT,
561 kCLOCK_Ocotp = (2U << 8U) | CCM_CCGR2_CG6_SHIFT,
562 kCLOCK_Xbar3 = (2U << 8U) | CCM_CCGR2_CG7_SHIFT,
563 kCLOCK_Ipmux1 = (2U << 8U) | CCM_CCGR2_CG8_SHIFT,
564 kCLOCK_Ipmux2 = (2U << 8U) | CCM_CCGR2_CG9_SHIFT,
565 kCLOCK_Ipmux3 = (2U << 8U) | CCM_CCGR2_CG10_SHIFT,
566 kCLOCK_Xbar1 = (2U << 8U) | CCM_CCGR2_CG11_SHIFT,
567 kCLOCK_Xbar2 = (2U << 8U) | CCM_CCGR2_CG12_SHIFT,
568 kCLOCK_Gpio3 = (2U << 8U) | CCM_CCGR2_CG13_SHIFT,
569 kCLOCK_Lcd = (2U << 8U) | CCM_CCGR2_CG14_SHIFT,
570 kCLOCK_Pxp = (2U << 8U) | CCM_CCGR2_CG15_SHIFT,
573 kCLOCK_Flexio2 = (3U << 8U) | CCM_CCGR3_CG0_SHIFT,
574 kCLOCK_Lpuart5 = (3U << 8U) | CCM_CCGR3_CG1_SHIFT,
575 kCLOCK_Semc = (3U << 8U) | CCM_CCGR3_CG2_SHIFT,
576 kCLOCK_Lpuart6 = (3U << 8U) | CCM_CCGR3_CG3_SHIFT,
577 kCLOCK_Aoi1 = (3U << 8U) | CCM_CCGR3_CG4_SHIFT,
578 kCLOCK_LcdPixel = (3U << 8U) | CCM_CCGR3_CG5_SHIFT,
579 kCLOCK_Gpio4 = (3U << 8U) | CCM_CCGR3_CG6_SHIFT,
580 kCLOCK_Ewm0 = (3U << 8U) | CCM_CCGR3_CG7_SHIFT,
581 kCLOCK_Wdog1 = (3U << 8U) | CCM_CCGR3_CG8_SHIFT,
582 kCLOCK_FlexRam = (3U << 8U) | CCM_CCGR3_CG9_SHIFT,
583 kCLOCK_Acmp1 = (3U << 8U) | CCM_CCGR3_CG10_SHIFT,
584 kCLOCK_Acmp2 = (3U << 8U) | CCM_CCGR3_CG11_SHIFT,
585 kCLOCK_Acmp3 = (3U << 8U) | CCM_CCGR3_CG12_SHIFT,
586 kCLOCK_Acmp4 = (3U << 8U) | CCM_CCGR3_CG13_SHIFT,
587 kCLOCK_Ocram = (3U << 8U) | CCM_CCGR3_CG14_SHIFT,
588 kCLOCK_IomuxcSnvsGpr = (3U << 8U) | CCM_CCGR3_CG15_SHIFT,
591 kCLOCK_Iomuxc = (4U << 8U) | CCM_CCGR4_CG1_SHIFT,
592 kCLOCK_IomuxcGpr = (4U << 8U) | CCM_CCGR4_CG2_SHIFT,
593 kCLOCK_Bee = (4U << 8U) | CCM_CCGR4_CG3_SHIFT,
594 kCLOCK_SimM7 = (4U << 8U) | CCM_CCGR4_CG4_SHIFT,
595 kCLOCK_Tsc = (4U << 8U) | CCM_CCGR4_CG5_SHIFT,
596 kCLOCK_SimM = (4U << 8U) | CCM_CCGR4_CG6_SHIFT,
597 kCLOCK_SimEms = (4U << 8U) | CCM_CCGR4_CG7_SHIFT,
598 kCLOCK_Pwm1 = (4U << 8U) | CCM_CCGR4_CG8_SHIFT,
599 kCLOCK_Pwm2 = (4U << 8U) | CCM_CCGR4_CG9_SHIFT,
600 kCLOCK_Pwm3 = (4U << 8U) | CCM_CCGR4_CG10_SHIFT,
601 kCLOCK_Pwm4 = (4U << 8U) | CCM_CCGR4_CG11_SHIFT,
602 kCLOCK_Enc1 = (4U << 8U) | CCM_CCGR4_CG12_SHIFT,
603 kCLOCK_Enc2 = (4U << 8U) | CCM_CCGR4_CG13_SHIFT,
604 kCLOCK_Enc3 = (4U << 8U) | CCM_CCGR4_CG14_SHIFT,
605 kCLOCK_Enc4 = (4U << 8U) | CCM_CCGR4_CG15_SHIFT,
608 kCLOCK_Rom = (5U << 8U) | CCM_CCGR5_CG0_SHIFT,
609 kCLOCK_Flexio1 = (5U << 8U) | CCM_CCGR5_CG1_SHIFT,
610 kCLOCK_Wdog3 = (5U << 8U) | CCM_CCGR5_CG2_SHIFT,
611 kCLOCK_Dma = (5U << 8U) | CCM_CCGR5_CG3_SHIFT,
612 kCLOCK_Kpp = (5U << 8U) | CCM_CCGR5_CG4_SHIFT,
613 kCLOCK_Wdog2 = (5U << 8U) | CCM_CCGR5_CG5_SHIFT,
614 kCLOCK_Aips_tz4 = (5U << 8U) | CCM_CCGR5_CG6_SHIFT,
615 kCLOCK_Spdif = (5U << 8U) | CCM_CCGR5_CG7_SHIFT,
616 kCLOCK_SimMain = (5U << 8U) | CCM_CCGR5_CG8_SHIFT,
617 kCLOCK_Sai1 = (5U << 8U) | CCM_CCGR5_CG9_SHIFT,
618 kCLOCK_Sai2 = (5U << 8U) | CCM_CCGR5_CG10_SHIFT,
619 kCLOCK_Sai3 = (5U << 8U) | CCM_CCGR5_CG11_SHIFT,
620 kCLOCK_Lpuart1 = (5U << 8U) | CCM_CCGR5_CG12_SHIFT,
621 kCLOCK_Lpuart7 = (5U << 8U) | CCM_CCGR5_CG13_SHIFT,
622 kCLOCK_SnvsHp = (5U << 8U) | CCM_CCGR5_CG14_SHIFT,
623 kCLOCK_SnvsLp = (5U << 8U) | CCM_CCGR5_CG15_SHIFT,
626 kCLOCK_UsbOh3 = (6U << 8U) | CCM_CCGR6_CG0_SHIFT,
627 kCLOCK_Usdhc1 = (6U << 8U) | CCM_CCGR6_CG1_SHIFT,
628 kCLOCK_Usdhc2 = (6U << 8U) | CCM_CCGR6_CG2_SHIFT,
629 kCLOCK_Dcdc = (6U << 8U) | CCM_CCGR6_CG3_SHIFT,
630 kCLOCK_Ipmux4 = (6U << 8U) | CCM_CCGR6_CG4_SHIFT,
631 kCLOCK_FlexSpi = (6U << 8U) | CCM_CCGR6_CG5_SHIFT,
632 kCLOCK_Trng = (6U << 8U) | CCM_CCGR6_CG6_SHIFT,
633 kCLOCK_Lpuart8 = (6U << 8U) | CCM_CCGR6_CG7_SHIFT,
634 kCLOCK_Timer4 = (6U << 8U) | CCM_CCGR6_CG8_SHIFT,
635 kCLOCK_Aips_tz3 = (6U << 8U) | CCM_CCGR6_CG9_SHIFT,
636 kCLOCK_SimPer = (6U << 8U) | CCM_CCGR6_CG10_SHIFT,
637 kCLOCK_Anadig = (6U << 8U) | CCM_CCGR6_CG11_SHIFT,
638 kCLOCK_Lpi2c4 = (6U << 8U) | CCM_CCGR6_CG12_SHIFT,
639 kCLOCK_Timer1 = (6U << 8U) | CCM_CCGR6_CG13_SHIFT,
640 kCLOCK_Timer2 = (6U << 8U) | CCM_CCGR6_CG14_SHIFT,
641 kCLOCK_Timer3 = (6U << 8U) | CCM_CCGR6_CG15_SHIFT,
644 kCLOCK_Enet2 = (7U << 8U) | CCM_CCGR7_CG0_SHIFT,
645 kCLOCK_FlexSpi2 = (7U << 8U) | CCM_CCGR7_CG1_SHIFT,
646 kCLOCK_Axbs_l = (7U << 8U) | CCM_CCGR7_CG2_SHIFT,
647 kCLOCK_Can3 = (7U << 8U) | CCM_CCGR7_CG3_SHIFT,
648 kCLOCK_Can3S = (7U << 8U) | CCM_CCGR7_CG4_SHIFT,
649 kCLOCK_Aips_lite = (7U << 8U) | CCM_CCGR7_CG5_SHIFT,
650 kCLOCK_Flexio3 = (7U << 8U) | CCM_CCGR7_CG6_SHIFT,
655typedef enum _clock_osc
662typedef enum _clock_gate_value
664 kCLOCK_ClockNotNeeded = 0U,
665 kCLOCK_ClockNeededRun = 1U,
666 kCLOCK_ClockNeededRunWait = 3U,
670typedef enum _clock_mode_t
673 kCLOCK_ModeWait = 1U,
674 kCLOCK_ModeStop = 2U,
685typedef enum _clock_mux
687 kCLOCK_Pll3SwMux = CCM_TUPLE(CCSR_OFFSET,
688 CCM_CCSR_PLL3_SW_CLK_SEL_SHIFT,
689 CCM_CCSR_PLL3_SW_CLK_SEL_MASK,
692 kCLOCK_PeriphMux = CCM_TUPLE(CBCDR_OFFSET,
693 CCM_CBCDR_PERIPH_CLK_SEL_SHIFT,
694 CCM_CBCDR_PERIPH_CLK_SEL_MASK,
695 CCM_CDHIPR_PERIPH_CLK_SEL_BUSY_SHIFT),
696 kCLOCK_SemcAltMux = CCM_TUPLE(CBCDR_OFFSET,
697 CCM_CBCDR_SEMC_ALT_CLK_SEL_SHIFT,
698 CCM_CBCDR_SEMC_ALT_CLK_SEL_MASK,
700 kCLOCK_SemcMux = CCM_TUPLE(CBCDR_OFFSET,
701 CCM_CBCDR_SEMC_CLK_SEL_SHIFT,
702 CCM_CBCDR_SEMC_CLK_SEL_MASK,
705 kCLOCK_PrePeriphMux = CCM_TUPLE(CBCMR_OFFSET,
706 CCM_CBCMR_PRE_PERIPH_CLK_SEL_SHIFT,
707 CCM_CBCMR_PRE_PERIPH_CLK_SEL_MASK,
709 kCLOCK_TraceMux = CCM_TUPLE(CBCMR_OFFSET,
710 CCM_CBCMR_TRACE_CLK_SEL_SHIFT,
711 CCM_CBCMR_TRACE_CLK_SEL_MASK,
713 kCLOCK_PeriphClk2Mux = CCM_TUPLE(CBCMR_OFFSET,
714 CCM_CBCMR_PERIPH_CLK2_SEL_SHIFT,
715 CCM_CBCMR_PERIPH_CLK2_SEL_MASK,
717 kCLOCK_Flexspi2Mux = CCM_TUPLE(CBCMR_OFFSET,
718 CCM_CBCMR_FLEXSPI2_CLK_SEL_SHIFT,
719 CCM_CBCMR_FLEXSPI2_CLK_SEL_MASK,
721 kCLOCK_LpspiMux = CCM_TUPLE(CBCMR_OFFSET,
722 CCM_CBCMR_LPSPI_CLK_SEL_SHIFT,
723 CCM_CBCMR_LPSPI_CLK_SEL_MASK,
726 kCLOCK_FlexspiMux = CCM_TUPLE(CSCMR1_OFFSET,
727 CCM_CSCMR1_FLEXSPI_CLK_SEL_SHIFT,
728 CCM_CSCMR1_FLEXSPI_CLK_SEL_MASK,
730 kCLOCK_Usdhc2Mux = CCM_TUPLE(CSCMR1_OFFSET,
731 CCM_CSCMR1_USDHC2_CLK_SEL_SHIFT,
732 CCM_CSCMR1_USDHC2_CLK_SEL_MASK,
734 kCLOCK_Usdhc1Mux = CCM_TUPLE(CSCMR1_OFFSET,
735 CCM_CSCMR1_USDHC1_CLK_SEL_SHIFT,
736 CCM_CSCMR1_USDHC1_CLK_SEL_MASK,
738 kCLOCK_Sai3Mux = CCM_TUPLE(CSCMR1_OFFSET,
739 CCM_CSCMR1_SAI3_CLK_SEL_SHIFT,
740 CCM_CSCMR1_SAI3_CLK_SEL_MASK,
742 kCLOCK_Sai2Mux = CCM_TUPLE(CSCMR1_OFFSET,
743 CCM_CSCMR1_SAI2_CLK_SEL_SHIFT,
744 CCM_CSCMR1_SAI2_CLK_SEL_MASK,
746 kCLOCK_Sai1Mux = CCM_TUPLE(CSCMR1_OFFSET,
747 CCM_CSCMR1_SAI1_CLK_SEL_SHIFT,
748 CCM_CSCMR1_SAI1_CLK_SEL_MASK,
750 kCLOCK_PerclkMux = CCM_TUPLE(CSCMR1_OFFSET,
751 CCM_CSCMR1_PERCLK_CLK_SEL_SHIFT,
752 CCM_CSCMR1_PERCLK_CLK_SEL_MASK,
755 kCLOCK_Flexio2Mux = CCM_TUPLE(CSCMR2_OFFSET,
756 CCM_CSCMR2_FLEXIO2_CLK_SEL_SHIFT,
757 CCM_CSCMR2_FLEXIO2_CLK_SEL_MASK,
759 kCLOCK_CanMux = CCM_TUPLE(CSCMR2_OFFSET,
760 CCM_CSCMR2_CAN_CLK_SEL_SHIFT,
761 CCM_CSCMR2_CAN_CLK_SEL_MASK,
764 kCLOCK_UartMux = CCM_TUPLE(CSCDR1_OFFSET,
765 CCM_CSCDR1_UART_CLK_SEL_SHIFT,
766 CCM_CSCDR1_UART_CLK_SEL_MASK,
769 kCLOCK_SpdifMux = CCM_TUPLE(CDCDR_OFFSET,
770 CCM_CDCDR_SPDIF0_CLK_SEL_SHIFT,
771 CCM_CDCDR_SPDIF0_CLK_SEL_MASK,
773 kCLOCK_Flexio1Mux = CCM_TUPLE(CDCDR_OFFSET,
774 CCM_CDCDR_FLEXIO1_CLK_SEL_SHIFT,
775 CCM_CDCDR_FLEXIO1_CLK_SEL_MASK,
778 kCLOCK_Lpi2cMux = CCM_TUPLE(CSCDR2_OFFSET,
779 CCM_CSCDR2_LPI2C_CLK_SEL_SHIFT,
780 CCM_CSCDR2_LPI2C_CLK_SEL_MASK,
782 kCLOCK_LcdifPreMux = CCM_TUPLE(CSCDR2_OFFSET,
783 CCM_CSCDR2_LCDIF_PRE_CLK_SEL_SHIFT,
784 CCM_CSCDR2_LCDIF_PRE_CLK_SEL_MASK,
787 kCLOCK_CsiMux = CCM_TUPLE(CSCDR3_OFFSET,
788 CCM_CSCDR3_CSI_CLK_SEL_SHIFT,
789 CCM_CSCDR3_CSI_CLK_SEL_MASK,
801typedef enum _clock_div
803 kCLOCK_ArmDiv = CCM_TUPLE(CACRR_OFFSET,
804 CCM_CACRR_ARM_PODF_SHIFT,
805 CCM_CACRR_ARM_PODF_MASK,
806 CCM_CDHIPR_ARM_PODF_BUSY_SHIFT),
808 kCLOCK_PeriphClk2Div = CCM_TUPLE(CBCDR_OFFSET,
809 CCM_CBCDR_PERIPH_CLK2_PODF_SHIFT,
810 CCM_CBCDR_PERIPH_CLK2_PODF_MASK,
812 kCLOCK_SemcDiv = CCM_TUPLE(CBCDR_OFFSET,
813 CCM_CBCDR_SEMC_PODF_SHIFT,
814 CCM_CBCDR_SEMC_PODF_MASK,
815 CCM_CDHIPR_SEMC_PODF_BUSY_SHIFT),
816 kCLOCK_AhbDiv = CCM_TUPLE(CBCDR_OFFSET,
817 CCM_CBCDR_AHB_PODF_SHIFT,
818 CCM_CBCDR_AHB_PODF_MASK,
819 CCM_CDHIPR_AHB_PODF_BUSY_SHIFT),
820 kCLOCK_IpgDiv = CCM_TUPLE(
821 CBCDR_OFFSET, CCM_CBCDR_IPG_PODF_SHIFT, CCM_CBCDR_IPG_PODF_MASK, CCM_NO_BUSY_WAIT),
823 kCLOCK_Flexspi2Div = CCM_TUPLE(CBCMR_OFFSET,
824 CCM_CBCMR_FLEXSPI2_PODF_SHIFT,
825 CCM_CBCMR_FLEXSPI2_PODF_MASK,
827 kCLOCK_LpspiDiv = CCM_TUPLE(
828 CBCMR_OFFSET, CCM_CBCMR_LPSPI_PODF_SHIFT, CCM_CBCMR_LPSPI_PODF_MASK, CCM_NO_BUSY_WAIT),
829 kCLOCK_LcdifDiv = CCM_TUPLE(
830 CBCMR_OFFSET, CCM_CBCMR_LCDIF_PODF_SHIFT, CCM_CBCMR_LCDIF_PODF_MASK, CCM_NO_BUSY_WAIT),
832 kCLOCK_FlexspiDiv = CCM_TUPLE(CSCMR1_OFFSET,
833 CCM_CSCMR1_FLEXSPI_PODF_SHIFT,
834 CCM_CSCMR1_FLEXSPI_PODF_MASK,
836 kCLOCK_PerclkDiv = CCM_TUPLE(CSCMR1_OFFSET,
837 CCM_CSCMR1_PERCLK_PODF_SHIFT,
838 CCM_CSCMR1_PERCLK_PODF_MASK,
841 kCLOCK_CanDiv = CCM_TUPLE(CSCMR2_OFFSET,
842 CCM_CSCMR2_CAN_CLK_PODF_SHIFT,
843 CCM_CSCMR2_CAN_CLK_PODF_MASK,
846 kCLOCK_TraceDiv = CCM_TUPLE(CSCDR1_OFFSET,
847 CCM_CSCDR1_TRACE_PODF_SHIFT,
848 CCM_CSCDR1_TRACE_PODF_MASK,
850 kCLOCK_Usdhc2Div = CCM_TUPLE(CSCDR1_OFFSET,
851 CCM_CSCDR1_USDHC2_PODF_SHIFT,
852 CCM_CSCDR1_USDHC2_PODF_MASK,
854 kCLOCK_Usdhc1Div = CCM_TUPLE(CSCDR1_OFFSET,
855 CCM_CSCDR1_USDHC1_PODF_SHIFT,
856 CCM_CSCDR1_USDHC1_PODF_MASK,
858 kCLOCK_UartDiv = CCM_TUPLE(CSCDR1_OFFSET,
859 CCM_CSCDR1_UART_CLK_PODF_SHIFT,
860 CCM_CSCDR1_UART_CLK_PODF_MASK,
863 kCLOCK_Flexio2Div = CCM_TUPLE(CS1CDR_OFFSET,
864 CCM_CS1CDR_FLEXIO2_CLK_PODF_SHIFT,
865 CCM_CS1CDR_FLEXIO2_CLK_PODF_MASK,
867 kCLOCK_Sai3PreDiv = CCM_TUPLE(CS1CDR_OFFSET,
868 CCM_CS1CDR_SAI3_CLK_PRED_SHIFT,
869 CCM_CS1CDR_SAI3_CLK_PRED_MASK,
871 kCLOCK_Sai3Div = CCM_TUPLE(CS1CDR_OFFSET,
872 CCM_CS1CDR_SAI3_CLK_PODF_SHIFT,
873 CCM_CS1CDR_SAI3_CLK_PODF_MASK,
875 kCLOCK_Flexio2PreDiv = CCM_TUPLE(CS1CDR_OFFSET,
876 CCM_CS1CDR_FLEXIO2_CLK_PRED_SHIFT,
877 CCM_CS1CDR_FLEXIO2_CLK_PRED_MASK,
879 kCLOCK_Sai1PreDiv = CCM_TUPLE(CS1CDR_OFFSET,
880 CCM_CS1CDR_SAI1_CLK_PRED_SHIFT,
881 CCM_CS1CDR_SAI1_CLK_PRED_MASK,
883 kCLOCK_Sai1Div = CCM_TUPLE(CS1CDR_OFFSET,
884 CCM_CS1CDR_SAI1_CLK_PODF_SHIFT,
885 CCM_CS1CDR_SAI1_CLK_PODF_MASK,
888 kCLOCK_Sai2PreDiv = CCM_TUPLE(CS2CDR_OFFSET,
889 CCM_CS2CDR_SAI2_CLK_PRED_SHIFT,
890 CCM_CS2CDR_SAI2_CLK_PRED_MASK,
892 kCLOCK_Sai2Div = CCM_TUPLE(CS2CDR_OFFSET,
893 CCM_CS2CDR_SAI2_CLK_PODF_SHIFT,
894 CCM_CS2CDR_SAI2_CLK_PODF_MASK,
897 kCLOCK_Spdif0PreDiv = CCM_TUPLE(CDCDR_OFFSET,
898 CCM_CDCDR_SPDIF0_CLK_PRED_SHIFT,
899 CCM_CDCDR_SPDIF0_CLK_PRED_MASK,
901 kCLOCK_Spdif0Div = CCM_TUPLE(CDCDR_OFFSET,
902 CCM_CDCDR_SPDIF0_CLK_PODF_SHIFT,
903 CCM_CDCDR_SPDIF0_CLK_PODF_MASK,
905 kCLOCK_Flexio1PreDiv = CCM_TUPLE(CDCDR_OFFSET,
906 CCM_CDCDR_FLEXIO1_CLK_PRED_SHIFT,
907 CCM_CDCDR_FLEXIO1_CLK_PRED_MASK,
909 kCLOCK_Flexio1Div = CCM_TUPLE(CDCDR_OFFSET,
910 CCM_CDCDR_FLEXIO1_CLK_PODF_SHIFT,
911 CCM_CDCDR_FLEXIO1_CLK_PODF_MASK,
914 kCLOCK_Lpi2cDiv = CCM_TUPLE(CSCDR2_OFFSET,
915 CCM_CSCDR2_LPI2C_CLK_PODF_SHIFT,
916 CCM_CSCDR2_LPI2C_CLK_PODF_MASK,
918 kCLOCK_LcdifPreDiv = CCM_TUPLE(CSCDR2_OFFSET,
919 CCM_CSCDR2_LCDIF_PRED_SHIFT,
920 CCM_CSCDR2_LCDIF_PRED_MASK,
923 kCLOCK_CsiDiv = CCM_TUPLE(
924 CSCDR3_OFFSET, CCM_CSCDR3_CSI_PODF_SHIFT, CCM_CSCDR3_CSI_PODF_MASK, CCM_NO_BUSY_WAIT),
926 kCLOCK_NonePreDiv = CLOCK_ROOT_NONE_PRE_DIV,
930typedef enum _clock_usb_src
933 kCLOCK_UsbSrcUnused = (int)0xFFFFFFFFU,
938typedef enum _clock_usb_phy_src
940 kCLOCK_Usbphy480M = 0,
941} clock_usb_phy_src_t;
944enum _clock_pll_clk_src
946 kCLOCK_PllClkSrc24M = 0U,
947 kCLOCK_PllSrcClkPN = 1U,
951typedef struct _clock_arm_pll_config
953 uint32_t loopDivider;
955} clock_arm_pll_config_t;
958typedef struct _clock_usb_pll_config
965} clock_usb_pll_config_t;
968typedef struct _clock_sys_pll_config
974 uint32_t denominator;
979} clock_sys_pll_config_t;
982typedef struct _clock_audio_pll_config
987 uint32_t denominator;
989} clock_audio_pll_config_t;
992typedef struct _clock_video_pll_config
997 uint32_t denominator;
1000} clock_video_pll_config_t;
1003typedef struct _clock_enet_pll_config
1005 bool enableClkOutput;
1006 bool enableClkOutput25M;
1007 uint8_t loopDivider;
1013 bool enableClkOutput1;
1014 uint8_t loopDivider1;
1019} clock_enet_pll_config_t;
1022typedef enum _clock_pll
1024 kCLOCK_PllArm = CCM_ANALOG_TUPLE(PLL_ARM_OFFSET, CCM_ANALOG_PLL_ARM_ENABLE_SHIFT),
1025 kCLOCK_PllSys = CCM_ANALOG_TUPLE(PLL_SYS_OFFSET, CCM_ANALOG_PLL_SYS_ENABLE_SHIFT),
1026 kCLOCK_PllUsb1 = CCM_ANALOG_TUPLE(PLL_USB1_OFFSET, CCM_ANALOG_PLL_USB1_ENABLE_SHIFT),
1027 kCLOCK_PllAudio = CCM_ANALOG_TUPLE(PLL_AUDIO_OFFSET, CCM_ANALOG_PLL_AUDIO_ENABLE_SHIFT),
1028 kCLOCK_PllVideo = CCM_ANALOG_TUPLE(PLL_VIDEO_OFFSET, CCM_ANALOG_PLL_VIDEO_ENABLE_SHIFT),
1030 kCLOCK_PllEnet = CCM_ANALOG_TUPLE(PLL_ENET_OFFSET, CCM_ANALOG_PLL_ENET_ENABLE_SHIFT),
1031 kCLOCK_PllEnet2 = CCM_ANALOG_TUPLE(PLL_ENET_OFFSET, CCM_ANALOG_PLL_ENET_ENET2_REF_EN_SHIFT),
1032 kCLOCK_PllEnet25M = CCM_ANALOG_TUPLE(PLL_ENET_OFFSET, CCM_ANALOG_PLL_ENET_ENET_25M_REF_EN_SHIFT),
1034 kCLOCK_PllUsb2 = CCM_ANALOG_TUPLE(PLL_USB2_OFFSET, CCM_ANALOG_PLL_USB2_ENABLE_SHIFT),
1039typedef enum _clock_pfd
1050typedef enum _clock_output1_selection
1052 kCLOCK_OutputPllUsb1 = 0U,
1053 kCLOCK_OutputPllSys = 1U,
1054 kCLOCK_OutputPllVideo = 3U,
1055 kCLOCK_OutputSemcClk = 5U,
1056 kCLOCK_OutputLcdifPixClk = 0xAU,
1057 kCLOCK_OutputAhbClk = 0xBU,
1058 kCLOCK_OutputIpgClk = 0xCU,
1059 kCLOCK_OutputPerClk = 0xDU,
1060 kCLOCK_OutputCkilSyncClk = 0xEU,
1061 kCLOCK_OutputPll4MainClk = 0xFU,
1062 kCLOCK_DisableClockOutput1 = 0x10U,
1063} clock_output1_selection_t;
1069typedef enum _clock_output2_selection
1071 kCLOCK_OutputUsdhc1Clk = 3U,
1072 kCLOCK_OutputLpi2cClk = 6U,
1073 kCLOCK_OutputCsiClk = 0xBU,
1074 kCLOCK_OutputOscClk = 0xEU,
1075 kCLOCK_OutputUsdhc2Clk = 0x11U,
1076 kCLOCK_OutputSai1Clk = 0x12U,
1077 kCLOCK_OutputSai2Clk = 0x13U,
1078 kCLOCK_OutputSai3Clk = 0x14U,
1079 kCLOCK_OutputCanClk = 0x17U,
1080 kCLOCK_OutputFlexspiClk = 0x1BU,
1081 kCLOCK_OutputUartClk = 0x1CU,
1082 kCLOCK_OutputSpdif0Clk = 0x1DU,
1083 kCLOCK_DisableClockOutput2 = 0x1FU,
1084} clock_output2_selection_t;
1089typedef enum _clock_output_divider
1091 kCLOCK_DivideBy1 = 0U,
1099} clock_output_divider_t;
1104typedef enum _clock_root
1106 kCLOCK_Usdhc1ClkRoot = 0U,
1107 kCLOCK_Usdhc2ClkRoot,
1108 kCLOCK_FlexspiClkRoot,
1109 kCLOCK_Flexspi2ClkRoot,
1111 kCLOCK_LpspiClkRoot,
1112 kCLOCK_TraceClkRoot,
1116 kCLOCK_Lpi2cClkRoot,
1119 kCLOCK_LcdifClkRoot,
1120 kCLOCK_SpdifClkRoot,
1121 kCLOCK_Flexio1ClkRoot,
1122 kCLOCK_Flexio2ClkRoot,
1129#if defined(__cplusplus)
1139static inline void CLOCK_SetMux(clock_mux_t mux, uint32_t value)
1143 busyShift = (uint32_t)CCM_TUPLE_BUSY_SHIFT(mux);
1144 CCM_TUPLE_REG(CCM, mux) = (CCM_TUPLE_REG(CCM, mux) & (~CCM_TUPLE_MASK(mux))) |
1145 (((uint32_t)((value) << CCM_TUPLE_SHIFT(mux))) & CCM_TUPLE_MASK(mux));
1147 assert(busyShift <= CCM_NO_BUSY_WAIT);
1150 if (CCM_NO_BUSY_WAIT != busyShift)
1153 while ((CCM->CDHIPR & ((1UL << busyShift))) != 0UL)
1165static inline uint32_t CLOCK_GetMux(clock_mux_t mux)
1167 return (((uint32_t)(CCM_TUPLE_REG(CCM, mux) & CCM_TUPLE_MASK(mux))) >> CCM_TUPLE_SHIFT(mux));
1176static inline void CLOCK_SetDiv(clock_div_t divider, uint32_t value)
1180 busyShift = CCM_TUPLE_BUSY_SHIFT(divider);
1181 CCM_TUPLE_REG(CCM, divider) = (CCM_TUPLE_REG(CCM, divider) & (~CCM_TUPLE_MASK(divider))) |
1182 (((uint32_t)((value) << CCM_TUPLE_SHIFT(divider))) & CCM_TUPLE_MASK(divider));
1184 assert(busyShift <= CCM_NO_BUSY_WAIT);
1187 if (CCM_NO_BUSY_WAIT != busyShift)
1190 while ((CCM->CDHIPR & ((uint32_t)(1UL << busyShift))) != 0UL)
1201static inline uint32_t CLOCK_GetDiv(clock_div_t divider)
1203 return ((uint32_t)(CCM_TUPLE_REG(CCM, divider) & CCM_TUPLE_MASK(divider)) >> CCM_TUPLE_SHIFT(divider));
1212static inline void CLOCK_ControlGate(clock_ip_name_t name, clock_gate_value_t value)
1214 uint32_t index = ((uint32_t)name) >> 8U;
1215 uint32_t shift = ((uint32_t)name) & 0x1FU;
1216 volatile uint32_t *reg;
1218 assert(index <= 7UL);
1220 reg = (
volatile uint32_t *)(&(((
volatile uint32_t *)&CCM->CCGR0)[index]));
1221 *reg = ((*reg) & ~((uint32_t)(3UL << shift))) | (((uint32_t)value) << shift);
1229static inline void CLOCK_EnableClock(clock_ip_name_t name)
1231 CLOCK_ControlGate(name, kCLOCK_ClockNeededRunWait);
1239static inline void CLOCK_DisableClock(clock_ip_name_t name)
1241 CLOCK_ControlGate(name, kCLOCK_ClockNotNeeded);
1249static inline void CLOCK_SetMode(clock_mode_t mode)
1251 CCM->CLPCR = (CCM->CLPCR & ~CCM_CLPCR_LPM_MASK) | CCM_CLPCR_LPM((uint32_t)mode);
1264static inline uint32_t CLOCK_GetOscFreq(
void)
1266 return ((XTALOSC24M->LOWPWR_CTRL & XTALOSC24M_LOWPWR_CTRL_OSC_SEL_MASK) != 0UL) ? 24000000UL : g_xtalFreq;
1274uint32_t CLOCK_GetAhbFreq(
void);
1281uint32_t CLOCK_GetSemcFreq(
void);
1288uint32_t CLOCK_GetIpgFreq(
void);
1289uint32_t CLOCK_GetPeriphClkFreq(
void);
1296uint32_t CLOCK_GetPerClkFreq(
void);
1307uint32_t CLOCK_GetFreq(clock_name_t name);
1314static inline uint32_t CLOCK_GetCpuClkFreq(
void)
1316 return CLOCK_GetFreq(kCLOCK_CpuClk);
1325uint32_t CLOCK_GetClockRootFreq(clock_root_t clockRoot);
1346void CLOCK_InitExternalClk(
bool bypassXtalOsc);
1356void CLOCK_DeinitExternalClk(
void);
1365void CLOCK_SwitchOsc(clock_osc_t osc);
1372static inline uint32_t CLOCK_GetRtcFreq(
void)
1382static inline void CLOCK_SetXtalFreq(uint32_t freq)
1392static inline void CLOCK_SetRtcXtalFreq(uint32_t freq)
1394 g_rtcXtalFreq = freq;
1400void CLOCK_InitRcOsc24M(
void);
1405void CLOCK_DeinitRcOsc24M(
void);
1419bool CLOCK_EnableUsbhs0Clock(clock_usb_src_t src, uint32_t freq);
1432bool CLOCK_EnableUsbhs1Clock(clock_usb_src_t src, uint32_t freq);
1449static inline void CLOCK_SetPllBypass(CCM_ANALOG_Type *base, clock_pll_t pll,
bool bypass)
1453 CCM_ANALOG_TUPLE_REG_OFF(base, pll, 4U) = 1UL << CCM_ANALOG_PLL_BYPASS_SHIFT;
1457 CCM_ANALOG_TUPLE_REG_OFF(base, pll, 8U) = 1UL << CCM_ANALOG_PLL_BYPASS_SHIFT;
1470static inline bool CLOCK_IsPllBypassed(CCM_ANALOG_Type *base, clock_pll_t pll)
1472 return (
bool)(CCM_ANALOG_TUPLE_REG(base, pll) & (1UL << CCM_ANALOG_PLL_BYPASS_SHIFT));
1484static inline bool CLOCK_IsPllEnabled(CCM_ANALOG_Type *base, clock_pll_t pll)
1486 return ((CCM_ANALOG_TUPLE_REG(base, pll) & (1UL << CCM_ANALOG_TUPLE_SHIFT(pll))) != 0U);
1497static inline void CLOCK_SetPllBypassRefClkSrc(CCM_ANALOG_Type *base, clock_pll_t pll, uint32_t src)
1499 CCM_ANALOG_TUPLE_REG(base, pll) |= (CCM_ANALOG_TUPLE_REG(base, pll) & (~CCM_ANALOG_PLL_BYPASS_CLK_SRC_MASK)) | src;
1510static inline uint32_t CLOCK_GetPllBypassRefClk(CCM_ANALOG_Type *base, clock_pll_t pll)
1512 return (((CCM_ANALOG_TUPLE_REG(base, pll) & CCM_ANALOG_PLL_BYPASS_CLK_SRC_MASK) >>
1513 CCM_ANALOG_PLL_BYPASS_CLK_SRC_SHIFT) == (uint32_t)kCLOCK_PllClkSrc24M) ?
1514 CLOCK_GetOscFreq() :
1525void CLOCK_InitArmPll(
const clock_arm_pll_config_t *config);
1530void CLOCK_DeinitArmPll(
void);
1539void CLOCK_InitSysPll(
const clock_sys_pll_config_t *config);
1544void CLOCK_DeinitSysPll(
void);
1553void CLOCK_InitUsb1Pll(
const clock_usb_pll_config_t *config);
1558void CLOCK_DeinitUsb1Pll(
void);
1567void CLOCK_InitUsb2Pll(
const clock_usb_pll_config_t *config);
1572void CLOCK_DeinitUsb2Pll(
void);
1581void CLOCK_InitAudioPll(
const clock_audio_pll_config_t *config);
1586void CLOCK_DeinitAudioPll(
void);
1595void CLOCK_InitVideoPll(
const clock_video_pll_config_t *config);
1600void CLOCK_DeinitVideoPll(
void);
1608void CLOCK_InitEnetPll(
const clock_enet_pll_config_t *config);
1615void CLOCK_DeinitEnetPll(
void);
1625uint32_t CLOCK_GetPllFreq(clock_pll_t pll);
1637void CLOCK_InitSysPfd(clock_pfd_t pfd, uint8_t pfdFrac);
1646void CLOCK_DeinitSysPfd(clock_pfd_t pfd);
1658void CLOCK_InitUsb1Pfd(clock_pfd_t pfd, uint8_t pfdFrac);
1667void CLOCK_DeinitUsb1Pfd(clock_pfd_t pfd);
1677uint32_t CLOCK_GetSysPfdFreq(clock_pfd_t pfd);
1687uint32_t CLOCK_GetUsb1PfdFreq(clock_pfd_t pfd);
1698bool CLOCK_EnableUsbhs0PhyPllClock(clock_usb_phy_src_t src, uint32_t freq);
1704void CLOCK_DisableUsbhs0PhyPllClock(
void);
1715bool CLOCK_EnableUsbhs1PhyPllClock(clock_usb_phy_src_t src, uint32_t freq);
1721void CLOCK_DisableUsbhs1PhyPllClock(
void);
1736void CLOCK_SetClockOutput1(clock_output1_selection_t selection, clock_output_divider_t divider);
1744void CLOCK_SetClockOutput2(clock_output2_selection_t selection, clock_output_divider_t divider);
1751uint32_t CLOCK_GetClockOutCLKO1Freq(
void);
1758uint32_t CLOCK_GetClockOutClkO2Freq(
void);
1762#if defined(__cplusplus)