ISSDK  1.8
IoT Sensing Software Development Kit
clock_config.c
Go to the documentation of this file.
1 /*
2  * Copyright 2019 NXP
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 /***********************************************************************************************************************
8  * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
9  * will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
10  **********************************************************************************************************************/
11 /*
12  * How to set up clock using clock driver functions:
13  *
14  * 1. Setup clock sources.
15  *
16  * 2. Set up all selectors to provide selected clocks.
17  *
18  * 3. Set up all dividers.
19  */
20 
21 /* clang-format off */
22 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
23 !!GlobalInfo
24 product: Clocks v6.0
25 processor: MIMXRT685S
26 package_id: MIMXRT685SEVKA
27 mcu_data: ksdk2_0
28 processor_version: 0.0.0
29  * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
30 /* clang-format on */
31 
32 #include "fsl_power.h"
33 #include "fsl_clock.h"
34 #include "clock_config.h"
35 
36 /*******************************************************************************
37  * Definitions
38  ******************************************************************************/
39 
40 /*******************************************************************************
41  * Variables
42  ******************************************************************************/
43 /* System clock frequency. */
44 extern uint32_t SystemCoreClock;
45 
46 /*FUNCTION**********************************************************************
47  *
48  * Function Name : BOARD_QspiClockSafeConfig
49  * Description : QSPI clock source safe configuration weak function.
50  * Called before clock source(Such as PLL, Main clock) configuration.
51  * Note : Users need override this function to change QSPI clock source to stable source when executing
52  * code on QSPI memory(XIP). If XIP, the function should runs in RAM and move the QSPI clock source
53  * to an stable clock to avoid instruction/data fetch issue during clock updating.
54  *END**************************************************************************/
55 __attribute__((weak)) void BOARD_QspiClockSafeConfig(void)
56 {
57 }
58 
59 /*FUNCTION**********************************************************************
60  *
61  * Function Name : BOARD_SetQspiClock
62  * Description : This function should be overridden if executing code on QSPI memory(XIP).
63  * To Change QSPI clock, should move to run from RAM and then configure QSPI clock source.
64  * After the clock is changed and stable, move back to run on QSPI.
65  * Param base : QSPI peripheral base address.
66  * Param src : QSPI clock source.
67  * Param divider : QSPI clock divider.
68  *END**************************************************************************/
69 __attribute__((weak)) void BOARD_SetQspiClock(QuadSPI_Type *base, uint32_t src, uint32_t divider)
70 {
71  if (QUADSPI == base)
72  {
73  CLKCTL0->OSPIFCLKSEL = CLKCTL0_OSPIFCLKSEL_SEL(src);
74  CLKCTL0->OSPIFCLKDIV |= CLKCTL0_OSPIFCLKDIV_RESET_MASK; /* Reset the divider counter */
75  CLKCTL0->OSPIFCLKDIV = CLKCTL0_OSPIFCLKDIV_DIV(divider - 1);
76  while ((CLKCTL0->OSPIFCLKDIV) & CLKCTL0_OSPIFCLKDIV_REQFLAG_MASK)
77  {
78  }
79  }
80  else
81  {
82  return;
83  }
84 }
85 
86 /*******************************************************************************
87  ************************ BOARD_InitBootClocks function ************************
88  ******************************************************************************/
90 {
92 }
93 
94 /*******************************************************************************
95  ********************** Configuration BOARD_BootClockRUN ***********************
96  ******************************************************************************/
97 /* clang-format off */
98 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
99 !!Configuration
100 name: BOARD_BootClockRUN
101 called_from_default_init: true
102 outputs:
103 - {id: DSPRAM_clock.outFreq, value: 24 MHz}
104 - {id: DSP_clock.outFreq, value: 48 MHz}
105 - {id: I3C_SLOW_clock.outFreq, value: 1 MHz}
106 - {id: LPOSC1M_clock.outFreq, value: 1 MHz}
107 - {id: OSTIMER_clock.outFreq, value: 1 MHz}
108 - {id: QSPI_clock.outFreq, value: 1188/19 MHz}
109 - {id: SYSTICK_clock.outFreq, value: 2376/19 MHz}
110 - {id: System_clock.outFreq, value: 1188/19 MHz}
111 - {id: USBPHY_clock.outFreq, value: 2376/19 MHz}
112 - {id: WAKE_32K_clock.outFreq, value: 976.5625 Hz}
113 - {id: WWDT0_clock.outFreq, value: 1 MHz}
114 - {id: WWDT1_clock.outFreq, value: 1 MHz}
115 settings:
116 - {id: AUDIOPLL0_PFD0_CLK_GATE, value: 'No'}
117 - {id: PLL0_PFD0_CLK_GATE, value: 'No'}
118 - {id: PLL0_PFD2_CLK_GATE, value: 'No'}
119 - {id: SYSCON.AUDIOPLL0CLKSEL.sel, value: SYSCON.OSC_CLKSEL}
120 - {id: SYSCON.AUDIOPLL0_PFD0_DIV.scale, value: '26', locked: true}
121 - {id: SYSCON.AUDIOPLLCLKDIV.scale, value: '15', locked: true}
122 - {id: SYSCON.AUDIO_PLL0_PFD0_MUL.scale, value: '18', locked: true}
123 - {id: SYSCON.DSPMAINRAMCLKDIV.scale, value: '2', locked: true}
124 - {id: SYSCON.FRGPLLCLKDIV.scale, value: '8', locked: true}
125 - {id: SYSCON.MAINCLKSELB.sel, value: SYSCON.PLL0_PFD0_BYPASS}
126 - {id: SYSCON.OSPIFCLKDIV.scale, value: '2', locked: true}
127 - {id: SYSCON.OSPIFCLKSEL.sel, value: SYSCON.PLL0_PFD0_BYPASS}
128 - {id: SYSCON.PLL0.denom, value: '1'}
129 - {id: SYSCON.PLL0.div, value: '22'}
130 - {id: SYSCON.PLL0.num, value: '0'}
131 - {id: SYSCON.PLL0_PFD0_DIV.scale, value: '19', locked: true}
132 - {id: SYSCON.PLL0_PFD0_MUL.scale, value: '18', locked: true}
133 - {id: SYSCON.PLL0_PFD2_DIV.scale, value: '24', locked: true}
134 - {id: SYSCON.PLL0_PFD2_MUL.scale, value: '18', locked: true}
135 - {id: SYSCON.PLL1.denom, value: '27000', locked: true}
136 - {id: SYSCON.PLL1.div, value: '22'}
137 - {id: SYSCON.PLL1.num, value: '5040', locked: true}
138 - {id: SYSCON.SYSCPUAHBCLKDIV.scale, value: '2'}
139 - {id: SYSCON.SYSPLL0CLKSEL.sel, value: SYSCON.OSC_CLKSEL}
140 - {id: SYSCON.SYSTICKFCLKSEL.sel, value: SYSCON.SYSTICKFCLKDIV}
141 - {id: SYSCTL_PDRUNCFG_AUDIOPLL_CFG, value: 'No'}
142 - {id: SYSCTL_PDRUNCFG_SYSPLL_CFG, value: 'No'}
143 - {id: SYSCTL_PDRUNCFG_SYSXTAL_CFG, value: Power_up}
144 - {id: XTAL_LP_Enable, value: LowPowerMode}
145 sources:
146 - {id: SYSCON.XTAL.outFreq, value: 24 MHz, enabled: true}
147  * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
148 /* clang-format on */
149 
150 /*******************************************************************************
151  * Variables for BOARD_BootClockRUN configuration
152  ******************************************************************************/
153 const clock_sys_pll_config_t g_sysPllConfig_BOARD_BootClockRUN = {
154  .sys_pll_src = kCLOCK_SysPllXtalIn, /* OSC clock */
155  .numerator = 0, /* Numerator of the SYSPLL0 fractional loop divider isnull */
156  .denominator = 1, /* Denominator of the SYSPLL0 fractional loop divider isnull */
157  .sys_pll_mult = kCLOCK_SysPllMult22 /* Divide by 22 */
158 };
159 const clock_audio_pll_config_t g_audioPllConfig_BOARD_BootClockRUN = {
160  .audio_pll_src = kCLOCK_AudioPllXtalIn, /* OSC clock */
161  .numerator = 5040, /* Numerator of the SYSPLL0 fractional loop divider isnull */
162  .denominator = 27000, /* Denominator of the SYSPLL0 fractional loop divider isnull */
163  .audio_pll_mult = kCLOCK_AudioPllMult22 /* Divide by 22 */
164 };
165 /*******************************************************************************
166  * Code for BOARD_BootClockRUN configuration
167  ******************************************************************************/
169 {
170  /* Configure LPOSC 1M */
171  POWER_DisablePD(kPDRUNCFG_PD_LPOSC); /* Power on LPOSC (1MHz) */
172  /* Configure FRO clock source */
173  POWER_DisablePD(kPDRUNCFG_PD_FFRO); /* Power on FFRO (48/60MHz) */
174  POWER_DisablePD(kPDRUNCFG_PD_SFRO); /* Power on SFRO (16MHz) */
175 
176  /* Call function BOARD_QspiClockSafeConfig() to move QSPI clock to a stable clock source to avoid
177  instruction/data fetch issue when updating PLL and Main clock if XIP(execute code on QSPI memory). */
178  BOARD_QspiClockSafeConfig();
179 
180  /* Let CPU run on ffro for safe switching */
181  CLOCK_AttachClk(kFFRO_to_MAIN_CLK);
182 
183  /* Configure SYSOSC clock source */
184  POWER_DisablePD(kPDRUNCFG_PD_SYSXTAL); /* Power on SYSXTAL */
185  POWER_UpdateOscSettlingTime(BOARD_SYSOSC_SETTLING_US); /* Updated XTAL oscillator settling time */
186  CLOCK_EnableSysOscClk(true, BOARD_SYSOSC_SETTLING_US); /* Enable system OSC */
187  CLOCK_SetXtalFreq(BOARD_XTAL_SYS_CLK_HZ); /* Sets external XTAL OSC freq */
188 
189  /* FIXME: Set the PLL lock time to 300us. Should be removed after getting trimmed sample. */
190  CLKCTL0->SYSPLL0LOCKTIMEDIV2 = 300U;
191  CLKCTL1->AUDIOPLL0LOCKTIMEDIV2 = 300U;
192  /* Configure SysPLL0 clock source */
193  CLOCK_InitSysPll(&g_sysPllConfig_BOARD_BootClockRUN);
194  CLOCK_InitSysPfd(kCLOCK_Pfd0, 19); /* Enable MAIN PLL clock */
195  CLOCK_InitSysPfd(kCLOCK_Pfd2, 24); /* Enable AUX0 PLL clock */
196 
197  /* Configure Audio PLL clock source */
198  CLOCK_InitAudioPll(&g_audioPllConfig_BOARD_BootClockRUN);
199  CLOCK_InitAudioPfd(kCLOCK_Pfd0, 26); /* Enable Audio PLL clock */
200 
201  CLOCK_SetClkDiv(kCLOCK_DivSysCpuAhbClk, 2U); /* Set SYSCPUAHBCLKDIV divider to value 2 */
202 
203  /* Set up clock selectors - Attach clocks to the peripheries */
204  CLOCK_AttachClk(kMAIN_PLL_to_MAIN_CLK); /* Switch MAIN_CLK to MAIN_PLL */
205  CLOCK_AttachClk(kMAIN_CLK_DIV_to_SYSTICK_CLK); /* Switch SYSTICK_CLK to MAIN_CLK_DIV */
206  CLOCK_AttachClk(kMAIN_PLL_to_QSPI_CLK); /* Switch QSPI_CLK to MAIN_PLL */
207 
208  /* Set up dividers */
209  CLOCK_SetClkDiv(kCLOCK_DivAudioPllClk, 15U); /* Set AUDIOPLLCLKDIV divider to value 15 */
210  CLOCK_SetClkDiv(kCLOCK_DivQspiClk, 2U); /* Set OSPIFCLKDIV divider to value 2 */
211  CLOCK_SetClkDiv(kCLOCK_DivPllFrgClk, 8U); /* Set FRGPLLCLKDIV divider to value 8 */
212 
213  /* Call weak function BOARD_SetQspiClock() to set user configured clock source/divider for QSPI. */
214  BOARD_SetQspiClock(QUADSPI, 1U, 2U);
215 
216  /*< Set SystemCoreClock variable. */
218 }
#define BOARD_SYSOSC_SETTLING_US
Definition: clock_config.h:20
const clock_sys_pll_config_t g_sysPllConfig_BOARD_BootClockRUN
Definition: clock_config.c:153
#define BOARD_XTAL_SYS_CLK_HZ
Definition: clock_config.h:22
const clock_audio_pll_config_t g_audioPllConfig_BOARD_BootClockRUN
Definition: clock_config.c:159
__attribute__((weak))
Definition: clock_config.c:55
void BOARD_InitBootClocks(void)
This function executes default configuration of clocks.
Definition: clock_config.c:52
uint32_t SystemCoreClock
void BOARD_BootClockRUN(void)
This function executes configuration of clocks.
Definition: clock_config.c:168
#define BOARD_BOOTCLOCKRUN_CORE_CLOCK
Definition: clock_config.h:25