1 /*
2  * Copyright  2019 ,2021 NXP
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 /*
9  * How to set up clock using clock driver functions:
10  *
11  * 1. Setup clock sources.
12  *
13  * 2. Set up all dividers.
14  *
15  * 3. Set up all selectors to provide selected clocks.
16  */
17 
18 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
19 !!GlobalInfo
20 product: Clocks v7.0
21 processor: LPC845
22 package_id: LPC845M301JBD48
23 mcu_data: ksdk2_0
24 processor_version: 9.0.0
25 board: LPC845BREAKOUT
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_BootClockFRO18M();
48 }
49 
50 /*******************************************************************************
51  ******************** Configuration BOARD_BootClockFRO18M **********************
52  ******************************************************************************/
53 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
54 !!Configuration
55 name: BOARD_BootClockFRO18M
56 called_from_default_init: true
57 outputs:
58 - {id: FROHF_clock.outFreq, value: 18 MHz}
59 - {id: LowPower_clock.outFreq, value: 10 kHz}
60 - {id: System_clock.outFreq, value: 18 MHz}
61 - {id: divto750k_clock.outFreq, value: 750 kHz}
62 settings:
63 - {id: SYSCON.ADCCLKSEL.sel, value: NO_CLOCK}
64 - {id: SYSCON.CLKOUTSEL.sel, value: NO_CLOCK}
65 - {id: SYSCON.FRG0CLKSEL.sel, value: NO_CLOCK}
66 - {id: SYSCON.FRG1CLKSEL.sel, value: NO_CLOCK}
67 - {id: SYSCON.FRO_DIRECT.sel, value: SYSCON.fro_osc}
68 - {id: SYSCON.SCTCLKSEL.sel, value: NO_CLOCK}
69 - {id: SYSCON_PDRUNCFG0_PDEN_PLL_CFG, value: Power_down}
70 sources:
71 - {id: SYSCON.fro_osc.outFreq, value: 18 MHz}
72  * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
73 
74 /*******************************************************************************
75  * Variables for BOARD_BootClockFRO18M configuration
76  ******************************************************************************/
77 /*******************************************************************************
78  * Code for BOARD_BootClockFRO18M configuration
79  ******************************************************************************/
BOARD_BootClockFRO18M(void)80 void BOARD_BootClockFRO18M(void)
81 {
82     /*!< Set up the clock sources */
83     /*!< Set up FRO */
84     POWER_DisablePD(kPDRUNCFG_PD_FRO_OUT);                   /*!< Ensure FRO is on  */
85     POWER_DisablePD(kPDRUNCFG_PD_FRO);                      /*!< Ensure FRO is on  */
86     CLOCK_SetFroOscFreq(kCLOCK_FroOscOut18M);                    /*!< Set up FRO freq */
87     CLOCK_SetFroOutClkSrc(kCLOCK_FroSrcFroOsc);                    /*!< Set FRO clock source */
88     POWER_DisablePD(kPDRUNCFG_PD_SYSOSC);                  /*!< Ensure Main osc is on */
89     CLOCK_Select(kEXT_Clk_From_SysOsc);                     /*!<select external clock source to sys_osc */
90     CLOCK_SetMainClkSrc(kCLOCK_MainClkSrcFro);            /*!< select fro for main clock */
91     CLOCK_SetCoreSysClkDiv(1U);
92     /*!< Set SystemCoreClock variable. */
93     SystemCoreClock = BOARD_BOOTCLOCKFRO18M_CORE_CLOCK;
94 }
95 
96 /*******************************************************************************
97  ******************** Configuration BOARD_BootClockFRO24M **********************
98  ******************************************************************************/
99 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
100 !!Configuration
101 name: BOARD_BootClockFRO24M
102 outputs:
103 - {id: FROHF_clock.outFreq, value: 24 MHz}
104 - {id: LowPower_clock.outFreq, value: 10 kHz}
105 - {id: System_clock.outFreq, value: 24 MHz}
106 - {id: divto750k_clock.outFreq, value: 750 kHz}
107 settings:
108 - {id: SYSCON.ADCCLKSEL.sel, value: NO_CLOCK}
109 - {id: SYSCON.CLKOUTSEL.sel, value: NO_CLOCK}
110 - {id: SYSCON.FRG0CLKSEL.sel, value: NO_CLOCK}
111 - {id: SYSCON.FRG1CLKSEL.sel, value: NO_CLOCK}
112 - {id: SYSCON.FRO_DIRECT.sel, value: SYSCON.fro_osc}
113 - {id: SYSCON.SCTCLKSEL.sel, value: NO_CLOCK}
114 - {id: SYSCON_PDRUNCFG0_PDEN_PLL_CFG, value: Power_down}
115 sources:
116 - {id: SYSCON.fro_osc.outFreq, value: 24 MHz}
117  * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
118 
119 /*******************************************************************************
120  * Variables for BOARD_BootClockFRO24M configuration
121  ******************************************************************************/
122 /*******************************************************************************
123  * Code for BOARD_BootClockFRO24M configuration
124  ******************************************************************************/
BOARD_BootClockFRO24M(void)125 void BOARD_BootClockFRO24M(void)
126 {
127     /*!< Set up the clock sources */
128     /*!< Set up FRO */
129     POWER_DisablePD(kPDRUNCFG_PD_FRO_OUT);                   /*!< Ensure FRO is on  */
130     POWER_DisablePD(kPDRUNCFG_PD_FRO);                      /*!< Ensure FRO is on  */
131     CLOCK_SetFroOscFreq(kCLOCK_FroOscOut24M);                    /*!< Set up FRO freq */
132     CLOCK_SetFroOutClkSrc(kCLOCK_FroSrcFroOsc);                    /*!< Set FRO clock source */
133     POWER_DisablePD(kPDRUNCFG_PD_SYSOSC);                  /*!< Ensure Main osc is on */
134     CLOCK_Select(kEXT_Clk_From_SysOsc);                     /*!<select external clock source to sys_osc */
135     CLOCK_SetMainClkSrc(kCLOCK_MainClkSrcFro);            /*!< select fro for main clock */
136     CLOCK_SetCoreSysClkDiv(1U);
137     /*!< Set SystemCoreClock variable. */
138     SystemCoreClock = BOARD_BOOTCLOCKFRO24M_CORE_CLOCK;
139 }
140 
141 /*******************************************************************************
142  ******************** Configuration BOARD_BootClockFRO30M **********************
143  ******************************************************************************/
144 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
145 !!Configuration
146 name: BOARD_BootClockFRO30M
147 outputs:
148 - {id: FROHF_clock.outFreq, value: 30 MHz}
149 - {id: LowPower_clock.outFreq, value: 10 kHz}
150 - {id: System_clock.outFreq, value: 30 MHz}
151 - {id: divto750k_clock.outFreq, value: 750 kHz}
152 settings:
153 - {id: SYSCON.ADCCLKSEL.sel, value: NO_CLOCK}
154 - {id: SYSCON.CLKOUTSEL.sel, value: NO_CLOCK}
155 - {id: SYSCON.FRG0CLKSEL.sel, value: NO_CLOCK}
156 - {id: SYSCON.FRG1CLKSEL.sel, value: NO_CLOCK}
157 - {id: SYSCON.FRO_DIRECT.sel, value: SYSCON.fro_osc}
158 - {id: SYSCON.SCTCLKSEL.sel, value: NO_CLOCK}
159 - {id: SYSCON_PDRUNCFG0_PDEN_PLL_CFG, value: Power_down}
160  * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
161 
162 /*******************************************************************************
163  * Variables for BOARD_BootClockFRO30M configuration
164  ******************************************************************************/
165 /*******************************************************************************
166  * Code for BOARD_BootClockFRO30M configuration
167  ******************************************************************************/
BOARD_BootClockFRO30M(void)168 void BOARD_BootClockFRO30M(void)
169 {
170     /*!< Set up the clock sources */
171     /*!< Set up FRO */
172     POWER_DisablePD(kPDRUNCFG_PD_FRO_OUT);                   /*!< Ensure FRO is on  */
173     POWER_DisablePD(kPDRUNCFG_PD_FRO);                      /*!< Ensure FRO is on  */
174     CLOCK_SetFroOscFreq(kCLOCK_FroOscOut30M);                    /*!< Set up FRO freq */
175     CLOCK_SetFroOutClkSrc(kCLOCK_FroSrcFroOsc);                    /*!< Set FRO clock source */
176     POWER_DisablePD(kPDRUNCFG_PD_SYSOSC);                  /*!< Ensure Main osc is on */
177     CLOCK_Select(kEXT_Clk_From_SysOsc);                     /*!<select external clock source to sys_osc */
178     CLOCK_SetMainClkSrc(kCLOCK_MainClkSrcFro);            /*!< select fro for main clock */
179     CLOCK_SetCoreSysClkDiv(1U);
180     /*!< Set SystemCoreClock variable. */
181     SystemCoreClock = BOARD_BOOTCLOCKFRO30M_CORE_CLOCK;
182 }
183 
184 /*******************************************************************************
185  ******************** Configuration BOARD_BootClockPll24M **********************
186  ******************************************************************************/
187 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
188 !!Configuration
189 name: BOARD_BootClockPll24M
190 outputs:
191 - {id: FROHF_clock.outFreq, value: 24 MHz}
192 - {id: LowPower_clock.outFreq, value: 10 kHz}
193 - {id: SYSPLL_clock.outFreq, value: 24 MHz}
194 - {id: System_clock.outFreq, value: 24 MHz}
195 - {id: divto750k_clock.outFreq, value: 750 kHz}
196 settings:
197 - {id: SYSCON.ADCCLKSEL.sel, value: NO_CLOCK}
198 - {id: SYSCON.CLKOUTSEL.sel, value: NO_CLOCK}
199 - {id: SYSCON.FRG0CLKSEL.sel, value: NO_CLOCK}
200 - {id: SYSCON.FRG1CLKSEL.sel, value: NO_CLOCK}
201 - {id: SYSCON.FRO_DIRECT.sel, value: SYSCON.fro_osc}
202 - {id: SYSCON.MAINCLKPLLSEL.sel, value: SYSCON.PLL}
203 - {id: SYSCON.SCTCLKSEL.sel, value: NO_CLOCK}
204 sources:
205 - {id: SYSCON.fro_osc.outFreq, value: 24 MHz}
206  * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
207 
208 /*******************************************************************************
209  * Variables for BOARD_BootClockPll24M configuration
210  ******************************************************************************/
211 /*******************************************************************************
212  * Code for BOARD_BootClockPll24M configuration
213  ******************************************************************************/
BOARD_BootClockPll24M(void)214 void BOARD_BootClockPll24M(void)
215 {
216     /*!< Set up the clock sources */
217     /*!< Set up FRO */
218     POWER_DisablePD(kPDRUNCFG_PD_FRO_OUT);                   /*!< Ensure FRO is on  */
219     POWER_DisablePD(kPDRUNCFG_PD_FRO);                      /*!< Ensure FRO is on  */
220     CLOCK_SetFroOscFreq(kCLOCK_FroOscOut24M);                    /*!< Set up FRO freq */
221     CLOCK_SetFroOutClkSrc(kCLOCK_FroSrcFroOsc);                    /*!< Set FRO clock source */
222     POWER_DisablePD(kPDRUNCFG_PD_SYSOSC);                  /*!< Ensure Main osc is on */
223     CLOCK_Select(kEXT_Clk_From_SysOsc);                     /*!<select external clock source to sys_osc */
224     clock_sys_pll_t config;
225     config.src = kCLOCK_SysPllSrcFRO;                   /*!< select FRO for SYSPLL */
226     config.targetFreq = 24000000U;                     /*!< set pll target freq */
227     CLOCK_InitSystemPll(&config);                           /*!< set parameters */
228     CLOCK_SetMainClkSrc(kCLOCK_MainClkSrcSysPll);             /*!< select syspll for main clock */
229     CLOCK_SetCoreSysClkDiv(1U);
230     /*!< Set SystemCoreClock variable. */
231     SystemCoreClock = BOARD_BOOTCLOCKPLL24M_CORE_CLOCK;
232 }
233 
234