aboutsummaryrefslogtreecommitdiff
path: root/lib/chibios-contrib/ext/mcux-sdk/boards/lpcxpresso54s018m/project_template/clock_config.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chibios-contrib/ext/mcux-sdk/boards/lpcxpresso54s018m/project_template/clock_config.c')
-rw-r--r--lib/chibios-contrib/ext/mcux-sdk/boards/lpcxpresso54s018m/project_template/clock_config.c247
1 files changed, 247 insertions, 0 deletions
diff --git a/lib/chibios-contrib/ext/mcux-sdk/boards/lpcxpresso54s018m/project_template/clock_config.c b/lib/chibios-contrib/ext/mcux-sdk/boards/lpcxpresso54s018m/project_template/clock_config.c
new file mode 100644
index 000000000..864728bb7
--- /dev/null
+++ b/lib/chibios-contrib/ext/mcux-sdk/boards/lpcxpresso54s018m/project_template/clock_config.c
@@ -0,0 +1,247 @@
1/*
2 * Copyright (c) 2015, Freescale Semiconductor, Inc.
3 * Copyright 2016-2017 NXP
4 * All rights reserved.
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. Setup voltage for the fastest of the clock outputs
15 *
16 * 3. Set up wait states of the flash.
17 *
18 * 4. Set up all dividers.
19 *
20 * 5. Set up all selectors to provide selected clocks.
21 */
22
23/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
24!!GlobalInfo
25product: Clocks v5.0
26processor: LPC54S018J4M
27package_id: LPC54S018J4MET180
28mcu_data: ksdk2_0
29processor_version: 0.0.0
30 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
31
32#include "fsl_power.h"
33#include "fsl_clock.h"
34#include "clock_config.h"
35
36/*******************************************************************************
37 * Definitions
38 ******************************************************************************/
39
40/*******************************************************************************
41 * Variables
42 ******************************************************************************/
43/* System clock frequency. */
44extern uint32_t SystemCoreClock;
45
46/*******************************************************************************
47 ************************ BOARD_InitBootClocks function ************************
48 ******************************************************************************/
49void BOARD_InitBootClocks(void)
50{
51 BOARD_BootClockPLL180M();
52}
53
54/*******************************************************************************
55 ******************** Configuration BOARD_BootClockFRO12M **********************
56 ******************************************************************************/
57/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
58!!Configuration
59name: BOARD_BootClockFRO12M
60outputs:
61- {id: FRO12M_clock.outFreq, value: 12 MHz}
62- {id: FROHF_clock.outFreq, value: 48 MHz}
63- {id: MAIN_clock.outFreq, value: 12 MHz}
64- {id: System_clock.outFreq, value: 12 MHz}
65settings:
66- {id: SYSCON.EMCCLKDIV.scale, value: '1', locked: true}
67 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
68
69/*******************************************************************************
70 * Variables for BOARD_BootClockFRO12M configuration
71 ******************************************************************************/
72/*******************************************************************************
73 * Code for BOARD_BootClockFRO12M configuration
74 ******************************************************************************/
75void BOARD_BootClockFRO12M(void)
76{
77 /*!< Set up the clock sources */
78 /*!< Set up FRO */
79 POWER_DisablePD(kPDRUNCFG_PD_FRO_EN); /*!< Ensure FRO is on */
80 CLOCK_AttachClk(kFRO12M_to_MAIN_CLK); /*!< Switch to FRO 12MHz first to ensure we can change voltage without
81 accidentally being below the voltage for current speed */
82 /*!< Need to make sure ROM and OTP has power(PDRUNCFG0[17,29]= 0U)
83 before calling this API since this API is implemented in ROM code */
84 CLOCK_SetupFROClocking(12000000U); /*!< Set up FRO to the 12 MHz, just for sure */
85 POWER_SetVoltageForFreq(
86 12000000U); /*!< Set voltage for the one of the fastest clock outputs: System clock output */
87
88 /*!< Set up dividers */
89 CLOCK_SetClkDiv(kCLOCK_DivAhbClk, 1U, false); /*!< Reset divider counter and set divider to value 1 */
90
91 /*!< Set up clock selectors - Attach clocks to the peripheries */
92 CLOCK_AttachClk(kFRO12M_to_MAIN_CLK); /*!< Switch MAIN_CLK to FRO12M */
93 /* Set SystemCoreClock variable. */
94 SystemCoreClock = BOARD_BOOTCLOCKFRO12M_CORE_CLOCK;
95}
96
97/*******************************************************************************
98 ******************* Configuration BOARD_BootClockFROHF48M *********************
99 ******************************************************************************/
100/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
101!!Configuration
102name: BOARD_BootClockFROHF48M
103outputs:
104- {id: FRO12M_clock.outFreq, value: 12 MHz}
105- {id: FROHF_clock.outFreq, value: 48 MHz}
106- {id: MAIN_clock.outFreq, value: 48 MHz}
107- {id: System_clock.outFreq, value: 48 MHz}
108settings:
109- {id: SYSCON.MAINCLKSELA.sel, value: SYSCON.fro_hf}
110 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
111
112/*******************************************************************************
113 * Variables for BOARD_BootClockFROHF48M configuration
114 ******************************************************************************/
115/*******************************************************************************
116 * Code for BOARD_BootClockFROHF48M configuration
117 ******************************************************************************/
118void BOARD_BootClockFROHF48M(void)
119{
120 /*!< Set up the clock sources */
121 /*!< Set up FRO */
122 POWER_DisablePD(kPDRUNCFG_PD_FRO_EN); /*!< Ensure FRO is on */
123 CLOCK_AttachClk(kFRO12M_to_MAIN_CLK); /*!< Switch to FRO 12MHz first to ensure we can change voltage without
124 accidentally being below the voltage for current speed */
125 POWER_SetVoltageForFreq(
126 48000000U); /*!< Set voltage for the one of the fastest clock outputs: System clock output */
127 /*!< Need to make sure ROM and OTP has power(PDRUNCFG0[17,29]= 0U)
128 before calling this API since this API is implemented in ROM code */
129 CLOCK_SetupFROClocking(48000000U); /*!< Set up high frequency FRO output to selected frequency */
130
131 /*!< Set up dividers */
132 CLOCK_SetClkDiv(kCLOCK_DivAhbClk, 1U, false); /*!< Reset divider counter and set divider to value 1 */
133
134 /*!< Set up clock selectors - Attach clocks to the peripheries */
135 CLOCK_AttachClk(kFRO_HF_to_MAIN_CLK); /*!< Switch MAIN_CLK to FRO_HF */
136 /* Set SystemCoreClock variable. */
137 SystemCoreClock = BOARD_BOOTCLOCKFROHF48M_CORE_CLOCK;
138}
139
140/*******************************************************************************
141 ******************* Configuration BOARD_BootClockFROHF96M *********************
142 ******************************************************************************/
143/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
144!!Configuration
145name: BOARD_BootClockFROHF96M
146called_from_default_init: true
147outputs:
148- {id: FRO12M_clock.outFreq, value: 12 MHz}
149- {id: FROHF_clock.outFreq, value: 96 MHz}
150- {id: MAIN_clock.outFreq, value: 96 MHz}
151- {id: System_clock.outFreq, value: 96 MHz}
152settings:
153- {id: SYSCON.MAINCLKSELA.sel, value: SYSCON.fro_hf}
154sources:
155- {id: SYSCON.fro_hf.outFreq, value: 96 MHz}
156 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
157
158/*******************************************************************************
159 * Variables for BOARD_BootClockFROHF96M configuration
160 ******************************************************************************/
161/*******************************************************************************
162 * Code for BOARD_BootClockFROHF96M configuration
163 ******************************************************************************/
164void BOARD_BootClockFROHF96M(void)
165{
166 /*!< Set up the clock sources */
167 /*!< Set up FRO */
168 POWER_DisablePD(kPDRUNCFG_PD_FRO_EN); /*!< Ensure FRO is on */
169 CLOCK_AttachClk(kFRO12M_to_MAIN_CLK); /*!< Switch to FRO 12MHz first to ensure we can change voltage without
170 accidentally being below the voltage for current speed */
171 POWER_SetVoltageForFreq(
172 96000000U); /*!< Set voltage for the one of the fastest clock outputs: System clock output */
173 /*!< Need to make sure ROM and OTP has power(PDRUNCFG0[17,29]= 0U)
174 before calling this API since this API is implemented in ROM code */
175 CLOCK_SetupFROClocking(96000000U); /*!< Set up high frequency FRO output to selected frequency */
176
177 /*!< Set up dividers */
178 CLOCK_SetClkDiv(kCLOCK_DivAhbClk, 1U, false); /*!< Reset divider counter and set divider to value 1 */
179
180 /*!< Set up clock selectors - Attach clocks to the peripheries */
181 CLOCK_AttachClk(kFRO_HF_to_MAIN_CLK); /*!< Switch MAIN_CLK to FRO_HF */
182 /* Set SystemCoreClock variable. */
183 SystemCoreClock = BOARD_BOOTCLOCKFROHF96M_CORE_CLOCK;
184}
185
186/*******************************************************************************
187 ******************** Configuration BOARD_BootClockPLL180M *********************
188 ******************************************************************************/
189/* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
190!!Configuration
191name: BOARD_BootClockPLL180M
192outputs:
193- {id: FRO12M_clock.outFreq, value: 12 MHz}
194- {id: FROHF_clock.outFreq, value: 48 MHz}
195- {id: MAIN_clock.outFreq, value: 180 MHz}
196- {id: SYSPLL_clock.outFreq, value: 180 MHz}
197- {id: System_clock.outFreq, value: 180 MHz}
198settings:
199- {id: SYSCON.MAINCLKSELB.sel, value: SYSCON.PLL_BYPASS}
200- {id: SYSCON.M_MULT.scale, value: '30', locked: true}
201- {id: SYSCON.N_DIV.scale, value: '1', locked: true}
202- {id: SYSCON.PDEC.scale, value: '2', locked: true}
203- {id: SYSCON_PDRUNCFG0_PDEN_SYS_PLL_CFG, value: Power_up}
204sources:
205- {id: SYSCON._clk_in.outFreq, value: 12 MHz, enabled: true}
206 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
207
208/*******************************************************************************
209 * Variables for BOARD_BootClockPLL180M configuration
210 ******************************************************************************/
211/*******************************************************************************
212 * Code for BOARD_BootClockPLL180M configuration
213 ******************************************************************************/
214void BOARD_BootClockPLL180M(void)
215{
216 /*!< Set up the clock sources */
217 /*!< Set up FRO */
218 POWER_DisablePD(kPDRUNCFG_PD_FRO_EN); /*!< Ensure FRO is on */
219 CLOCK_AttachClk(kFRO12M_to_MAIN_CLK); /*!< Switch to FRO 12MHz first to ensure we can change voltage without
220 accidentally being below the voltage for current speed */
221 POWER_DisablePD(kPDRUNCFG_PD_SYS_OSC); /*!< Enable System Oscillator Power */
222 SYSCON->SYSOSCCTRL = ((SYSCON->SYSOSCCTRL & ~SYSCON_SYSOSCCTRL_FREQRANGE_MASK) |
223 SYSCON_SYSOSCCTRL_FREQRANGE(0U)); /*!< Set system oscillator range */
224 POWER_SetVoltageForFreq(
225 180000000U); /*!< Set voltage for the one of the fastest clock outputs: System clock output */
226 /*!< Set up SYS PLL */
227 const pll_setup_t pllSetup = {
228 .pllctrl = SYSCON_SYSPLLCTRL_SELI(32U) | SYSCON_SYSPLLCTRL_SELP(16U) | SYSCON_SYSPLLCTRL_SELR(0U),
229 .pllmdec = (SYSCON_SYSPLLMDEC_MDEC(8191U)),
230 .pllndec = (SYSCON_SYSPLLNDEC_NDEC(770U)),
231 .pllpdec = (SYSCON_SYSPLLPDEC_PDEC(98U)),
232 .pllRate = 180000000U,
233 .flags = PLL_SETUPFLAG_WAITLOCK | PLL_SETUPFLAG_POWERUP};
234 CLOCK_AttachClk(kFRO12M_to_SYS_PLL); /*!< Set sys pll clock source*/
235 CLOCK_SetPLLFreq(&pllSetup); /*!< Configure PLL to the desired value */
236
237 /*!< Set up dividers */
238 CLOCK_SetClkDiv(kCLOCK_DivAhbClk, 1U, false); /*!< Reset divider counter and set divider to value 1 */
239
240 /*!< Set up clock selectors - Attach clocks to the peripheries */
241 CLOCK_AttachClk(kSYS_PLL_to_MAIN_CLK); /*!< Switch MAIN_CLK to SYS_PLL */
242 SYSCON->MAINCLKSELA =
243 ((SYSCON->MAINCLKSELA & ~SYSCON_MAINCLKSELA_SEL_MASK) |
244 SYSCON_MAINCLKSELA_SEL(0U)); /*!< Switch MAINCLKSELA to FRO12M even it is not used for MAINCLKSELB */
245 /* Set SystemCoreClock variable. */
246 SystemCoreClock = BOARD_BOOTCLOCKPLL180M_CORE_CLOCK;
247}