1 /*
2 * Copyright 2023 NXP
3 * All rights reserved.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
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 setup clock using clock driver functions:
13 *
14 * 1. Call CLOCK_InitXXX() to configure corresponding SCG clock source.
15 * Note: The clock could not be set when it is being used as system clock.
16 * In default out of reset, the CPU is clocked from FIRC(IRC48M),
17 * so before setting FIRC, change to use another avaliable clock source.
18 *
19 * 2. Call CLOCK_SetXtal0Freq() to set XTAL0 frequency based on board settings.
20 *
21 * 3. Call CLOCK_SetXxxModeSysClkConfig() to set SCG mode for Xxx run mode.
22 * Wait until the system clock source is changed to target source.
23 *
24 * 4. If power mode change is needed, call SMC_SetPowerModeProtection() to allow
25 * corresponding power mode and SMC_SetPowerModeXxx() to change to Xxx mode.
26 * Supported run mode and clock restrictions could be found in Reference Manual.
27 */
28
29 /* clang-format off */
30 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
31 !!GlobalInfo
32 product: Clocks v12.0
33 processor: MKE17Z512xxx9
34 package_id: MKE17Z512VLL9
35 mcu_data: ksdk2_0
36 processor_version: 0.0.0
37 board: FRDM-KE17Z512
38 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
39 /* clang-format on */
40
41 #include "fsl_smc.h"
42 #include "clock_config.h"
43
44 /*******************************************************************************
45 * Definitions
46 ******************************************************************************/
47
48 /*******************************************************************************
49 * Variables
50 ******************************************************************************/
51
52 /*******************************************************************************
53 * Code
54 ******************************************************************************/
55 /*FUNCTION**********************************************************************
56 *
57 * Function Name : CLOCK_CONFIG_FircSafeConfig
58 * Description : This function is used to safely configure FIRC clock.
59 * In default out of reset, the CPU is clocked from FIRC(IRC48M).
60 * Before setting FIRC, change to use SIRC as system clock,
61 * then configure FIRC. After FIRC is set, change back to use FIRC
62 * in case SIRC need to be configured.
63 * Param fircConfig : FIRC configuration.
64 *
65 *END**************************************************************************/
CLOCK_CONFIG_FircSafeConfig(const scg_firc_config_t * fircConfig)66 static void CLOCK_CONFIG_FircSafeConfig(const scg_firc_config_t *fircConfig)
67 {
68 scg_sys_clk_config_t curConfig;
69 const scg_sirc_config_t scgSircConfig = {.enableMode = kSCG_SircEnable,
70 .div2 = kSCG_AsyncClkDivBy2,
71 .range = kSCG_SircRangeHigh};
72 scg_sys_clk_config_t sysClkSafeConfigSource = {
73 .divSlow = kSCG_SysClkDivBy4, /* Slow clock divider */
74 .divCore = kSCG_SysClkDivBy1, /* Core clock divider */
75 .src = kSCG_SysClkSrcSirc /* System clock source */
76 };
77 /* Init Sirc. */
78 CLOCK_InitSirc(&scgSircConfig);
79 /* Change to use SIRC as system clock source to prepare to change FIRCCFG register. */
80 CLOCK_SetRunModeSysClkConfig(&sysClkSafeConfigSource);
81 /* Wait for clock source switch finished. */
82 do
83 {
84 CLOCK_GetCurSysClkConfig(&curConfig);
85 } while (curConfig.src != sysClkSafeConfigSource.src);
86
87 /* Init Firc. */
88 CLOCK_InitFirc(fircConfig);
89 /* Change back to use FIRC as system clock source in order to configure SIRC if needed. */
90 sysClkSafeConfigSource.src = kSCG_SysClkSrcFirc;
91 CLOCK_SetRunModeSysClkConfig(&sysClkSafeConfigSource);
92 /* Wait for clock source switch finished. */
93 do
94 {
95 CLOCK_GetCurSysClkConfig(&curConfig);
96 } while (curConfig.src != sysClkSafeConfigSource.src);
97 }
98
99 /*******************************************************************************
100 ************************ BOARD_InitBootClocks function ************************
101 ******************************************************************************/
BOARD_InitBootClocks(void)102 void BOARD_InitBootClocks(void)
103 {
104 BOARD_BootClockRUN();
105 }
106
107 /*******************************************************************************
108 ********************** Configuration BOARD_BootClockRUN ***********************
109 ******************************************************************************/
110 /* clang-format off */
111 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
112 !!Configuration
113 name: BOARD_BootClockRUN
114 called_from_default_init: true
115 outputs:
116 - {id: Bus_clock.outFreq, value: 24 MHz}
117 - {id: Core_clock.outFreq, value: 72 MHz}
118 - {id: FIRCDIV2_CLK.outFreq, value: 48 MHz}
119 - {id: FLLDIV2_CLK.outFreq, value: 36 MHz}
120 - {id: Flash_clock.outFreq, value: 24 MHz}
121 - {id: LPO1KCLK.outFreq, value: 1 kHz}
122 - {id: LPO_clock.outFreq, value: 128 kHz}
123 - {id: PCC.PCC_ADC0_CLK.outFreq, value: 8 MHz}
124 - {id: PCC.PCC_LPI2C0_CLK.outFreq, value: 8 MHz}
125 - {id: PCC.PCC_LPUART0_CLK.outFreq, value: 8 MHz}
126 - {id: SIRCDIV2_CLK.outFreq, value: 4 MHz}
127 - {id: SIRC_CLK.outFreq, value: 8 MHz}
128 - {id: SOSCDIV2_CLK.outFreq, value: 8 MHz}
129 - {id: SOSC_CLK.outFreq, value: 8 MHz}
130 - {id: System_clock.outFreq, value: 72 MHz}
131 settings:
132 - {id: SCGMode, value: LPFLL}
133 - {id: PCC.PCC_ADC0_SEL.sel, value: SCG.SOSCDIV2_CLK}
134 - {id: PCC.PCC_LPI2C0_SEL.sel, value: SCG.SOSCDIV2_CLK}
135 - {id: PCC.PCC_LPUART0_SEL.sel, value: SCG.SOSCDIV2_CLK}
136 - {id: SCG.DIVCORE.scale, value: '1', locked: true}
137 - {id: SCG.DIVSLOW.scale, value: '3', locked: true}
138 - {id: SCG.FIRCDIV2.scale, value: '1'}
139 - {id: SCG.LPFLLDIV2.scale, value: '2'}
140 - {id: SCG.LPFLL_mul.scale, value: '36', locked: true}
141 - {id: SCG.SCSSEL.sel, value: SCG.LPFLL}
142 - {id: SCG.SIRCDIV2.scale, value: '2'}
143 - {id: SCG.SOSCDIV2.scale, value: '1'}
144 - {id: SCG.TRIMDIV.scale, value: '4'}
145 - {id: SCG_LPFLLCSR_LPFLLEN_CFG, value: Enabled}
146 - {id: SCG_SIRCCSR_SIRCLPEN_CFG, value: Disabled}
147 - {id: SCG_SOSCCFG_OSC_MODE_CFG, value: ModeOscLowPower}
148 - {id: SCG_SOSCCFG_RANGE_CFG, value: Medium}
149 - {id: SCG_SOSCCSR_SOSCEN_CFG, value: Enabled}
150 - {id: SCG_SOSCCSR_SOSCLPEN_CFG, value: Enabled}
151 sources:
152 - {id: SCG.SOSC.outFreq, value: 8 MHz, enabled: true}
153 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
154 /* clang-format on */
155
156 /*******************************************************************************
157 * Variables for BOARD_BootClockRUN configuration
158 ******************************************************************************/
159 const scg_sys_clk_config_t g_sysClkConfig_BOARD_BootClockRUN =
160 {
161 .divSlow = kSCG_SysClkDivBy3, /* Slow Clock Divider: divided by 3 */
162 .divCore = kSCG_SysClkDivBy1, /* Core Clock Divider: divided by 1 */
163 .src = kSCG_SysClkSrcLpFll, /* Low power FLL is selected as System Clock Source */
164 };
165 const scg_sosc_config_t g_scgSysOscConfig_BOARD_BootClockRUN =
166 {
167 .freq = 8000000U, /* System Oscillator frequency: 8000000Hz */
168 .enableMode = kSCG_SysOscEnable | kSCG_SysOscEnableInLowPower,/* Enable System OSC clock, Enable System OSC in low power mode */
169 .monitorMode = kSCG_SysOscMonitorDisable, /* Monitor disabled */
170 .div2 = kSCG_AsyncClkDivBy1, /* System OSC Clock Divider 2: divided by 1 */
171 .workMode = kSCG_SysOscModeOscLowPower, /* Oscillator low power */
172 };
173 const scg_sirc_config_t g_scgSircConfig_BOARD_BootClockRUN =
174 {
175 .enableMode = kSCG_SircEnable, /* Enable SIRC clock */
176 .div2 = kSCG_AsyncClkDivBy2, /* Slow IRC Clock Divider 2: divided by 2 */
177 .range = kSCG_SircRangeHigh, /* Slow IRC high range clock (8 MHz) */
178 };
179 const scg_firc_config_t g_scgFircConfig_BOARD_BootClockRUN =
180 {
181 .enableMode = kSCG_FircEnable, /* Enable FIRC clock */
182 .div2 = kSCG_AsyncClkDivBy1, /* Fast IRC Clock Divider 2: divided by 1 */
183 .range = kSCG_FircRange48M, /* Fast IRC is trimmed to 48MHz */
184 .trimConfig = NULL, /* Fast IRC Trim disabled */
185 };
186 const scg_lpfll_config_t g_scgLpFllConfig_BOARD_BootClockRUN =
187 {
188 .enableMode = kSCG_LpFllEnable, /* Enable LPFLL clock */
189 .div2 = kSCG_AsyncClkDivBy2, /* Low Power FLL Clock Divider 2: divided by 2 */
190 .range = kSCG_LpFllRange72M, /* LPFLL is trimmed to 72MHz */
191 .trimConfig = NULL,
192 };
193 /*******************************************************************************
194 * Code for BOARD_BootClockRUN configuration
195 ******************************************************************************/
BOARD_BootClockRUN(void)196 void BOARD_BootClockRUN(void)
197 {
198 scg_sys_clk_config_t curConfig;
199
200 /* Init SOSC according to board configuration. */
201 CLOCK_InitSysOsc(&g_scgSysOscConfig_BOARD_BootClockRUN);
202 /* Set the XTAL0 frequency based on board settings. */
203 CLOCK_SetXtal0Freq(g_scgSysOscConfig_BOARD_BootClockRUN.freq);
204 /* Init FIRC. */
205 CLOCK_CONFIG_FircSafeConfig(&g_scgFircConfig_BOARD_BootClockRUN);
206 /* Init SIRC. */
207 CLOCK_InitSirc(&g_scgSircConfig_BOARD_BootClockRUN);
208 /* Init LPFLL. */
209 CLOCK_InitLpFll(&g_scgLpFllConfig_BOARD_BootClockRUN);
210 /* Set SCG to LPFLL mode. */
211 CLOCK_SetRunModeSysClkConfig(&g_sysClkConfig_BOARD_BootClockRUN);
212 /* Wait for clock source switch finished. */
213 do
214 {
215 CLOCK_GetCurSysClkConfig(&curConfig);
216 } while (curConfig.src != g_sysClkConfig_BOARD_BootClockRUN.src);
217 /* Set SystemCoreClock variable. */
218 SystemCoreClock = BOARD_BOOTCLOCKRUN_CORE_CLOCK;
219 /* Set PCC ADC0 selection */
220 CLOCK_SetIpSrc(kCLOCK_Adc0, kCLOCK_IpSrcSysOscAsync);
221 /* Set PCC LPI2C0 selection */
222 CLOCK_SetIpSrc(kCLOCK_Lpi2c0, kCLOCK_IpSrcSysOscAsync);
223 /* Set PCC LPUART0 selection */
224 CLOCK_SetIpSrc(kCLOCK_Lpuart0, kCLOCK_IpSrcSysOscAsync);
225 }
226
227 /*******************************************************************************
228 ********************* Configuration BOARD_BootClockVLPR ***********************
229 ******************************************************************************/
230 /* clang-format off */
231 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
232 !!Configuration
233 name: BOARD_BootClockVLPR
234 outputs:
235 - {id: Bus_clock.outFreq, value: 1 MHz}
236 - {id: Core_clock.outFreq, value: 4 MHz}
237 - {id: Flash_clock.outFreq, value: 1 MHz}
238 - {id: LPO1KCLK.outFreq, value: 1 kHz}
239 - {id: LPO_clock.outFreq, value: 128 kHz}
240 - {id: SOSCDIV2_CLK.outFreq, value: 8 MHz}
241 - {id: SOSC_CLK.outFreq, value: 8 MHz}
242 - {id: System_clock.outFreq, value: 4 MHz}
243 settings:
244 - {id: SCGMode, value: SOSC}
245 - {id: powerMode, value: VLPR}
246 - {id: SCG.DIVCORE.scale, value: '2', locked: true}
247 - {id: SCG.DIVSLOW.scale, value: '4', locked: true}
248 - {id: SCG.FIRCDIV2.scale, value: '1'}
249 - {id: SCG.LPFLLDIV2.scale, value: '2'}
250 - {id: SCG.LPFLL_mul.scale, value: '36', locked: true}
251 - {id: SCG.SCSSEL.sel, value: SCG.SOSC}
252 - {id: SCG.SIRCDIV2.scale, value: '2'}
253 - {id: SCG.SOSCDIV2.scale, value: '1'}
254 - {id: SCG.TRIMDIV.scale, value: '4'}
255 - {id: SCG_LPFLLCSR_LPFLLEN_CFG, value: Enabled}
256 - {id: SCG_SIRCCSR_SIRCLPEN_CFG, value: Disabled}
257 - {id: SCG_SOSCCFG_OSC_MODE_CFG, value: ModeOscLowPower}
258 - {id: SCG_SOSCCFG_RANGE_CFG, value: Medium}
259 - {id: SCG_SOSCCSR_SOSCEN_CFG, value: Enabled}
260 - {id: SCG_SOSCCSR_SOSCLPEN_CFG, value: Enabled}
261 sources:
262 - {id: SCG.SOSC.outFreq, value: 8 MHz, enabled: true}
263 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
264 /* clang-format on */
265
266 /*******************************************************************************
267 * Variables for BOARD_BootClockVLPR configuration
268 ******************************************************************************/
269 const scg_sys_clk_config_t g_sysClkConfig_BOARD_BootClockVLPR =
270 {
271 .divSlow = kSCG_SysClkDivBy4, /* Slow Clock Divider: divided by 4 */
272 .divCore = kSCG_SysClkDivBy2, /* Core Clock Divider: divided by 2 */
273 .src = kSCG_SysClkSrcSysOsc, /* System OSC is selected as System Clock Source */
274 };
275 const scg_sosc_config_t g_scgSysOscConfig_BOARD_BootClockVLPR =
276 {
277 .freq = 8000000U, /* System Oscillator frequency: 8000000Hz */
278 .enableMode = kSCG_SysOscEnable | kSCG_SysOscEnableInLowPower,/* Enable System OSC clock, Enable System OSC in low power mode */
279 .monitorMode = kSCG_SysOscMonitorDisable, /* Monitor disabled */
280 .div2 = kSCG_AsyncClkDivBy1, /* System OSC Clock Divider 2: divided by 1 */
281 .workMode = kSCG_SysOscModeOscLowPower, /* Oscillator low power */
282 };
283 const scg_sirc_config_t g_scgSircConfig_BOARD_BootClockVLPR =
284 {
285 .enableMode = kSCG_SircEnable, /* Enable SIRC clock */
286 .div2 = kSCG_AsyncClkDivBy2, /* Slow IRC Clock Divider 2: divided by 2 */
287 .range = kSCG_SircRangeHigh, /* Slow IRC high range clock (8 MHz) */
288 };
289 const scg_firc_config_t g_scgFircConfig_BOARD_BootClockVLPR =
290 {
291 .enableMode = kSCG_FircEnable, /* Enable FIRC clock */
292 .div2 = kSCG_AsyncClkDivBy1, /* Fast IRC Clock Divider 2: divided by 1 */
293 .range = kSCG_FircRange48M, /* Fast IRC is trimmed to 48MHz */
294 .trimConfig = NULL, /* Fast IRC Trim disabled */
295 };
296 const scg_lpfll_config_t g_scgLpFllConfig_BOARD_BootClockVLPR =
297 {
298 .enableMode = kSCG_LpFllEnable, /* Enable LPFLL clock */
299 .div2 = kSCG_AsyncClkDivBy2, /* Low Power FLL Clock Divider 2: divided by 2 */
300 .range = kSCG_LpFllRange72M, /* LPFLL is trimmed to 72MHz */
301 .trimConfig = NULL,
302 };
303 /*******************************************************************************
304 * Code for BOARD_BootClockVLPR configuration
305 ******************************************************************************/
BOARD_BootClockVLPR(void)306 void BOARD_BootClockVLPR(void)
307 {
308 /* Init SOSC according to board configuration. */
309 CLOCK_InitSysOsc(&g_scgSysOscConfig_BOARD_BootClockVLPR);
310 /* Set the XTAL0 frequency based on board settings. */
311 CLOCK_SetXtal0Freq(g_scgSysOscConfig_BOARD_BootClockVLPR.freq);
312 /* Set SCG to SOSC mode. */
313 CLOCK_SetVlprModeSysClkConfig(&g_sysClkConfig_BOARD_BootClockVLPR);
314 /* Allow SMC all power modes. */
315 SMC_SetPowerModeProtection(SMC, kSMC_AllowPowerModeAll);
316 /* Set VLPR power mode. */
317 SMC_SetPowerModeVlpr(SMC);
318 while (SMC_GetPowerModeState(SMC) != kSMC_PowerStateVlpr)
319 {
320 }
321 /* Set SystemCoreClock variable. */
322 SystemCoreClock = BOARD_BOOTCLOCKVLPR_CORE_CLOCK;
323 }
324
325 /*******************************************************************************
326 ********************* Configuration BOARD_BootClockHSRUN **********************
327 ******************************************************************************/
328 /* clang-format off */
329 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
330 !!Configuration
331 name: BOARD_BootClockHSRUN
332 outputs:
333 - {id: Bus_clock.outFreq, value: 24 MHz}
334 - {id: Core_clock.outFreq, value: 96 MHz}
335 - {id: FIRCDIV2_CLK.outFreq, value: 48 MHz}
336 - {id: FLLDIV2_CLK.outFreq, value: 48 MHz}
337 - {id: Flash_clock.outFreq, value: 24 MHz}
338 - {id: LPO1KCLK.outFreq, value: 1 kHz}
339 - {id: LPO_clock.outFreq, value: 128 kHz}
340 - {id: SIRCDIV2_CLK.outFreq, value: 8 MHz}
341 - {id: SIRC_CLK.outFreq, value: 8 MHz}
342 - {id: SOSCDIV2_CLK.outFreq, value: 8 MHz}
343 - {id: SOSC_CLK.outFreq, value: 8 MHz}
344 - {id: System_clock.outFreq, value: 96 MHz}
345 settings:
346 - {id: SCGMode, value: LPFLL}
347 - {id: powerMode, value: HSRUN}
348 - {id: SCG.DIVCORE.scale, value: '1', locked: true}
349 - {id: SCG.DIVSLOW.scale, value: '4', locked: true}
350 - {id: SCG.FIRCDIV2.scale, value: '1', locked: true}
351 - {id: SCG.LPFLLDIV2.scale, value: '2', locked: true}
352 - {id: SCG.LPFLL_mul.scale, value: '48', locked: true}
353 - {id: SCG.SCSSEL.sel, value: SCG.LPFLL}
354 - {id: SCG.SIRCDIV2.scale, value: '1', locked: true}
355 - {id: SCG.SOSCDIV2.scale, value: '1', locked: true}
356 - {id: SCG.TRIMDIV.scale, value: '24'}
357 - {id: SCG.TRIMSRCSEL.sel, value: SCG.FIRC}
358 - {id: SCG_LPFLLCSR_LPFLLEN_CFG, value: Enabled}
359 - {id: SCG_SOSCCFG_OSC_MODE_CFG, value: ModeOscLowPower}
360 - {id: SCG_SOSCCFG_RANGE_CFG, value: Medium}
361 - {id: SCG_SOSCCSR_SOSCEN_CFG, value: Enabled}
362 - {id: SCG_SOSCCSR_SOSCLPEN_CFG, value: Enabled}
363 sources:
364 - {id: SCG.SOSC.outFreq, value: 8 MHz, enabled: true}
365 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
366 /* clang-format on */
367
368 /*******************************************************************************
369 * Variables for BOARD_BootClockHSRUN configuration
370 ******************************************************************************/
371 const scg_sys_clk_config_t g_sysClkConfig_BOARD_BootClockHSRUN =
372 {
373 .divSlow = kSCG_SysClkDivBy4, /* Slow Clock Divider: divided by 4 */
374 .divCore = kSCG_SysClkDivBy1, /* Core Clock Divider: divided by 1 */
375 .src = kSCG_SysClkSrcLpFll, /* Low power FLL is selected as System Clock Source */
376 };
377 const scg_sosc_config_t g_scgSysOscConfig_BOARD_BootClockHSRUN =
378 {
379 .freq = 8000000U, /* System Oscillator frequency: 8000000Hz */
380 .enableMode = kSCG_SysOscEnable | kSCG_SysOscEnableInLowPower,/* Enable System OSC clock, Enable System OSC in low power mode */
381 .monitorMode = kSCG_SysOscMonitorDisable, /* Monitor disabled */
382 .div2 = kSCG_AsyncClkDivBy1, /* System OSC Clock Divider 2: divided by 1 */
383 .workMode = kSCG_SysOscModeOscLowPower, /* Oscillator low power */
384 };
385 const scg_sirc_config_t g_scgSircConfig_BOARD_BootClockHSRUN =
386 {
387 .enableMode = kSCG_SircEnable | kSCG_SircEnableInLowPower,/* Enable SIRC clock, Enable SIRC in low power mode */
388 .div2 = kSCG_AsyncClkDivBy1, /* Slow IRC Clock Divider 2: divided by 1 */
389 .range = kSCG_SircRangeHigh, /* Slow IRC high range clock (8 MHz) */
390 };
391 const scg_firc_config_t g_scgFircConfig_BOARD_BootClockHSRUN =
392 {
393 .enableMode = kSCG_FircEnable, /* Enable FIRC clock */
394 .div2 = kSCG_AsyncClkDivBy1, /* Fast IRC Clock Divider 2: divided by 1 */
395 .range = kSCG_FircRange48M, /* Fast IRC is trimmed to 48MHz */
396 .trimConfig = NULL, /* Fast IRC Trim disabled */
397 };
398 const scg_lpfll_config_t g_scgLpFllConfig_BOARD_BootClockHSRUN =
399 {
400 .enableMode = kSCG_LpFllEnable, /* Enable LPFLL clock */
401 .div2 = kSCG_AsyncClkDivBy2, /* Low Power FLL Clock Divider 2: divided by 2 */
402 .range = kSCG_LpFllRange96M, /* LPFLL is trimmed to 96MHz */
403 .trimConfig = NULL,
404 };
405 /*******************************************************************************
406 * Code for BOARD_BootClockHSRUN configuration
407 ******************************************************************************/
BOARD_BootClockHSRUN(void)408 void BOARD_BootClockHSRUN(void)
409 {
410 scg_sys_clk_config_t curConfig;
411
412 /* Init SOSC according to board configuration. */
413 CLOCK_InitSysOsc(&g_scgSysOscConfig_BOARD_BootClockHSRUN);
414 /* Set the XTAL0 frequency based on board settings. */
415 CLOCK_SetXtal0Freq(g_scgSysOscConfig_BOARD_BootClockHSRUN.freq);
416 /* Init FIRC. */
417 CLOCK_CONFIG_FircSafeConfig(&g_scgFircConfig_BOARD_BootClockHSRUN);
418 /* Set HSRUN power mode. */
419 SMC_SetPowerModeProtection(SMC, kSMC_AllowPowerModeAll);
420 SMC_SetPowerModeHsrun(SMC);
421 while (SMC_GetPowerModeState(SMC) != kSMC_PowerStateHsrun)
422 {
423 }
424
425 /* Init SIRC. */
426 CLOCK_InitSirc(&g_scgSircConfig_BOARD_BootClockHSRUN);
427 /* Init LPFLL. */
428 CLOCK_InitLpFll(&g_scgLpFllConfig_BOARD_BootClockHSRUN);
429 /* Set SCG to LPFLL mode. */
430 CLOCK_SetHsrunModeSysClkConfig(&g_sysClkConfig_BOARD_BootClockHSRUN);
431 /* Wait for clock source switch finished. */
432 do
433 {
434 CLOCK_GetCurSysClkConfig(&curConfig);
435 } while (curConfig.src != g_sysClkConfig_BOARD_BootClockHSRUN.src);
436 /* Set SystemCoreClock variable. */
437 SystemCoreClock = BOARD_BOOTCLOCKHSRUN_CORE_CLOCK;
438 }
439