1 /*
2 * Copyright 2023 NXP
3 * All rights reserved.
4 *
5 *
6 * SPDX-License-Identifier: BSD-3-Clause
7 */
8
9 /*
10 * How to set up clock using clock driver functions:
11 *
12 * 1. Setup clock sources.
13 *
14 * 2. Set up all dividers.
15 *
16 * 3. Set up all selectors to provide selected clocks.
17 */
18
19 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
20 !!GlobalInfo
21 product: Clocks v9.0
22 processor: LPC865
23 package_id: LPC865M201JBD64
24 mcu_data: ksdk2_0
25 processor_version: 0.0.0
26 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
27
28 #include "fsl_power.h"
29 #include "fsl_clock.h"
30 #include "clock_config.h"
31
32 /*******************************************************************************
33 * Definitions
34 ******************************************************************************/
35
36 /*******************************************************************************
37 * Variables
38 ******************************************************************************/
39 /* System clock frequency. */
40 extern uint32_t SystemCoreClock;
41
42 /*******************************************************************************
43 ************************ BOARD_InitBootClocks function ************************
44 ******************************************************************************/
BOARD_InitBootClocks(void)45 void BOARD_InitBootClocks(void)
46 {
47 BOARD_BootClockFRO60M();
48 }
49
50 /*******************************************************************************
51 ******************** Configuration BOARD_BootClockFRO18M **********************
52 ******************************************************************************/
53 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
54 !!Configuration
55 name: BOARD_BootClockFRO18M
56 outputs:
57 - {id: FROHF_clock.outFreq, value: 36 MHz}
58 - {id: System_clock.outFreq, value: 18 MHz}
59 - {id: WKT_clock.outFreq, value: 18 MHz}
60 settings:
61 - {id: SYSCON.ADCCLKSEL.sel, value: NO_CLOCK}
62 - {id: SYSCON.CLKOUTSEL.sel, value: NO_CLOCK}
63 - {id: SYSCON.FRG0CLKSEL.sel, value: NO_CLOCK}
64 - {id: SYSCON.FRG1CLKSEL.sel, value: NO_CLOCK}
65 sources:
66 - {id: SYSCON.fro_osc.outFreq, value: 36 MHz}
67 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
68
69 /*******************************************************************************
70 * Variables for BOARD_BootClockFRO18M configuration
71 ******************************************************************************/
72 /*******************************************************************************
73 * Code for BOARD_BootClockFRO18M configuration
74 ******************************************************************************/
BOARD_BootClockFRO18M(void)75 void BOARD_BootClockFRO18M(void)
76 {
77 /*!< Set up the clock sources */
78 /*!< Set up FRO */
79 POWER_DisablePD(kPDRUNCFG_PD_FRO_OUT); /*!< Ensure FRO is on */
80 POWER_DisablePD(kPDRUNCFG_PD_FRO); /*!< Ensure FRO is on */
81 CLOCK_SetFroOscFreq(kCLOCK_FroOscOut36M); /*!< Set up FRO freq */
82 CLOCK_SetFroOutClkSrc(kCLOCK_FroSrcFroOscDiv); /*!< Set FRO clock source */
83 CLOCK_SetMainClkSrc(kCLOCK_MainClkSrcFro); /*!< select fro for main clock */
84 CLOCK_Select(kWKT_Clk_From_Fro); /*!< select FRO for WKT */
85 CLOCK_SetCoreSysClkDiv(1U);
86 /*!< Set SystemCoreClock variable. */
87 SystemCoreClock = BOARD_BOOTCLOCKFRO18M_CORE_CLOCK;
88 }
89
90 /*******************************************************************************
91 ******************** Configuration BOARD_BootClockFRO24M **********************
92 ******************************************************************************/
93 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
94 !!Configuration
95 name: BOARD_BootClockFRO24M
96 outputs:
97 - {id: FROHF_clock.outFreq, value: 48 MHz}
98 - {id: System_clock.outFreq, value: 24 MHz}
99 - {id: WKT_clock.outFreq, value: 24 MHz}
100 settings:
101 - {id: SYSCON.ADCCLKSEL.sel, value: NO_CLOCK}
102 - {id: SYSCON.CLKOUTSEL.sel, value: NO_CLOCK}
103 - {id: SYSCON.FRG0CLKSEL.sel, value: NO_CLOCK}
104 - {id: SYSCON.FRG1CLKSEL.sel, value: NO_CLOCK}
105 sources:
106 - {id: SYSCON.fro_osc.outFreq, value: 48 MHz}
107 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
108
109 /*******************************************************************************
110 * Variables for BOARD_BootClockFRO24M configuration
111 ******************************************************************************/
112 /*******************************************************************************
113 * Code for BOARD_BootClockFRO24M configuration
114 ******************************************************************************/
BOARD_BootClockFRO24M(void)115 void BOARD_BootClockFRO24M(void)
116 {
117 /*!< Set up the clock sources */
118 /*!< Set up FRO */
119 POWER_DisablePD(kPDRUNCFG_PD_FRO_OUT); /*!< Ensure FRO is on */
120 POWER_DisablePD(kPDRUNCFG_PD_FRO); /*!< Ensure FRO is on */
121 CLOCK_SetFroOscFreq(kCLOCK_FroOscOut48M); /*!< Set up FRO freq */
122 CLOCK_SetFroOutClkSrc(kCLOCK_FroSrcFroOscDiv); /*!< Set FRO clock source */
123 CLOCK_SetMainClkSrc(kCLOCK_MainClkSrcFro); /*!< select fro for main clock */
124 CLOCK_Select(kWKT_Clk_From_Fro); /*!< select FRO for WKT */
125 CLOCK_SetCoreSysClkDiv(1U);
126 /*!< Set SystemCoreClock variable. */
127 SystemCoreClock = BOARD_BOOTCLOCKFRO24M_CORE_CLOCK;
128 }
129
130 /*******************************************************************************
131 ******************** Configuration BOARD_BootClockFRO30M **********************
132 ******************************************************************************/
133 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
134 !!Configuration
135 name: BOARD_BootClockFRO30M
136 outputs:
137 - {id: FROHF_clock.outFreq, value: 60 MHz}
138 - {id: System_clock.outFreq, value: 30 MHz}
139 - {id: WKT_clock.outFreq, value: 30 MHz}
140 settings:
141 - {id: SYSCON.ADCCLKSEL.sel, value: NO_CLOCK}
142 - {id: SYSCON.CLKOUTSEL.sel, value: NO_CLOCK}
143 - {id: SYSCON.FRG0CLKSEL.sel, value: NO_CLOCK}
144 - {id: SYSCON.FRG1CLKSEL.sel, value: NO_CLOCK}
145 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
146
147 /*******************************************************************************
148 * Variables for BOARD_BootClockFRO30M configuration
149 ******************************************************************************/
150 /*******************************************************************************
151 * Code for BOARD_BootClockFRO30M configuration
152 ******************************************************************************/
BOARD_BootClockFRO30M(void)153 void BOARD_BootClockFRO30M(void)
154 {
155 /*!< Set up the clock sources */
156 /*!< Set up FRO */
157 POWER_DisablePD(kPDRUNCFG_PD_FRO_OUT); /*!< Ensure FRO is on */
158 POWER_DisablePD(kPDRUNCFG_PD_FRO); /*!< Ensure FRO is on */
159 CLOCK_SetFroOscFreq(kCLOCK_FroOscOut60M); /*!< Set up FRO freq */
160 CLOCK_SetFroOutClkSrc(kCLOCK_FroSrcFroOscDiv); /*!< Set FRO clock source */
161 CLOCK_SetMainClkSrc(kCLOCK_MainClkSrcFro); /*!< select fro for main clock */
162 CLOCK_Select(kWKT_Clk_From_Fro); /*!< select FRO for WKT */
163 CLOCK_SetCoreSysClkDiv(1U);
164 /*!< Set SystemCoreClock variable. */
165 SystemCoreClock = BOARD_BOOTCLOCKFRO30M_CORE_CLOCK;
166 }
167
168 /*******************************************************************************
169 ******************** Configuration BOARD_BootClockFRO36M **********************
170 ******************************************************************************/
171 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
172 !!Configuration
173 name: BOARD_BootClockFRO36M
174 outputs:
175 - {id: FROHF_clock.outFreq, value: 36 MHz}
176 - {id: System_clock.outFreq, value: 36 MHz}
177 - {id: WKT_clock.outFreq, value: 36 MHz}
178 settings:
179 - {id: SYSCON.ADCCLKSEL.sel, value: NO_CLOCK}
180 - {id: SYSCON.CLKOUTSEL.sel, value: NO_CLOCK}
181 - {id: SYSCON.FRG0CLKSEL.sel, value: NO_CLOCK}
182 - {id: SYSCON.FRG1CLKSEL.sel, value: NO_CLOCK}
183 - {id: SYSCON.FRO_DIRECT.sel, value: SYSCON.fro_osc}
184 sources:
185 - {id: SYSCON.fro_osc.outFreq, value: 36 MHz}
186 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
187
188 /*******************************************************************************
189 * Variables for BOARD_BootClockFRO36M configuration
190 ******************************************************************************/
191 /*******************************************************************************
192 * Code for BOARD_BootClockFRO36M configuration
193 ******************************************************************************/
BOARD_BootClockFRO36M(void)194 void BOARD_BootClockFRO36M(void)
195 {
196 /*!< Set up the clock sources */
197 /*!< Set up FRO */
198 POWER_DisablePD(kPDRUNCFG_PD_FRO_OUT); /*!< Ensure FRO is on */
199 POWER_DisablePD(kPDRUNCFG_PD_FRO); /*!< Ensure FRO is on */
200 CLOCK_SetFroOscFreq(kCLOCK_FroOscOut36M); /*!< Set up FRO freq */
201 CLOCK_SetFroOutClkSrc(kCLOCK_FroSrcFroOsc); /*!< Set FRO clock source */
202 CLOCK_SetMainClkSrc(kCLOCK_MainClkSrcFro); /*!< select fro for main clock */
203 CLOCK_Select(kWKT_Clk_From_Fro); /*!< select FRO for WKT */
204 CLOCK_SetCoreSysClkDiv(1U);
205 /*!< Set SystemCoreClock variable. */
206 SystemCoreClock = BOARD_BOOTCLOCKFRO36M_CORE_CLOCK;
207 }
208
209 /*******************************************************************************
210 ******************** Configuration BOARD_BootClockFRO48M **********************
211 ******************************************************************************/
212 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
213 !!Configuration
214 name: BOARD_BootClockFRO48M
215 outputs:
216 - {id: FROHF_clock.outFreq, value: 48 MHz}
217 - {id: System_clock.outFreq, value: 48 MHz}
218 - {id: WKT_clock.outFreq, value: 48 MHz}
219 settings:
220 - {id: SYSCON.ADCCLKSEL.sel, value: NO_CLOCK}
221 - {id: SYSCON.CLKOUTSEL.sel, value: NO_CLOCK}
222 - {id: SYSCON.FRG0CLKSEL.sel, value: NO_CLOCK}
223 - {id: SYSCON.FRG1CLKSEL.sel, value: NO_CLOCK}
224 - {id: SYSCON.FRO_DIRECT.sel, value: SYSCON.fro_osc}
225 sources:
226 - {id: SYSCON.fro_osc.outFreq, value: 48 MHz}
227 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
228
229 /*******************************************************************************
230 * Variables for BOARD_BootClockFRO48M configuration
231 ******************************************************************************/
232 /*******************************************************************************
233 * Code for BOARD_BootClockFRO48M configuration
234 ******************************************************************************/
BOARD_BootClockFRO48M(void)235 void BOARD_BootClockFRO48M(void)
236 {
237 /*!< Set up the clock sources */
238 /*!< Set up FRO */
239 POWER_DisablePD(kPDRUNCFG_PD_FRO_OUT); /*!< Ensure FRO is on */
240 POWER_DisablePD(kPDRUNCFG_PD_FRO); /*!< Ensure FRO is on */
241 CLOCK_SetFroOscFreq(kCLOCK_FroOscOut48M); /*!< Set up FRO freq */
242 CLOCK_SetFroOutClkSrc(kCLOCK_FroSrcFroOsc); /*!< Set FRO clock source */
243 CLOCK_SetMainClkSrc(kCLOCK_MainClkSrcFro); /*!< select fro for main clock */
244 CLOCK_Select(kWKT_Clk_From_Fro); /*!< select FRO for WKT */
245 CLOCK_SetCoreSysClkDiv(1U);
246 /*!< Set SystemCoreClock variable. */
247 SystemCoreClock = BOARD_BOOTCLOCKFRO48M_CORE_CLOCK;
248 }
249
250 /*******************************************************************************
251 ******************** Configuration BOARD_BootClockFRO60M **********************
252 ******************************************************************************/
253 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
254 !!Configuration
255 name: BOARD_BootClockFRO60M
256 called_from_default_init: true
257 outputs:
258 - {id: FROHF_clock.outFreq, value: 60 MHz}
259 - {id: System_clock.outFreq, value: 60 MHz}
260 - {id: WKT_clock.outFreq, value: 60 MHz}
261 settings:
262 - {id: SYSCON.ADCCLKSEL.sel, value: NO_CLOCK}
263 - {id: SYSCON.CLKOUTSEL.sel, value: NO_CLOCK}
264 - {id: SYSCON.FRG0CLKSEL.sel, value: NO_CLOCK}
265 - {id: SYSCON.FRG0_DIV.scale, value: '320'}
266 - {id: SYSCON.FRG1CLKSEL.sel, value: NO_CLOCK}
267 - {id: SYSCON.FRG1_DIV.scale, value: '320'}
268 - {id: SYSCON.FRO_DIRECT.sel, value: SYSCON.fro_osc}
269 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
270
271 /*******************************************************************************
272 * Variables for BOARD_BootClockFRO60M configuration
273 ******************************************************************************/
274 /*******************************************************************************
275 * Code for BOARD_BootClockFRO60M configuration
276 ******************************************************************************/
BOARD_BootClockFRO60M(void)277 void BOARD_BootClockFRO60M(void)
278 {
279 /*!< Set up the clock sources */
280 /*!< Set up FRO */
281 POWER_DisablePD(kPDRUNCFG_PD_FRO_OUT); /*!< Ensure FRO is on */
282 POWER_DisablePD(kPDRUNCFG_PD_FRO); /*!< Ensure FRO is on */
283 CLOCK_SetFroOscFreq(kCLOCK_FroOscOut60M); /*!< Set up FRO freq */
284 CLOCK_SetFroOutClkSrc(kCLOCK_FroSrcFroOsc); /*!< Set FRO clock source */
285 CLOCK_SetMainClkSrc(kCLOCK_MainClkSrcFro); /*!< select fro for main clock */
286 CLOCK_Select(kWKT_Clk_From_Fro); /*!< select FRO for WKT */
287 CLOCK_SetCoreSysClkDiv(1U);
288 /*!< Set SystemCoreClock variable. */
289 SystemCoreClock = BOARD_BOOTCLOCKFRO60M_CORE_CLOCK;
290 }
291
292 /*******************************************************************************
293 ******************** Configuration BOARD_BootClockPll48M **********************
294 ******************************************************************************/
295 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
296 !!Configuration
297 name: BOARD_BootClockPll48M
298 outputs:
299 - {id: FROHF_clock.outFreq, value: 48 MHz}
300 - {id: SYSPLL_clock.outFreq, value: 48 MHz}
301 - {id: System_clock.outFreq, value: 48 MHz}
302 - {id: WKT_clock.outFreq, value: 24 MHz}
303 settings:
304 - {id: SYSCON.ADCCLKSEL.sel, value: NO_CLOCK}
305 - {id: SYSCON.CLKOUTSEL.sel, value: NO_CLOCK}
306 - {id: SYSCON.FRG0CLKSEL.sel, value: NO_CLOCK}
307 - {id: SYSCON.FRG1CLKSEL.sel, value: NO_CLOCK}
308 - {id: SYSCON.MAINCLKPLLSEL.sel, value: SYSCON.PLL}
309 - {id: SYSCON.M_MULT.scale, value: '2', locked: true}
310 - {id: SYSCON.N_DIV.scale, value: '1', locked: true}
311 - {id: SYSCON_PDRUNCFG0_PDEN_PLL_CFG, value: Power_up}
312 sources:
313 - {id: SYSCON.fro_osc.outFreq, value: 48 MHz}
314 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
315
316 /*******************************************************************************
317 * Variables for BOARD_BootClockPll48M configuration
318 ******************************************************************************/
319 /*******************************************************************************
320 * Code for BOARD_BootClockPll48M configuration
321 ******************************************************************************/
BOARD_BootClockPll48M(void)322 void BOARD_BootClockPll48M(void)
323 {
324 /*!< Set up the clock sources */
325 /*!< Set up FRO */
326 POWER_DisablePD(kPDRUNCFG_PD_FRO_OUT); /*!< Ensure FRO is on */
327 POWER_DisablePD(kPDRUNCFG_PD_FRO); /*!< Ensure FRO is on */
328 CLOCK_SetFroOscFreq(kCLOCK_FroOscOut48M); /*!< Set up FRO freq */
329 CLOCK_SetFroOutClkSrc(kCLOCK_FroSrcFroOscDiv); /*!< Set FRO clock source */
330 clock_sys_pll_t config;
331 config.src = kCLOCK_SysPllSrcFRO; /*!< select FRO for SYSPLL */
332 config.targetFreq = 48000000U; /*!< set pll target freq */
333 CLOCK_InitSystemPll(&config); /*!< set parameters */
334 CLOCK_SetClkDivider(kCLOCK_DivPllClk, 1U); /*!< set SYSPLL div */
335 CLOCK_SetMainClkSrc(kCLOCK_MainClkSrcSysPll); /*!< select syspll for main clock */
336 CLOCK_Select(kWKT_Clk_From_Fro); /*!< select FRO for WKT */
337 CLOCK_SetCoreSysClkDiv(1U);
338 /*!< Set SystemCoreClock variable. */
339 SystemCoreClock = BOARD_BOOTCLOCKPLL48M_CORE_CLOCK;
340 }
341
342