aboutsummaryrefslogtreecommitdiff
path: root/lib/chibios-contrib/ext/mcux-sdk/devices/K32L2A31A/project_template/clock_config.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chibios-contrib/ext/mcux-sdk/devices/K32L2A31A/project_template/clock_config.c')
-rw-r--r--lib/chibios-contrib/ext/mcux-sdk/devices/K32L2A31A/project_template/clock_config.c455
1 files changed, 455 insertions, 0 deletions
diff --git a/lib/chibios-contrib/ext/mcux-sdk/devices/K32L2A31A/project_template/clock_config.c b/lib/chibios-contrib/ext/mcux-sdk/devices/K32L2A31A/project_template/clock_config.c
new file mode 100644
index 000000000..34cdf1881
--- /dev/null
+++ b/lib/chibios-contrib/ext/mcux-sdk/devices/K32L2A31A/project_template/clock_config.c
@@ -0,0 +1,455 @@
1/*
2 * Copyright 2019 NXP
3 * All rights reserved.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8/***********************************************************************************************************************
9 * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
10 * will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
11 **********************************************************************************************************************/
12/*
13 * How to setup clock using clock driver functions:
14 *
15 * 1. Call CLOCK_InitXXX() to configure corresponding SCG clock source.
16 * Note: The clock could not be set when it is being used as system clock.
17 * In default out of reset, the CPU is clocked from FIRC(IRC48M),
18 * so before setting FIRC, change to use another avaliable clock source.
19 *
20 * 2. Call CLOCK_SetXtal0Freq() to set XTAL0 frequency based on board settings.
21 *
22 * 3. Call CLOCK_SetXxxModeSysClkConfig() to set SCG mode for Xxx run mode.
23 * Wait until the system clock source is changed to target source.
24 *
25 * 4. If power mode change is needed, call SMC_SetPowerModeProtection() to allow
26 * corresponding power mode and SMC_SetPowerModeXxx() to change to Xxx mode.
27 * Supported run mode and clock restrictions could be found in Reference Manual.
28 */
29
30/* clang-format off */
31/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
32!!GlobalInfo
33product: Clocks v6.0
34processor: K32L2A31xxxxA
35package_id: K32L2A31VLL1A
36mcu_data: ksdk2_0
37processor_version: 0.0.0
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#define SCG_CLKOUTCNFG_SIRC 2U /*!< SCG CLKOUT clock select: Slow IRC */
48#define SCG_SOSC_DISABLE 0U /*!< System OSC disabled */
49#define SCG_SPLL_DISABLE 0U /*!< System PLL disabled */
50#define SCG_SYS_OSC_CAP_0P 0U /*!< Oscillator 0pF capacitor load */
51
52/*******************************************************************************
53 * Variables
54 ******************************************************************************/
55/* System clock frequency. */
56extern uint32_t SystemCoreClock;
57
58/*******************************************************************************
59 * Code
60 ******************************************************************************/
61/*FUNCTION**********************************************************************
62 *
63 * Function Name : CLOCK_CONFIG_SetScgOutSel
64 * Description : Set the SCG clock out select (CLKOUTSEL).
65 * Param setting : The selected clock source.
66 *
67 *END**************************************************************************/
68static void CLOCK_CONFIG_SetScgOutSel(uint8_t setting)
69{
70 SCG->CLKOUTCNFG = SCG_CLKOUTCNFG_CLKOUTSEL(setting);
71}
72
73/*FUNCTION**********************************************************************
74 *
75 * Function Name : CLOCK_CONFIG_FircSafeConfig
76 * Description : This function is used to safely configure FIRC clock.
77 * In default out of reset, the CPU is clocked from FIRC(IRC48M).
78 * Before setting FIRC, change to use SIRC as system clock,
79 * then configure FIRC. After FIRC is set, change back to use FIRC
80 * in case SIRC need to be configured.
81 * Param fircConfig : FIRC configuration.
82 *
83 *END**************************************************************************/
84static void CLOCK_CONFIG_FircSafeConfig(const scg_firc_config_t *fircConfig)
85{
86 scg_sys_clk_config_t curConfig;
87 const scg_sirc_config_t scgSircConfig = {.enableMode = kSCG_SircEnable,
88 .div1 = kSCG_AsyncClkDisable,
89 .div3 = kSCG_AsyncClkDivBy2,
90 .range = kSCG_SircRangeHigh};
91 scg_sys_clk_config_t sysClkSafeConfigSource = {
92 .divSlow = kSCG_SysClkDivBy4, /* Slow clock divider */
93#if FSL_CLOCK_DRIVER_VERSION < MAKE_VERSION(2, 1, 1)
94 .reserved1 = 0,
95 .reserved2 = 0,
96 .reserved3 = 0,
97#endif
98 .divCore = kSCG_SysClkDivBy1, /* Core clock divider */
99#if FSL_CLOCK_DRIVER_VERSION < MAKE_VERSION(2, 1, 1)
100 .reserved4 = 0,
101#endif
102 .src = kSCG_SysClkSrcSirc, /* System clock source */
103#if FSL_CLOCK_DRIVER_VERSION < MAKE_VERSION(2, 1, 1)
104 .reserved5 = 0,
105#endif
106 };
107 /* Init Sirc. */
108 CLOCK_InitSirc(&scgSircConfig);
109 /* Change to use SIRC as system clock source to prepare to change FIRCCFG register. */
110 CLOCK_SetRunModeSysClkConfig(&sysClkSafeConfigSource);
111 /* Wait for clock source switch finished. */
112 do
113 {
114 CLOCK_GetCurSysClkConfig(&curConfig);
115 } while (curConfig.src != sysClkSafeConfigSource.src);
116
117 /* Init Firc. */
118 CLOCK_InitFirc(fircConfig);
119 /* Change back to use FIRC as system clock source in order to configure SIRC if needed. */
120 sysClkSafeConfigSource.src = kSCG_SysClkSrcFirc;
121 CLOCK_SetRunModeSysClkConfig(&sysClkSafeConfigSource);
122 /* Wait for clock source switch finished. */
123 do
124 {
125 CLOCK_GetCurSysClkConfig(&curConfig);
126 } while (curConfig.src != sysClkSafeConfigSource.src);
127}
128
129/*******************************************************************************
130 ************************ BOARD_InitBootClocks function ************************
131 ******************************************************************************/
132void BOARD_InitBootClocks(void)
133{
134 BOARD_BootClockRUN();
135}
136
137/*******************************************************************************
138 ********************** Configuration BOARD_BootClockRUN ***********************
139 ******************************************************************************/
140/* clang-format off */
141/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
142!!Configuration
143name: BOARD_BootClockRUN
144called_from_default_init: true
145outputs:
146- {id: Core_clock.outFreq, value: 48 MHz}
147- {id: LPO_clock.outFreq, value: 1 kHz}
148- {id: SIRC_CLK.outFreq, value: 8 MHz}
149- {id: Slow_clock.outFreq, value: 24 MHz}
150- {id: System_clock.outFreq, value: 48 MHz}
151 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
152/* clang-format on */
153
154/*******************************************************************************
155 * Variables for BOARD_BootClockRUN configuration
156 ******************************************************************************/
157const scg_sys_clk_config_t g_sysClkConfig_BOARD_BootClockRUN = {
158 .divSlow = kSCG_SysClkDivBy2, /* Slow Clock Divider: divided by 2 */
159#if FSL_CLOCK_DRIVER_VERSION < MAKE_VERSION(2, 1, 1)
160 .reserved1 = 0,
161 .reserved2 = 0,
162 .reserved3 = 0,
163#endif
164 .divCore = kSCG_SysClkDivBy1, /* Core Clock Divider: divided by 1 */
165#if FSL_CLOCK_DRIVER_VERSION < MAKE_VERSION(2, 1, 1)
166 .reserved4 = 0,
167#endif
168 .src = kSCG_SysClkSrcFirc, /* Fast IRC is selected as System Clock Source */
169#if FSL_CLOCK_DRIVER_VERSION < MAKE_VERSION(2, 1, 1)
170 .reserved5 = 0,
171#endif
172};
173const scg_sosc_config_t g_scgSysOscConfig_BOARD_BootClockRUN = {
174 .freq = 0U, /* System Oscillator frequency: 0Hz */
175 .enableMode = SCG_SOSC_DISABLE, /* System OSC disabled */
176 .monitorMode = kSCG_SysOscMonitorDisable, /* Monitor disabled */
177 .div1 = kSCG_AsyncClkDisable, /* System OSC Clock Divider 1: Clock output is disabled */
178 .div3 = kSCG_AsyncClkDisable, /* System OSC Clock Divider 3: Clock output is disabled */
179 .capLoad = SCG_SYS_OSC_CAP_0P, /* Oscillator capacity load: 0pF */
180 .workMode = kSCG_SysOscModeExt, /* Use external clock */
181};
182const scg_sirc_config_t g_scgSircConfig_BOARD_BootClockRUN = {
183 .enableMode = kSCG_SircEnable | kSCG_SircEnableInLowPower, /* Enable SIRC clock, Enable SIRC in low power mode */
184 .div1 = kSCG_AsyncClkDisable, /* Slow IRC Clock Divider 1: Clock output is disabled */
185 .div3 = kSCG_AsyncClkDisable, /* Slow IRC Clock Divider 3: Clock output is disabled */
186 .range = kSCG_SircRangeHigh, /* Slow IRC high range clock (8 MHz) */
187};
188const scg_firc_config_t g_scgFircConfig_BOARD_BootClockRUN = {
189 .enableMode = kSCG_FircEnable, /* Enable FIRC clock */
190 .div1 = kSCG_AsyncClkDisable, /* Fast IRC Clock Divider 1: Clock output is disabled */
191 .div3 = kSCG_AsyncClkDisable, /* Fast IRC Clock Divider 3: Clock output is disabled */
192 .range = kSCG_FircRange48M, /* Fast IRC is trimmed to 48MHz */
193 .trimConfig = NULL, /* Fast IRC Trim disabled */
194};
195const scg_spll_config_t g_scgSysPllConfig_BOARD_BootClockRUN = {
196 .enableMode = SCG_SPLL_DISABLE, /* System PLL disabled */
197 .monitorMode = kSCG_SysPllMonitorDisable, /* Monitor disabled */
198 .div1 = kSCG_AsyncClkDisable, /* System PLL Clock Divider 1: Clock output is disabled */
199 .div3 = kSCG_AsyncClkDisable, /* System PLL Clock Divider 3: Clock output is disabled */
200 .src = kSCG_SysPllSrcSysOsc, /* System PLL clock source is System OSC */
201 .prediv = 0, /* Divided by 1 */
202 .mult = 0, /* Multiply Factor is 16 */
203};
204/*******************************************************************************
205 * Code for BOARD_BootClockRUN configuration
206 ******************************************************************************/
207void BOARD_BootClockRUN(void)
208{
209 scg_sys_clk_config_t curConfig;
210
211 /* Init FIRC. */
212 CLOCK_CONFIG_FircSafeConfig(&g_scgFircConfig_BOARD_BootClockRUN);
213 /* Init SIRC. */
214 CLOCK_InitSirc(&g_scgSircConfig_BOARD_BootClockRUN);
215 /* Set SCG to FIRC mode. */
216 CLOCK_SetRunModeSysClkConfig(&g_sysClkConfig_BOARD_BootClockRUN);
217 /* Wait for clock source switch finished. */
218 do
219 {
220 CLOCK_GetCurSysClkConfig(&curConfig);
221 } while (curConfig.src != g_sysClkConfig_BOARD_BootClockRUN.src);
222 /* Set SystemCoreClock variable. */
223 SystemCoreClock = BOARD_BOOTCLOCKRUN_CORE_CLOCK;
224}
225
226/*******************************************************************************
227 ********************* Configuration BOARD_BootClockHSRUN **********************
228 ******************************************************************************/
229/* clang-format off */
230/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
231!!Configuration
232name: BOARD_BootClockHSRUN
233outputs:
234- {id: CLKOUT.outFreq, value: 8 MHz}
235- {id: Core_clock.outFreq, value: 96 MHz, locked: true, accuracy: '0.001'}
236- {id: FIRCDIV1_CLK.outFreq, value: 48 MHz}
237- {id: FIRCDIV3_CLK.outFreq, value: 48 MHz}
238- {id: LPO_clock.outFreq, value: 1 kHz}
239- {id: OSC32KCLK.outFreq, value: 32.768 kHz}
240- {id: PLLDIV1_CLK.outFreq, value: 96 MHz}
241- {id: PLLDIV3_CLK.outFreq, value: 96 MHz}
242- {id: SIRCDIV1_CLK.outFreq, value: 8 MHz}
243- {id: SIRCDIV3_CLK.outFreq, value: 8 MHz}
244- {id: SIRC_CLK.outFreq, value: 8 MHz}
245- {id: SOSCDIV1_CLK.outFreq, value: 32.768 kHz}
246- {id: SOSCDIV3_CLK.outFreq, value: 32.768 kHz}
247- {id: SOSCER_CLK.outFreq, value: 32.768 kHz}
248- {id: SOSC_CLK.outFreq, value: 32.768 kHz}
249- {id: Slow_clock.outFreq, value: 24 MHz, locked: true, accuracy: '0.001'}
250- {id: System_clock.outFreq, value: 96 MHz}
251settings:
252- {id: SCGMode, value: SPLL}
253- {id: powerMode, value: HSRUN}
254- {id: CLKOUTConfig, value: 'yes'}
255- {id: SCG.DIVSLOW.scale, value: '4'}
256- {id: SCG.FIRCDIV1.scale, value: '1', locked: true}
257- {id: SCG.FIRCDIV3.scale, value: '1', locked: true}
258- {id: SCG.PREDIV.scale, value: '4'}
259- {id: SCG.SCSSEL.sel, value: SCG.SPLL_DIV2_CLK}
260- {id: SCG.SIRCDIV1.scale, value: '1', locked: true}
261- {id: SCG.SIRCDIV3.scale, value: '1', locked: true}
262- {id: SCG.SOSCDIV1.scale, value: '1', locked: true}
263- {id: SCG.SOSCDIV3.scale, value: '1', locked: true}
264- {id: SCG.SPLLDIV1.scale, value: '1', locked: true}
265- {id: SCG.SPLLDIV3.scale, value: '1', locked: true}
266- {id: SCG.SPLLSRCSEL.sel, value: SCG.FIRC}
267- {id: SCG_SOSCCFG_OSC_MODE_CFG, value: ModeOscLowPower}
268- {id: SCG_SOSCCSR_SOSCEN_CFG, value: Enabled}
269- {id: SCG_SOSCCSR_SOSCERCLKEN_CFG, value: Enabled}
270- {id: SCG_SPLLCSR_SPLLEN_CFG, value: Enabled}
271sources:
272- {id: SCG.SOSC.outFreq, value: 32.768 kHz, enabled: true}
273 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
274/* clang-format on */
275
276/*******************************************************************************
277 * Variables for BOARD_BootClockHSRUN configuration
278 ******************************************************************************/
279const scg_sys_clk_config_t g_sysClkConfig_BOARD_BootClockHSRUN = {
280 .divSlow = kSCG_SysClkDivBy4, /* Slow Clock Divider: divided by 4 */
281#if FSL_CLOCK_DRIVER_VERSION < MAKE_VERSION(2, 1, 1)
282 .reserved1 = 0,
283 .reserved2 = 0,
284 .reserved3 = 0,
285#endif
286 .divCore = kSCG_SysClkDivBy1, /* Core Clock Divider: divided by 1 */
287#if FSL_CLOCK_DRIVER_VERSION < MAKE_VERSION(2, 1, 1)
288 .reserved4 = 0,
289#endif
290 .src = kSCG_SysClkSrcSysPll, /* System PLL is selected as System Clock Source */
291#if FSL_CLOCK_DRIVER_VERSION < MAKE_VERSION(2, 1, 1)
292 .reserved5 = 0,
293#endif
294};
295const scg_sosc_config_t g_scgSysOscConfig_BOARD_BootClockHSRUN = {
296 .freq = 32768U, /* System Oscillator frequency: 32768Hz */
297 .enableMode = kSCG_SysOscEnable | kSCG_SysOscEnableErClk, /* Enable System OSC clock, Enable OSCERCLK */
298 .monitorMode = kSCG_SysOscMonitorDisable, /* Monitor disabled */
299 .div1 = kSCG_AsyncClkDivBy1, /* System OSC Clock Divider 1: divided by 1 */
300 .div3 = kSCG_AsyncClkDivBy1, /* System OSC Clock Divider 3: divided by 1 */
301 .capLoad = SCG_SYS_OSC_CAP_0P, /* Oscillator capacity load: 0pF */
302 .workMode = kSCG_SysOscModeOscLowPower, /* Oscillator low power */
303};
304const scg_sirc_config_t g_scgSircConfig_BOARD_BootClockHSRUN = {
305 .enableMode = kSCG_SircEnable | kSCG_SircEnableInLowPower, /* Enable SIRC clock, Enable SIRC in low power mode */
306 .div1 = kSCG_AsyncClkDivBy1, /* Slow IRC Clock Divider 1: divided by 1 */
307 .div3 = kSCG_AsyncClkDivBy1, /* Slow IRC Clock Divider 3: divided by 1 */
308 .range = kSCG_SircRangeHigh, /* Slow IRC high range clock (8 MHz) */
309};
310const scg_firc_config_t g_scgFircConfig_BOARD_BootClockHSRUN = {
311 .enableMode = kSCG_FircEnable, /* Enable FIRC clock */
312 .div1 = kSCG_AsyncClkDivBy1, /* Fast IRC Clock Divider 1: divided by 1 */
313 .div3 = kSCG_AsyncClkDivBy1, /* Fast IRC Clock Divider 3: divided by 1 */
314 .range = kSCG_FircRange48M, /* Fast IRC is trimmed to 48MHz */
315 .trimConfig = NULL, /* Fast IRC Trim disabled */
316};
317const scg_spll_config_t g_scgSysPllConfig_BOARD_BootClockHSRUN = {
318 .enableMode = kSCG_SysPllEnable, /* Enable SPLL clock */
319 .monitorMode = kSCG_SysPllMonitorDisable, /* Monitor disabled */
320 .div1 = kSCG_AsyncClkDivBy1, /* System PLL Clock Divider 1: divided by 1 */
321 .div3 = kSCG_AsyncClkDivBy1, /* System PLL Clock Divider 3: divided by 1 */
322 .src = kSCG_SysPllSrcFirc, /* System PLL clock source is Fast IRC */
323 .prediv = 3, /* Divided by 4 */
324 .mult = 0, /* Multiply Factor is 16 */
325};
326/*******************************************************************************
327 * Code for BOARD_BootClockHSRUN configuration
328 ******************************************************************************/
329void BOARD_BootClockHSRUN(void)
330{
331 scg_sys_clk_config_t curConfig;
332
333 /* Init SOSC according to board configuration. */
334 CLOCK_InitSysOsc(&g_scgSysOscConfig_BOARD_BootClockHSRUN);
335 /* Set the XTAL0 frequency based on board settings. */
336 CLOCK_SetXtal0Freq(g_scgSysOscConfig_BOARD_BootClockHSRUN.freq);
337 /* Init FIRC. */
338 CLOCK_CONFIG_FircSafeConfig(&g_scgFircConfig_BOARD_BootClockHSRUN);
339 /* Init SIRC. */
340 CLOCK_InitSirc(&g_scgSircConfig_BOARD_BootClockHSRUN);
341 /* Init SysPll. */
342 CLOCK_InitSysPll(&g_scgSysPllConfig_BOARD_BootClockHSRUN);
343 /* Set HSRUN power mode. */
344 SMC_SetPowerModeProtection(SMC, kSMC_AllowPowerModeAll);
345 SMC_SetPowerModeHsrun(SMC);
346 while (SMC_GetPowerModeState(SMC) != kSMC_PowerStateHsrun)
347 {
348 }
349
350 /* Set SCG to SPLL mode. */
351 CLOCK_SetHsrunModeSysClkConfig(&g_sysClkConfig_BOARD_BootClockHSRUN);
352 /* Wait for clock source switch finished. */
353 do
354 {
355 CLOCK_GetCurSysClkConfig(&curConfig);
356 } while (curConfig.src != g_sysClkConfig_BOARD_BootClockHSRUN.src);
357 /* Set SystemCoreClock variable. */
358 SystemCoreClock = BOARD_BOOTCLOCKHSRUN_CORE_CLOCK;
359 /* Set SCG CLKOUT selection. */
360 CLOCK_CONFIG_SetScgOutSel(SCG_CLKOUTCNFG_SIRC);
361}
362
363/*******************************************************************************
364 ********************* Configuration BOARD_BootClockVLPR ***********************
365 ******************************************************************************/
366/* clang-format off */
367/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
368!!Configuration
369name: BOARD_BootClockVLPR
370outputs:
371- {id: Core_clock.outFreq, value: 8 MHz, locked: true, accuracy: '0.001'}
372- {id: LPO_clock.outFreq, value: 1 kHz}
373- {id: SIRC_CLK.outFreq, value: 8 MHz}
374- {id: Slow_clock.outFreq, value: 1 MHz, locked: true, accuracy: '0.001'}
375- {id: System_clock.outFreq, value: 8 MHz}
376settings:
377- {id: SCGMode, value: SIRC}
378- {id: powerMode, value: VLPR}
379- {id: SCG.DIVSLOW.scale, value: '8'}
380- {id: SCG.SCSSEL.sel, value: SCG.SIRC}
381- {id: SCG_FIRCCSR_FIRCLPEN_CFG, value: Enabled}
382sources:
383- {id: SCG.SOSC.outFreq, value: 32.768 kHz, enabled: true}
384 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
385/* clang-format on */
386
387/*******************************************************************************
388 * Variables for BOARD_BootClockVLPR configuration
389 ******************************************************************************/
390const scg_sys_clk_config_t g_sysClkConfig_BOARD_BootClockVLPR = {
391 .divSlow = kSCG_SysClkDivBy8, /* Slow Clock Divider: divided by 8 */
392#if FSL_CLOCK_DRIVER_VERSION < MAKE_VERSION(2, 1, 1)
393 .reserved1 = 0,
394 .reserved2 = 0,
395 .reserved3 = 0,
396#endif
397 .divCore = kSCG_SysClkDivBy1, /* Core Clock Divider: divided by 1 */
398#if FSL_CLOCK_DRIVER_VERSION < MAKE_VERSION(2, 1, 1)
399 .reserved4 = 0,
400#endif
401 .src = kSCG_SysClkSrcSirc, /* Slow IRC is selected as System Clock Source */
402#if FSL_CLOCK_DRIVER_VERSION < MAKE_VERSION(2, 1, 1)
403 .reserved5 = 0,
404#endif
405};
406const scg_sosc_config_t g_scgSysOscConfig_BOARD_BootClockVLPR = {
407 .freq = 0U, /* System Oscillator frequency: 0Hz */
408 .enableMode = SCG_SOSC_DISABLE, /* System OSC disabled */
409 .monitorMode = kSCG_SysOscMonitorDisable, /* Monitor disabled */
410 .div1 = kSCG_AsyncClkDisable, /* System OSC Clock Divider 1: Clock output is disabled */
411 .div3 = kSCG_AsyncClkDisable, /* System OSC Clock Divider 3: Clock output is disabled */
412 .capLoad = SCG_SYS_OSC_CAP_0P, /* Oscillator capacity load: 0pF */
413 .workMode = kSCG_SysOscModeExt, /* Use external clock */
414};
415const scg_sirc_config_t g_scgSircConfig_BOARD_BootClockVLPR = {
416 .enableMode = kSCG_SircEnable | kSCG_SircEnableInLowPower, /* Enable SIRC clock, Enable SIRC in low power mode */
417 .div1 = kSCG_AsyncClkDisable, /* Slow IRC Clock Divider 1: Clock output is disabled */
418 .div3 = kSCG_AsyncClkDisable, /* Slow IRC Clock Divider 3: Clock output is disabled */
419 .range = kSCG_SircRangeHigh, /* Slow IRC high range clock (8 MHz) */
420};
421const scg_firc_config_t g_scgFircConfig_BOARD_BootClockVLPR = {
422 .enableMode = kSCG_FircEnable | kSCG_FircEnableInLowPower, /* Enable FIRC clock, Enable FIRC in low power mode */
423 .div1 = kSCG_AsyncClkDisable, /* Fast IRC Clock Divider 1: Clock output is disabled */
424 .div3 = kSCG_AsyncClkDisable, /* Fast IRC Clock Divider 3: Clock output is disabled */
425 .range = kSCG_FircRange48M, /* Fast IRC is trimmed to 48MHz */
426 .trimConfig = NULL, /* Fast IRC Trim disabled */
427};
428const scg_spll_config_t g_scgSysPllConfig_BOARD_BootClockVLPR = {
429 .enableMode = SCG_SPLL_DISABLE, /* System PLL disabled */
430 .monitorMode = kSCG_SysPllMonitorDisable, /* Monitor disabled */
431 .div1 = kSCG_AsyncClkDisable, /* System PLL Clock Divider 1: Clock output is disabled */
432 .div3 = kSCG_AsyncClkDisable, /* System PLL Clock Divider 3: Clock output is disabled */
433 .src = kSCG_SysPllSrcSysOsc, /* System PLL clock source is System OSC */
434 .prediv = 0, /* Divided by 1 */
435 .mult = 0, /* Multiply Factor is 16 */
436};
437/*******************************************************************************
438 * Code for BOARD_BootClockVLPR configuration
439 ******************************************************************************/
440void BOARD_BootClockVLPR(void)
441{
442 /* Init FIRC. */
443 CLOCK_CONFIG_FircSafeConfig(&g_scgFircConfig_BOARD_BootClockVLPR);
444 /* Init SIRC. */
445 CLOCK_InitSirc(&g_scgSircConfig_BOARD_BootClockVLPR);
446 /* Allow SMC all power modes. */
447 SMC_SetPowerModeProtection(SMC, kSMC_AllowPowerModeAll);
448 /* Set VLPR power mode. */
449 SMC_SetPowerModeVlpr(SMC);
450 while (SMC_GetPowerModeState(SMC) != kSMC_PowerStateVlpr)
451 {
452 }
453 /* Set SystemCoreClock variable. */
454 SystemCoreClock = BOARD_BOOTCLOCKVLPR_CORE_CLOCK;
455}