clock_config.c 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. /***********************************************************************************************************************
  2. * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
  3. * will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
  4. **********************************************************************************************************************/
  5. /*
  6. * How to set up clock using clock driver functions:
  7. *
  8. * 1. Setup clock sources.
  9. *
  10. * 2. Set up wait states of the flash.
  11. *
  12. * 3. Set up all dividers.
  13. *
  14. * 4. Set up all selectors to provide selected clocks.
  15. */
  16. /* clang-format off */
  17. /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
  18. !!GlobalInfo
  19. product: Clocks v7.0
  20. processor: LPC55S69
  21. package_id: LPC55S69JBD64
  22. mcu_data: ksdk2_0
  23. processor_version: 9.0.3
  24. * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
  25. /* clang-format on */
  26. #include "fsl_power.h"
  27. #include "fsl_clock.h"
  28. #include "clock_config.h"
  29. /*******************************************************************************
  30. * Definitions
  31. ******************************************************************************/
  32. /*******************************************************************************
  33. * Variables
  34. ******************************************************************************/
  35. /* System clock frequency. */
  36. extern uint32_t SystemCoreClock;
  37. /*******************************************************************************
  38. ************************ BOARD_InitBootClocks function ************************
  39. ******************************************************************************/
  40. void BOARD_InitBootClocks(void)
  41. {
  42. BOARD_BootClockRUN();
  43. }
  44. /*******************************************************************************
  45. ********************** Configuration BOARD_BootClockRUN ***********************
  46. ******************************************************************************/
  47. /* clang-format off */
  48. /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
  49. !!Configuration
  50. name: BOARD_BootClockRUN
  51. called_from_default_init: true
  52. outputs:
  53. - {id: FXCOM0_clock.outFreq, value: 48 MHz}
  54. - {id: FXCOM3_clock.outFreq, value: 48 MHz}
  55. - {id: System_clock.outFreq, value: 150 MHz, locked: true, accuracy: '0.001'}
  56. - {id: USB1_PHY_clock.outFreq, value: 16 MHz}
  57. settings:
  58. - {id: PLL0_Mode, value: Normal}
  59. - {id: ANALOG_CONTROL_FRO192M_CTRL_ENDI_FRO_96M_CFG, value: Enable}
  60. - {id: ENABLE_CLKIN_ENA, value: Enabled}
  61. - {id: ENABLE_PLL_USB_OUT, value: Enabled}
  62. - {id: ENABLE_SYSTEM_CLK_OUT, value: Enabled}
  63. - {id: SYSCON.FCCLKSEL0.sel, value: SYSCON.FROHFDIV}
  64. - {id: SYSCON.FCCLKSEL3.sel, value: SYSCON.FROHFDIV}
  65. - {id: SYSCON.FRGCTRL3_DIV.scale, value: '256', locked: true}
  66. - {id: SYSCON.FROHFDIV.scale, value: '2', locked: true}
  67. - {id: SYSCON.MAINCLKSELB.sel, value: SYSCON.PLL0_BYPASS}
  68. - {id: SYSCON.PLL0CLKSEL.sel, value: SYSCON.CLK_IN_EN}
  69. - {id: SYSCON.PLL0M_MULT.scale, value: '150', locked: true}
  70. - {id: SYSCON.PLL0N_DIV.scale, value: '8', locked: true}
  71. - {id: SYSCON.PLL0_PDEC.scale, value: '2'}
  72. sources:
  73. - {id: ANACTRL.fro_hf.outFreq, value: 96 MHz}
  74. - {id: SYSCON.XTAL32M.outFreq, value: 16 MHz, enabled: true}
  75. * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
  76. /* clang-format on */
  77. /*******************************************************************************
  78. * Variables for BOARD_BootClockRUN configuration
  79. ******************************************************************************/
  80. /*******************************************************************************
  81. * Code for BOARD_BootClockRUN configuration
  82. ******************************************************************************/
  83. void BOARD_BootClockRUN(void)
  84. {
  85. #ifndef SDK_SECONDARY_CORE
  86. /*!< Set up the clock sources */
  87. /*!< Configure FRO192M */
  88. POWER_DisablePD(kPDRUNCFG_PD_FRO192M); /*!< Ensure FRO is on */
  89. CLOCK_SetupFROClocking(12000000U); /*!< Set up FRO to the 12 MHz, just for sure */
  90. CLOCK_AttachClk(kFRO12M_to_MAIN_CLK); /*!< Switch to FRO 12MHz first to ensure we can change the clock setting */
  91. CLOCK_SetupFROClocking(96000000U); /* Enable FRO HF(96MHz) output */
  92. /*!< Configure XTAL32M */
  93. POWER_DisablePD(kPDRUNCFG_PD_XTAL32M); /* Ensure XTAL32M is powered */
  94. POWER_DisablePD(kPDRUNCFG_PD_LDOXO32M); /* Ensure XTAL32M is powered */
  95. CLOCK_SetupExtClocking(16000000U); /* Enable clk_in clock */
  96. SYSCON->CLOCK_CTRL |= SYSCON_CLOCK_CTRL_CLKIN_ENA_MASK; /* Enable clk_in from XTAL32M clock */
  97. ANACTRL->XO32M_CTRL |= ANACTRL_XO32M_CTRL_ENABLE_SYSTEM_CLK_OUT_MASK; /* Enable clk_in to system */
  98. ANACTRL->XO32M_CTRL |= ANACTRL_XO32M_CTRL_ENABLE_PLL_USB_OUT_MASK; /* Enable clk_in to HS USB */
  99. POWER_SetVoltageForFreq(150000000U); /*!< Set voltage for the one of the fastest clock outputs: System clock output */
  100. CLOCK_SetFLASHAccessCyclesForFreq(150000000U); /*!< Set FLASH wait states for core */
  101. /*!< Set up PLL */
  102. CLOCK_AttachClk(kEXT_CLK_to_PLL0); /*!< Switch PLL0CLKSEL to EXT_CLK */
  103. POWER_DisablePD(kPDRUNCFG_PD_PLL0); /* Ensure PLL is on */
  104. POWER_DisablePD(kPDRUNCFG_PD_PLL0_SSCG);
  105. const pll_setup_t pll0Setup = {
  106. .pllctrl = SYSCON_PLL0CTRL_CLKEN_MASK | SYSCON_PLL0CTRL_SELI(53U) | SYSCON_PLL0CTRL_SELP(31U),
  107. .pllndec = SYSCON_PLL0NDEC_NDIV(8U),
  108. .pllpdec = SYSCON_PLL0PDEC_PDIV(1U),
  109. .pllsscg = {0x0U,(SYSCON_PLL0SSCG1_MDIV_EXT(150U) | SYSCON_PLL0SSCG1_SEL_EXT_MASK)},
  110. .pllRate = 150000000U,
  111. .flags = PLL_SETUPFLAG_WAITLOCK
  112. };
  113. CLOCK_SetPLL0Freq(&pll0Setup); /*!< Configure PLL0 to the desired values */
  114. /*!< Set up dividers */
  115. #if FSL_CLOCK_DRIVER_VERSION >= MAKE_VERSION(2, 3, 4)
  116. CLOCK_SetClkDiv(kCLOCK_DivFlexFrg0, 0U, false); /*!< Set DIV to value 0xFF and MULT to value 0U in related FLEXFRGCTRL register */
  117. #else
  118. CLOCK_SetClkDiv(kCLOCK_DivFlexFrg0, 256U, false); /*!< Set DIV to value 0xFF and MULT to value 0U in related FLEXFRGCTRL register */
  119. #endif
  120. #if FSL_CLOCK_DRIVER_VERSION >= MAKE_VERSION(2, 3, 4)
  121. CLOCK_SetClkDiv(kCLOCK_DivFlexFrg3, 0U, false); /*!< Set DIV to value 0xFF and MULT to value 0U in related FLEXFRGCTRL register */
  122. #else
  123. CLOCK_SetClkDiv(kCLOCK_DivFlexFrg3, 256U, false); /*!< Set DIV to value 0xFF and MULT to value 0U in related FLEXFRGCTRL register */
  124. #endif
  125. CLOCK_SetClkDiv(kCLOCK_DivAhbClk, 1U, false); /*!< Set AHBCLKDIV divider to value 1 */
  126. CLOCK_SetClkDiv(kCLOCK_DivFrohfClk, 0U, true); /*!< Reset FROHFDIV divider counter and halt it */
  127. CLOCK_SetClkDiv(kCLOCK_DivFrohfClk, 2U, false); /*!< Set FROHFDIV divider to value 2 */
  128. /*!< Set up clock selectors - Attach clocks to the peripheries */
  129. CLOCK_AttachClk(kPLL0_to_MAIN_CLK); /*!< Switch MAIN_CLK to PLL0 */
  130. CLOCK_AttachClk(kFRO_HF_DIV_to_FLEXCOMM0); /*!< Switch FLEXCOMM0 to FRO_HF_DIV */
  131. CLOCK_AttachClk(kFRO_HF_DIV_to_FLEXCOMM3); /*!< Switch FLEXCOMM3 to FRO_HF_DIV */
  132. /*!< Set SystemCoreClock variable. */
  133. SystemCoreClock = BOARD_BOOTCLOCKRUN_CORE_CLOCK;
  134. #endif
  135. }