]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/NXP_Code/board/clock_config.c
commit 9f316c246baafa15c542a5aea81a94f26e3d6507
[freertos] / FreeRTOS / Demo / CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso / NXP_Code / board / clock_config.c
1 /*\r
2  * Copyright 2017-2019 NXP\r
3  * All rights reserved.\r
4  *\r
5  * SPDX-License-Identifier: BSD-3-Clause\r
6  */\r
7 /***********************************************************************************************************************\r
8  * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file\r
9  * will be overwritten if the respective MCUXpresso Config Tools is used to update this file.\r
10  **********************************************************************************************************************/\r
11 /*\r
12  * How to set up clock using clock driver functions:\r
13  *\r
14  * 1. Setup clock sources.\r
15  *\r
16  * 2. Set up wait states of the flash.\r
17  *\r
18  * 3. Set up all dividers.\r
19  *\r
20  * 4. Set up all selectors to provide selected clocks.\r
21  */\r
22 \r
23 /* clang-format off */\r
24 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************\r
25 !!GlobalInfo\r
26 product: Clocks v7.0\r
27 processor: LPC55S69\r
28 package_id: LPC55S69JBD100\r
29 mcu_data: ksdk2_0\r
30 processor_version: 0.7.2\r
31  * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/\r
32 /* clang-format on */\r
33 \r
34 #include "fsl_power.h"\r
35 #include "fsl_clock.h"\r
36 #include "clock_config.h"\r
37 \r
38 /*******************************************************************************\r
39  * Definitions\r
40  ******************************************************************************/\r
41 \r
42 /*******************************************************************************\r
43  * Variables\r
44  ******************************************************************************/\r
45 /* System clock frequency. */\r
46 extern uint32_t SystemCoreClock;\r
47 \r
48 /*******************************************************************************\r
49  ************************ BOARD_InitBootClocks function ************************\r
50  ******************************************************************************/\r
51 void BOARD_InitBootClocks(void)\r
52 {\r
53     BOARD_BootClockPLL150M();\r
54 }\r
55 \r
56 /*******************************************************************************\r
57  ******************** Configuration BOARD_BootClockFRO12M **********************\r
58  ******************************************************************************/\r
59 /* clang-format off */\r
60 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************\r
61 !!Configuration\r
62 name: BOARD_BootClockFRO12M\r
63 outputs:\r
64 - {id: System_clock.outFreq, value: 12 MHz}\r
65 settings:\r
66 - {id: ANALOG_CONTROL_FRO192M_CTRL_ENDI_FRO_96M_CFG, value: Enable}\r
67 sources:\r
68 - {id: ANACTRL.fro_hf.outFreq, value: 96 MHz}\r
69  * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/\r
70 /* clang-format on */\r
71 \r
72 /*******************************************************************************\r
73  * Variables for BOARD_BootClockFRO12M configuration\r
74  ******************************************************************************/\r
75 /*******************************************************************************\r
76  * Code for BOARD_BootClockFRO12M configuration\r
77  ******************************************************************************/\r
78 void BOARD_BootClockFRO12M(void)\r
79 {\r
80 #ifndef SDK_SECONDARY_CORE\r
81     /*!< Set up the clock sources */\r
82     /*!< Configure FRO192M */\r
83     POWER_DisablePD(kPDRUNCFG_PD_FRO192M); /*!< Ensure FRO is on  */\r
84     CLOCK_SetupFROClocking(12000000U);     /*!< Set up FRO to the 12 MHz, just for sure */\r
85     CLOCK_AttachClk(kFRO12M_to_MAIN_CLK);  /*!< Switch to FRO 12MHz first to ensure we can change the clock setting */\r
86 \r
87     CLOCK_SetupFROClocking(96000000U); /* Enable FRO HF(96MHz) output */\r
88 \r
89     POWER_SetVoltageForFreq(\r
90         12000000U); /*!< Set voltage for the one of the fastest clock outputs: System clock output */\r
91     CLOCK_SetFLASHAccessCyclesForFreq(12000000U); /*!< Set FLASH wait states for core */\r
92 \r
93     /*!< Set up dividers */\r
94     CLOCK_SetClkDiv(kCLOCK_DivAhbClk, 1U, false); /*!< Set AHBCLKDIV divider to value 1 */\r
95 \r
96     /*!< Set up clock selectors - Attach clocks to the peripheries */\r
97     CLOCK_AttachClk(kFRO12M_to_MAIN_CLK); /*!< Switch MAIN_CLK to FRO12M */\r
98 \r
99     /*< Set SystemCoreClock variable. */\r
100     SystemCoreClock = BOARD_BOOTCLOCKFRO12M_CORE_CLOCK;\r
101 #endif\r
102 }\r
103 \r
104 /*******************************************************************************\r
105  ******************* Configuration BOARD_BootClockFROHF96M *********************\r
106  ******************************************************************************/\r
107 /* clang-format off */\r
108 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************\r
109 !!Configuration\r
110 name: BOARD_BootClockFROHF96M\r
111 outputs:\r
112 - {id: System_clock.outFreq, value: 96 MHz}\r
113 settings:\r
114 - {id: ANALOG_CONTROL_FRO192M_CTRL_ENDI_FRO_96M_CFG, value: Enable}\r
115 - {id: SYSCON.MAINCLKSELA.sel, value: ANACTRL.fro_hf_clk}\r
116 sources:\r
117 - {id: ANACTRL.fro_hf.outFreq, value: 96 MHz}\r
118  * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/\r
119 /* clang-format on */\r
120 \r
121 /*******************************************************************************\r
122  * Variables for BOARD_BootClockFROHF96M configuration\r
123  ******************************************************************************/\r
124 /*******************************************************************************\r
125  * Code for BOARD_BootClockFROHF96M configuration\r
126  ******************************************************************************/\r
127 void BOARD_BootClockFROHF96M(void)\r
128 {\r
129 #ifndef SDK_SECONDARY_CORE\r
130     /*!< Set up the clock sources */\r
131     /*!< Configure FRO192M */\r
132     POWER_DisablePD(kPDRUNCFG_PD_FRO192M); /*!< Ensure FRO is on  */\r
133     CLOCK_SetupFROClocking(12000000U);     /*!< Set up FRO to the 12 MHz, just for sure */\r
134     CLOCK_AttachClk(kFRO12M_to_MAIN_CLK);  /*!< Switch to FRO 12MHz first to ensure we can change the clock setting */\r
135 \r
136     CLOCK_SetupFROClocking(96000000U); /* Enable FRO HF(96MHz) output */\r
137 \r
138     POWER_SetVoltageForFreq(\r
139         96000000U); /*!< Set voltage for the one of the fastest clock outputs: System clock output */\r
140     CLOCK_SetFLASHAccessCyclesForFreq(96000000U); /*!< Set FLASH wait states for core */\r
141 \r
142     /*!< Set up dividers */\r
143     CLOCK_SetClkDiv(kCLOCK_DivAhbClk, 1U, false); /*!< Set AHBCLKDIV divider to value 1 */\r
144 \r
145     /*!< Set up clock selectors - Attach clocks to the peripheries */\r
146     CLOCK_AttachClk(kFRO_HF_to_MAIN_CLK); /*!< Switch MAIN_CLK to FRO_HF */\r
147 \r
148     /*< Set SystemCoreClock variable. */\r
149     SystemCoreClock = BOARD_BOOTCLOCKFROHF96M_CORE_CLOCK;\r
150 #endif\r
151 }\r
152 \r
153 /*******************************************************************************\r
154  ******************** Configuration BOARD_BootClockPLL100M *********************\r
155  ******************************************************************************/\r
156 /* clang-format off */\r
157 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************\r
158 !!Configuration\r
159 name: BOARD_BootClockPLL100M\r
160 outputs:\r
161 - {id: System_clock.outFreq, value: 100 MHz}\r
162 settings:\r
163 - {id: PLL0_Mode, value: Normal}\r
164 - {id: ANALOG_CONTROL_FRO192M_CTRL_ENDI_FRO_96M_CFG, value: Enable}\r
165 - {id: ENABLE_CLKIN_ENA, value: Enabled}\r
166 - {id: ENABLE_SYSTEM_CLK_OUT, value: Enabled}\r
167 - {id: SYSCON.MAINCLKSELB.sel, value: SYSCON.PLL0_BYPASS}\r
168 - {id: SYSCON.PLL0CLKSEL.sel, value: SYSCON.CLK_IN_EN}\r
169 - {id: SYSCON.PLL0M_MULT.scale, value: '100', locked: true}\r
170 - {id: SYSCON.PLL0N_DIV.scale, value: '4', locked: true}\r
171 - {id: SYSCON.PLL0_PDEC.scale, value: '4', locked: true}\r
172 sources:\r
173 - {id: ANACTRL.fro_hf.outFreq, value: 96 MHz}\r
174 - {id: SYSCON.XTAL32M.outFreq, value: 16 MHz, enabled: true}\r
175  * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/\r
176 /* clang-format on */\r
177 \r
178 /*******************************************************************************\r
179  * Variables for BOARD_BootClockPLL100M configuration\r
180  ******************************************************************************/\r
181 /*******************************************************************************\r
182  * Code for BOARD_BootClockPLL100M configuration\r
183  ******************************************************************************/\r
184 void BOARD_BootClockPLL100M(void)\r
185 {\r
186 #ifndef SDK_SECONDARY_CORE\r
187     /*!< Set up the clock sources */\r
188     /*!< Configure FRO192M */\r
189     POWER_DisablePD(kPDRUNCFG_PD_FRO192M); /*!< Ensure FRO is on  */\r
190     CLOCK_SetupFROClocking(12000000U);     /*!< Set up FRO to the 12 MHz, just for sure */\r
191     CLOCK_AttachClk(kFRO12M_to_MAIN_CLK);  /*!< Switch to FRO 12MHz first to ensure we can change the clock setting */\r
192 \r
193     CLOCK_SetupFROClocking(96000000U); /* Enable FRO HF(96MHz) output */\r
194 \r
195     /*!< Configure XTAL32M */\r
196     POWER_DisablePD(kPDRUNCFG_PD_XTAL32M);                                /* Ensure XTAL32M is powered */\r
197     POWER_DisablePD(kPDRUNCFG_PD_LDOXO32M);                               /* Ensure XTAL32M is powered */\r
198     CLOCK_SetupExtClocking(16000000U);                                    /* Enable clk_in clock */\r
199     SYSCON->CLOCK_CTRL |= SYSCON_CLOCK_CTRL_CLKIN_ENA_MASK;               /* Enable clk_in from XTAL32M clock  */\r
200     ANACTRL->XO32M_CTRL |= ANACTRL_XO32M_CTRL_ENABLE_SYSTEM_CLK_OUT_MASK; /* Enable clk_in to system  */\r
201 \r
202     POWER_SetVoltageForFreq(\r
203         100000000U); /*!< Set voltage for the one of the fastest clock outputs: System clock output */\r
204     CLOCK_SetFLASHAccessCyclesForFreq(100000000U); /*!< Set FLASH wait states for core */\r
205 \r
206     /*!< Set up PLL */\r
207     CLOCK_AttachClk(kEXT_CLK_to_PLL0);  /*!< Switch PLL0CLKSEL to EXT_CLK */\r
208     POWER_DisablePD(kPDRUNCFG_PD_PLL0); /* Ensure PLL is on  */\r
209     POWER_DisablePD(kPDRUNCFG_PD_PLL0_SSCG);\r
210     const pll_setup_t pll0Setup = {\r
211         .pllctrl = SYSCON_PLL0CTRL_CLKEN_MASK | SYSCON_PLL0CTRL_SELI(53U) | SYSCON_PLL0CTRL_SELP(26U),\r
212         .pllndec = SYSCON_PLL0NDEC_NDIV(4U),\r
213         .pllpdec = SYSCON_PLL0PDEC_PDIV(2U),\r
214         .pllsscg = {0x0U, (SYSCON_PLL0SSCG1_MDIV_EXT(100U) | SYSCON_PLL0SSCG1_SEL_EXT_MASK)},\r
215         .pllRate = 100000000U,\r
216         .flags   = PLL_SETUPFLAG_WAITLOCK};\r
217     CLOCK_SetPLL0Freq(&pll0Setup); /*!< Configure PLL0 to the desired values */\r
218 \r
219     /*!< Set up dividers */\r
220     CLOCK_SetClkDiv(kCLOCK_DivAhbClk, 1U, false); /*!< Set AHBCLKDIV divider to value 1 */\r
221 \r
222     /*!< Set up clock selectors - Attach clocks to the peripheries */\r
223     CLOCK_AttachClk(kPLL0_to_MAIN_CLK); /*!< Switch MAIN_CLK to PLL0 */\r
224 \r
225     /*< Set SystemCoreClock variable. */\r
226     SystemCoreClock = BOARD_BOOTCLOCKPLL100M_CORE_CLOCK;\r
227 #endif\r
228 }\r
229 \r
230 /*******************************************************************************\r
231  ******************** Configuration BOARD_BootClockPLL150M *********************\r
232  ******************************************************************************/\r
233 /* clang-format off */\r
234 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************\r
235 !!Configuration\r
236 name: BOARD_BootClockPLL150M\r
237 called_from_default_init: true\r
238 outputs:\r
239 - {id: System_clock.outFreq, value: 150 MHz}\r
240 settings:\r
241 - {id: PLL0_Mode, value: Normal}\r
242 - {id: ENABLE_CLKIN_ENA, value: Enabled}\r
243 - {id: ENABLE_SYSTEM_CLK_OUT, value: Enabled}\r
244 - {id: SYSCON.MAINCLKSELB.sel, value: SYSCON.PLL0_BYPASS}\r
245 - {id: SYSCON.PLL0CLKSEL.sel, value: SYSCON.CLK_IN_EN}\r
246 - {id: SYSCON.PLL0M_MULT.scale, value: '150', locked: true}\r
247 - {id: SYSCON.PLL0N_DIV.scale, value: '8', locked: true}\r
248 - {id: SYSCON.PLL0_PDEC.scale, value: '2', locked: true}\r
249 sources:\r
250 - {id: SYSCON.XTAL32M.outFreq, value: 16 MHz, enabled: true}\r
251  * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/\r
252 /* clang-format on */\r
253 \r
254 /*******************************************************************************\r
255  * Variables for BOARD_BootClockPLL150M configuration\r
256  ******************************************************************************/\r
257 /*******************************************************************************\r
258  * Code for BOARD_BootClockPLL150M configuration\r
259  ******************************************************************************/\r
260 void BOARD_BootClockPLL150M(void)\r
261 {\r
262 #ifndef SDK_SECONDARY_CORE\r
263     /*!< Set up the clock sources */\r
264     /*!< Configure FRO192M */\r
265     POWER_DisablePD(kPDRUNCFG_PD_FRO192M); /*!< Ensure FRO is on  */\r
266     CLOCK_SetupFROClocking(12000000U);     /*!< Set up FRO to the 12 MHz, just for sure */\r
267     CLOCK_AttachClk(kFRO12M_to_MAIN_CLK);  /*!< Switch to FRO 12MHz first to ensure we can change the clock setting */\r
268 \r
269     /*!< Configure XTAL32M */\r
270     POWER_DisablePD(kPDRUNCFG_PD_XTAL32M);                                /* Ensure XTAL32M is powered */\r
271     POWER_DisablePD(kPDRUNCFG_PD_LDOXO32M);                               /* Ensure XTAL32M is powered */\r
272     CLOCK_SetupExtClocking(16000000U);                                    /* Enable clk_in clock */\r
273     SYSCON->CLOCK_CTRL |= SYSCON_CLOCK_CTRL_CLKIN_ENA_MASK;               /* Enable clk_in from XTAL32M clock  */\r
274     ANACTRL->XO32M_CTRL |= ANACTRL_XO32M_CTRL_ENABLE_SYSTEM_CLK_OUT_MASK; /* Enable clk_in to system  */\r
275 \r
276     POWER_SetVoltageForFreq(\r
277         150000000U); /*!< Set voltage for the one of the fastest clock outputs: System clock output */\r
278     CLOCK_SetFLASHAccessCyclesForFreq(150000000U); /*!< Set FLASH wait states for core */\r
279 \r
280     /*!< Set up PLL */\r
281     CLOCK_AttachClk(kEXT_CLK_to_PLL0);  /*!< Switch PLL0CLKSEL to EXT_CLK */\r
282     POWER_DisablePD(kPDRUNCFG_PD_PLL0); /* Ensure PLL is on  */\r
283     POWER_DisablePD(kPDRUNCFG_PD_PLL0_SSCG);\r
284     const pll_setup_t pll0Setup = {\r
285         .pllctrl = SYSCON_PLL0CTRL_CLKEN_MASK | SYSCON_PLL0CTRL_SELI(53U) | SYSCON_PLL0CTRL_SELP(31U),\r
286         .pllndec = SYSCON_PLL0NDEC_NDIV(8U),\r
287         .pllpdec = SYSCON_PLL0PDEC_PDIV(1U),\r
288         .pllsscg = {0x0U, (SYSCON_PLL0SSCG1_MDIV_EXT(150U) | SYSCON_PLL0SSCG1_SEL_EXT_MASK)},\r
289         .pllRate = 150000000U,\r
290         .flags   = PLL_SETUPFLAG_WAITLOCK};\r
291     CLOCK_SetPLL0Freq(&pll0Setup); /*!< Configure PLL0 to the desired values */\r
292 \r
293     /*!< Set up dividers */\r
294     CLOCK_SetClkDiv(kCLOCK_DivAhbClk, 1U, false); /*!< Set AHBCLKDIV divider to value 1 */\r
295 \r
296     /*!< Set up clock selectors - Attach clocks to the peripheries */\r
297     CLOCK_AttachClk(kPLL0_to_MAIN_CLK); /*!< Switch MAIN_CLK to PLL0 */\r
298 \r
299     /*< Set SystemCoreClock variable. */\r
300     SystemCoreClock = BOARD_BOOTCLOCKPLL150M_CORE_CLOCK;\r
301 #endif\r
302 }\r