]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/NXP_Code/board/clock_config.c
d064076b58ea9e831a3e1e9aa813f2c7f96e5d71
[freertos] / FreeRTOS / Demo / CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso / NXP_Code / board / clock_config.c
1 /*\r
2  * Copyright 2017-2018 NXP\r
3  * All rights reserved.\r
4  *\r
5  * SPDX-License-Identifier: BSD-3-Clause\r
6  */\r
7 \r
8 /***********************************************************************************************************************\r
9  * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file\r
10  * will be overwritten if the respective MCUXpresso Config Tools is used to update this file.\r
11  **********************************************************************************************************************/\r
12 /*\r
13  * How to set up clock using clock driver functions:\r
14  *\r
15  * 1. Setup clock sources.\r
16  *\r
17  * 2. Set up wait states of the flash.\r
18  *\r
19  * 3. Set up all dividers.\r
20  *\r
21  * 4. Set up all selectors to provide selected clocks.\r
22  */\r
23 \r
24 /* clang-format off */\r
25 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************\r
26 !!GlobalInfo\r
27 product: Clocks v5.0\r
28 processor: LPC55S69\r
29 package_id: LPC55S69JBD100\r
30 mcu_data: ksdk2_0\r
31 processor_version: 0.0.6\r
32  * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/\r
33 /* clang-format on */\r
34 \r
35 #include "fsl_power.h"\r
36 #include "fsl_clock.h"\r
37 #include "clock_config.h"\r
38 \r
39 /*******************************************************************************\r
40  * Definitions\r
41  ******************************************************************************/\r
42 \r
43 /*******************************************************************************\r
44  * Variables\r
45  ******************************************************************************/\r
46 /* System clock frequency. */\r
47 extern uint32_t SystemCoreClock;\r
48 \r
49 /*******************************************************************************\r
50  ************************ BOARD_InitBootClocks function ************************\r
51  ******************************************************************************/\r
52 void BOARD_InitBootClocks(void)\r
53 {\r
54     BOARD_BootClockFROHF96M();\r
55 }\r
56 \r
57 /*******************************************************************************\r
58  ******************** Configuration BOARD_BootClockFRO12M **********************\r
59  ******************************************************************************/\r
60 /* clang-format off */\r
61 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************\r
62 !!Configuration\r
63 name: BOARD_BootClockFRO12M\r
64 outputs:\r
65 - {id: System_clock.outFreq, value: 12 MHz}\r
66 settings:\r
67 - {id: ANALOG_CONTROL_FRO192M_CTRL_ENDI_FRO_96M_CFG, value: Enable}\r
68 sources:\r
69 - {id: ANACTRL.fro_hf.outFreq, value: 96 MHz}\r
70  * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/\r
71 /* clang-format on */\r
72 \r
73 /*******************************************************************************\r
74  * Variables for BOARD_BootClockFRO12M configuration\r
75  ******************************************************************************/\r
76 /*******************************************************************************\r
77  * Code for BOARD_BootClockFRO12M configuration\r
78  ******************************************************************************/\r
79 void BOARD_BootClockFRO12M(void)\r
80 {\r
81 #ifndef SDK_SECONDARY_CORE\r
82     /*!< Set up the clock sources */\r
83     /*!< Configure FRO192M */\r
84     POWER_DisablePD(kPDRUNCFG_PD_FRO192M);               /*!< Ensure FRO is on  */\r
85     CLOCK_SetupFROClocking(12000000U);                   /*!< Set up FRO to the 12 MHz, just for sure */\r
86     CLOCK_AttachClk(kFRO12M_to_MAIN_CLK);                /*!< Switch to FRO 12MHz first to ensure we can change the clock setting */\r
87 \r
88     CLOCK_SetupFROClocking(96000000U);                   /* Enable FRO HF(96MHz) output */\r
89 \r
90     POWER_SetVoltageForFreq(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 called_from_default_init: true\r
112 outputs:\r
113 - {id: System_clock.outFreq, value: 96 MHz}\r
114 settings:\r
115 - {id: ANALOG_CONTROL_FRO192M_CTRL_ENDI_FRO_96M_CFG, value: Enable}\r
116 - {id: SYSCON.MAINCLKSELA.sel, value: ANACTRL.fro_hf_clk}\r
117 sources:\r
118 - {id: ANACTRL.fro_hf.outFreq, value: 96 MHz}\r
119  * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/\r
120 /* clang-format on */\r
121 \r
122 /*******************************************************************************\r
123  * Variables for BOARD_BootClockFROHF96M configuration\r
124  ******************************************************************************/\r
125 /*******************************************************************************\r
126  * Code for BOARD_BootClockFROHF96M configuration\r
127  ******************************************************************************/\r
128 void BOARD_BootClockFROHF96M(void)\r
129 {\r
130 #ifndef SDK_SECONDARY_CORE\r
131     /*!< Set up the clock sources */\r
132     /*!< Configure FRO192M */\r
133     POWER_DisablePD(kPDRUNCFG_PD_FRO192M);               /*!< Ensure FRO is on  */\r
134     CLOCK_SetupFROClocking(12000000U);                   /*!< Set up FRO to the 12 MHz, just for sure */\r
135     CLOCK_AttachClk(kFRO12M_to_MAIN_CLK);                /*!< Switch to FRO 12MHz first to ensure we can change the clock setting */\r
136 \r
137     CLOCK_SetupFROClocking(96000000U);                   /* Enable FRO HF(96MHz) output */\r
138 \r
139     POWER_SetVoltageForFreq(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     POWER_DisablePD(kPDRUNCFG_PD_XTAL32M);                        /* Ensure XTAL32M is powered */\r
196     POWER_DisablePD(kPDRUNCFG_PD_LDOXO32M);                       /* Ensure XTAL32M is powered */\r
197     CLOCK_SetupExtClocking(16000000U);                            /* Enable clk_in clock */\r
198     SYSCON->CLOCK_CTRL |= SYSCON_CLOCK_CTRL_CLKIN_ENA_MASK;       /* Enable clk_in from XTAL32M clock  */\r
199     ANACTRL->XO32M_CTRL |= ANACTRL_XO32M_CTRL_ENABLE_SYSTEM_CLK_OUT_MASK;    /* Enable clk_in to system  */\r
200 \r
201     POWER_SetVoltageForFreq(100000000U);                  /*!< Set voltage for the one of the fastest clock outputs: System clock output */\r
202     CLOCK_SetFLASHAccessCyclesForFreq(100000000U);          /*!< Set FLASH wait states for core */\r
203 \r
204     /*!< Set up PLL */\r
205     CLOCK_AttachClk(kEXT_CLK_to_PLL0);                    /*!< Switch PLL0CLKSEL to EXT_CLK */\r
206     POWER_DisablePD(kPDRUNCFG_PD_PLL0);                  /* Ensure PLL is on  */\r
207     POWER_DisablePD(kPDRUNCFG_PD_PLL0_SSCG);                                       \r
208     const pll_setup_t pll0Setup = {\r
209         .pllctrl = SYSCON_PLL0CTRL_CLKEN_MASK | SYSCON_PLL0CTRL_SELI(54U) | SYSCON_PLL0CTRL_SELP(26U),\r
210         .pllndec = SYSCON_PLL0NDEC_NDIV(4U),\r
211         .pllpdec = SYSCON_PLL0PDEC_PDIV(2U),\r
212         .pllsscg = {0x0U,(SYSCON_PLL0SSCG1_MDIV_EXT(100U) | SYSCON_PLL0SSCG1_SEL_EXT_MASK)},\r
213         .pllRate = 100000000U,\r
214         .flags =  PLL_SETUPFLAG_WAITLOCK\r
215     };\r
216     CLOCK_SetPLL0Freq(&pll0Setup);                       /*!< Configure PLL0 to the desired values */\r
217 \r
218     /*!< Set up dividers */\r
219     CLOCK_SetClkDiv(kCLOCK_DivAhbClk, 1U, false);         /*!< Set AHBCLKDIV divider to value 1 */\r
220 \r
221     /*!< Set up clock selectors - Attach clocks to the peripheries */\r
222     CLOCK_AttachClk(kPLL0_to_MAIN_CLK);                 /*!< Switch MAIN_CLK to PLL0 */\r
223 \r
224     /*< Set SystemCoreClock variable. */\r
225     SystemCoreClock = BOARD_BOOTCLOCKPLL100M_CORE_CLOCK;\r
226 #endif\r
227 }\r
228 \r