aboutsummaryrefslogtreecommitdiff
path: root/lib/chibios-contrib/ext/mcux-sdk/devices/MIMXRT685S/project_template/clock_config.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chibios-contrib/ext/mcux-sdk/devices/MIMXRT685S/project_template/clock_config.c')
-rw-r--r--lib/chibios-contrib/ext/mcux-sdk/devices/MIMXRT685S/project_template/clock_config.c199
1 files changed, 199 insertions, 0 deletions
diff --git a/lib/chibios-contrib/ext/mcux-sdk/devices/MIMXRT685S/project_template/clock_config.c b/lib/chibios-contrib/ext/mcux-sdk/devices/MIMXRT685S/project_template/clock_config.c
new file mode 100644
index 000000000..e867c3b88
--- /dev/null
+++ b/lib/chibios-contrib/ext/mcux-sdk/devices/MIMXRT685S/project_template/clock_config.c
@@ -0,0 +1,199 @@
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
24product: Clocks v7.0
25processor: MIMXRT685S
26package_id: MIMXRT685SFVKB
27mcu_data: ksdk2_0
28processor_version: 0.0.2
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. */
44extern uint32_t SystemCoreClock;
45
46/*FUNCTION**********************************************************************
47 *
48 * Function Name : BOARD_FlexspiClockSafeConfig
49 * Description : FLEXSPI 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 FLEXSPI clock source to stable source when executing
52 * code on FLEXSPI memory(XIP). If XIP, the function should runs in RAM and move the FLEXSPI clock
53 *source to an stable clock to avoid instruction/data fetch issue during clock updating.
54 *END**************************************************************************/
55__attribute__((weak)) void BOARD_FlexspiClockSafeConfig(void)
56{
57}
58
59/*FUNCTION**********************************************************************
60 *
61 * Function Name : BOARD_SetFlexspiClock
62 * Description : This function should be overridden if executing code on FLEXSPI memory(XIP).
63 * To Change FLEXSPI clock, should move to run from RAM and then configure FLEXSPI clock source.
64 * After the clock is changed and stable, move back to run on FLEXSPI.
65 * Param src : FLEXSPI clock source.
66 * Param divider : FLEXSPI clock divider.
67 *END**************************************************************************/
68__attribute__((weak)) void BOARD_SetFlexspiClock(uint32_t src, uint32_t divider)
69{
70 CLKCTL0->FLEXSPIFCLKSEL = CLKCTL0_FLEXSPIFCLKSEL_SEL(src);
71 CLKCTL0->FLEXSPIFCLKDIV |= CLKCTL0_FLEXSPIFCLKDIV_RESET_MASK; /* Reset the divider counter */
72 CLKCTL0->FLEXSPIFCLKDIV = CLKCTL0_FLEXSPIFCLKDIV_DIV(divider - 1);
73 while ((CLKCTL0->FLEXSPIFCLKDIV) & CLKCTL0_FLEXSPIFCLKDIV_REQFLAG_MASK)
74 {
75 }
76}
77
78/*******************************************************************************
79 ************************ BOARD_InitBootClocks function ************************
80 ******************************************************************************/
81void BOARD_InitBootClocks(void)
82{
83 BOARD_BootClockRUN();
84}
85
86/*******************************************************************************
87 ********************** Configuration BOARD_BootClockRUN ***********************
88 ******************************************************************************/
89/* clang-format off */
90/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
91!!Configuration
92name: BOARD_BootClockRUN
93called_from_default_init: true
94outputs:
95- {id: FLEXSPI_clock.outFreq, value: 1900.8/19 MHz}
96- {id: LPOSC1M_clock.outFreq, value: 1 MHz}
97- {id: OSTIMER_clock.outFreq, value: 1 MHz}
98- {id: System_clock.outFreq, value: 4752/19 MHz}
99- {id: WAKE_32K_clock.outFreq, value: 31.25 kHz}
100settings:
101- {id: AUDIOPLL0_PFD0_CLK_GATE, value: Enabled}
102- {id: PLL0_PFD0_CLK_GATE, value: Enabled}
103- {id: PLL0_PFD2_CLK_GATE, value: Enabled}
104- {id: SYSCON.AUDIOPLL0CLKSEL.sel, value: SYSCON.SYSOSCBYPASS}
105- {id: SYSCON.AUDIOPLL0_PFD0_DIV.scale, value: '26', locked: true}
106- {id: SYSCON.AUDIOPLLCLKDIV.scale, value: '15', locked: true}
107- {id: SYSCON.AUDIO_PLL0_PFD0_MUL.scale, value: '18', locked: true}
108- {id: SYSCON.FLEXSPIFCLKDIV.scale, value: '5', locked: true}
109- {id: SYSCON.FLEXSPIFCLKSEL.sel, value: SYSCON.MAINPLLCLKDIV}
110- {id: SYSCON.FRGPLLCLKDIV.scale, value: '12', locked: true}
111- {id: SYSCON.MAINCLKSELB.sel, value: SYSCON.MAINPLLCLKDIV}
112- {id: SYSCON.PLL0.denom, value: '1'}
113- {id: SYSCON.PLL0.div, value: '22', locked: true}
114- {id: SYSCON.PLL0.num, value: '0'}
115- {id: SYSCON.PLL0_PFD0_DIV.scale, value: '19', locked: true}
116- {id: SYSCON.PLL0_PFD0_MUL.scale, value: '18', locked: true}
117- {id: SYSCON.PLL0_PFD2_DIV.scale, value: '24', locked: true}
118- {id: SYSCON.PLL0_PFD2_MUL.scale, value: '18', locked: true}
119- {id: SYSCON.PLL1.denom, value: '27000', locked: true}
120- {id: SYSCON.PLL1.div, value: '22'}
121- {id: SYSCON.PLL1.num, value: '5040', locked: true}
122- {id: SYSCON.SYSCPUAHBCLKDIV.scale, value: '2'}
123- {id: SYSCON.SYSPLL0CLKSEL.sel, value: SYSCON.SYSOSCBYPASS}
124- {id: SYSCON.SYSTICKFCLKSEL.sel, value: SYSCON.SYSTICKFCLKDIV}
125- {id: SYSCTL_PDRUNCFG_AUDIOPLL_CFG, value: 'No'}
126- {id: SYSCTL_PDRUNCFG_SYSPLL_CFG, value: 'No'}
127- {id: SYSCTL_PDRUNCFG_SYSXTAL_CFG, value: Power_up}
128- {id: XTAL_LP_Enable, value: LowPowerMode}
129sources:
130- {id: SYSCON.XTAL.outFreq, value: 24 MHz, enabled: true}
131 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
132/* clang-format on */
133
134/*******************************************************************************
135 * Variables for BOARD_BootClockRUN configuration
136 ******************************************************************************/
137const clock_sys_pll_config_t g_sysPllConfig_BOARD_BootClockRUN = {
138 .sys_pll_src = kCLOCK_SysPllXtalIn, /* OSC clock */
139 .numerator = 0, /* Numerator of the SYSPLL0 fractional loop divider isnull */
140 .denominator = 1, /* Denominator of the SYSPLL0 fractional loop divider isnull */
141 .sys_pll_mult = kCLOCK_SysPllMult22 /* Divide by 22 */
142};
143const clock_audio_pll_config_t g_audioPllConfig_BOARD_BootClockRUN = {
144 .audio_pll_src = kCLOCK_AudioPllXtalIn, /* OSC clock */
145 .numerator = 5040, /* Numerator of the SYSPLL0 fractional loop divider isnull */
146 .denominator = 27000, /* Denominator of the SYSPLL0 fractional loop divider isnull */
147 .audio_pll_mult = kCLOCK_AudioPllMult22 /* Divide by 22 */
148};
149/*******************************************************************************
150 * Code for BOARD_BootClockRUN configuration
151 ******************************************************************************/
152void BOARD_BootClockRUN(void)
153{
154 /* Configure LPOSC clock*/
155 POWER_DisablePD(kPDRUNCFG_PD_LPOSC); /* Power on LPOSC (1MHz) */
156 /* Configure FFRO clock */
157 POWER_DisablePD(kPDRUNCFG_PD_FFRO); /* Power on FFRO (48/60MHz) */
158 CLOCK_EnableFfroClk(kCLOCK_Ffro48M); /* Enable FFRO clock*/
159 /* Configure SFRO clock */
160 POWER_DisablePD(kPDRUNCFG_PD_SFRO); /* Power on SFRO (16MHz) */
161 CLOCK_EnableSfroClk(); /* Wait until SFRO stable */
162
163 /* Call function BOARD_FlexspiClockSafeConfig() to move FLEXSPI clock to a stable clock source to avoid
164 instruction/data fetch issue when updating PLL and Main clock if XIP(execute code on FLEXSPI memory). */
165 BOARD_FlexspiClockSafeConfig();
166
167 /* Let CPU run on ffro for safe switching */
168 CLOCK_AttachClk(kFFRO_to_MAIN_CLK);
169
170 /* Configure SYSOSC clock source */
171 POWER_DisablePD(kPDRUNCFG_PD_SYSXTAL); /* Power on SYSXTAL */
172 POWER_UpdateOscSettlingTime(BOARD_SYSOSC_SETTLING_US); /* Updated XTAL oscillator settling time */
173 CLOCK_EnableSysOscClk(true, true, BOARD_SYSOSC_SETTLING_US); /* Enable system OSC */
174 CLOCK_SetXtalFreq(BOARD_XTAL_SYS_CLK_HZ); /* Sets external XTAL OSC freq */
175
176 /* Configure SysPLL0 clock source */
177 CLOCK_InitSysPll(&g_sysPllConfig_BOARD_BootClockRUN);
178 CLOCK_InitSysPfd(kCLOCK_Pfd0, 19); /* Enable MAIN PLL clock */
179 CLOCK_InitSysPfd(kCLOCK_Pfd2, 24); /* Enable AUX0 PLL clock */
180
181 /* Configure Audio PLL clock source */
182 CLOCK_InitAudioPll(&g_audioPllConfig_BOARD_BootClockRUN);
183 CLOCK_InitAudioPfd(kCLOCK_Pfd0, 26); /* Enable Audio PLL clock */
184
185 CLOCK_SetClkDiv(kCLOCK_DivSysCpuAhbClk, 2U); /* Set SYSCPUAHBCLKDIV divider to value 2 */
186
187 /* Set up clock selectors - Attach clocks to the peripheries */
188 CLOCK_AttachClk(kMAIN_PLL_to_MAIN_CLK); /* Switch MAIN_CLK to MAIN_PLL */
189
190 /* Set up dividers */
191 CLOCK_SetClkDiv(kCLOCK_DivAudioPllClk, 15U); /* Set AUDIOPLLCLKDIV divider to value 15 */
192 CLOCK_SetClkDiv(kCLOCK_DivPllFrgClk, 12U); /* Set FRGPLLCLKDIV divider to value 12 */
193
194 /* Call weak function BOARD_SetFlexspiClock() to set user configured clock source/divider for FLEXSPI. */
195 BOARD_SetFlexspiClock(1U, 5U);
196
197 /*< Set SystemCoreClock variable. */
198 SystemCoreClock = BOARD_BOOTCLOCKRUN_CORE_CLOCK;
199}