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