100 #include "derivative.h"
108 uint32_t SystemCoreClock = DEFAULT_SYSTEM_CLOCK;
117 SIM->COPC = (uint32_t)0x00u;
120 if((
RCM->SRS0 & RCM_SRS0_WAKEUP_MASK) != 0x00U)
122 if((
PMC->REGSC & PMC_REGSC_ACKISO_MASK) != 0x00U)
124 PMC->REGSC |= PMC_REGSC_ACKISO_MASK;
129 #ifdef SYSTEM_SMC_PMPROT_VALUE
130 SMC->PMPROT = SYSTEM_SMC_PMPROT_VALUE;
135 #if defined(SLOW_TRIM_ADDRESS)
136 if ( *((uint8_t*)SLOW_TRIM_ADDRESS) != 0xFFU) {
137 MCG->C3 = *((uint8_t*)SLOW_TRIM_ADDRESS);
139 #if defined(SLOW_FINE_TRIM_ADDRESS)
140 MCG->C4 = (
MCG->C4 & ~(MCG_C4_SCFTRIM_MASK)) | ((*((uint8_t*) SLOW_FINE_TRIM_ADDRESS)) & MCG_C4_SCFTRIM_MASK);
142 #if defined(FAST_TRIM_ADDRESS)
143 MCG->C4 = (
MCG->C4 & ~(MCG_C4_FCTRIM_MASK)) |((*((uint8_t*) FAST_TRIM_ADDRESS)) & MCG_C4_FCTRIM_MASK);
145 #if defined(SLOW_TRIM_ADDRESS)
150 SIM->CLKDIV1 = SYSTEM_SIM_CLKDIV1_VALUE;
151 SIM->SOPT1 = ((
SIM->SOPT1) & (uint32_t)(~(SIM_SOPT1_OSC32KSEL_MASK))) | ((SYSTEM_SIM_SOPT1_VALUE) & (SIM_SOPT1_OSC32KSEL_MASK));
152 SIM->SOPT2 = ((
SIM->SOPT2) & (uint32_t)(~(SIM_SOPT2_PLLFLLSEL_MASK))) | ((SYSTEM_SIM_SOPT2_VALUE) & (SIM_SOPT2_PLLFLLSEL_MASK));
153 SIM->SOPT2 = ((
SIM->SOPT2) & (uint32_t)(~(SIM_SOPT2_TPMSRC_MASK))) | ((SYSTEM_SIM_SOPT2_VALUE) & (SIM_SOPT2_TPMSRC_MASK));
154 #if ((MCG_MODE == MCG_MODE_FEI) || (MCG_MODE == MCG_MODE_FBI) || (MCG_MODE == MCG_MODE_BLPI))
156 #if ((((SYSTEM_OSC0_CR_VALUE) & OSC_CR_ERCLKEN_MASK) != 0x00U) || (((SYSTEM_MCG_C5_VALUE) & MCG_C5_PLLCLKEN0_MASK) != 0x00U))
158 SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;
160 PORTA_PCR18 &= (uint32_t)~(uint32_t)((PORT_PCR_ISF_MASK | PORT_PCR_MUX(0x07)));
161 if (((SYSTEM_MCG_C2_VALUE) & MCG_C2_EREFS0_MASK) != 0x00U) {
163 PORTA_PCR19 &= (uint32_t)~(uint32_t)((PORT_PCR_ISF_MASK | PORT_PCR_MUX(0x07)));
166 MCG->SC = SYSTEM_MCG_SC_VALUE;
167 MCG->C1 = SYSTEM_MCG_C1_VALUE;
169 if (((SYSTEM_MCG_C1_VALUE) & MCG_C1_IREFS_MASK) != 0x00U) {
170 while((
MCG->S & MCG_S_IREFST_MASK) == 0x00U) {
173 while((
MCG->S & MCG_S_IREFST_MASK) != 0x00U) {
176 MCG->C2 = (SYSTEM_MCG_C2_VALUE) & (uint8_t)(~(MCG_C2_LP_MASK));
177 MCG->C4 = ((SYSTEM_MCG_C4_VALUE) & (uint8_t)(~(MCG_C4_FCTRIM_MASK | MCG_C4_SCFTRIM_MASK))) | (
MCG->C4 & (MCG_C4_FCTRIM_MASK | MCG_C4_SCFTRIM_MASK));
178 OSC0->CR = SYSTEM_OSC0_CR_VALUE;
179 #if (MCG_MODE == MCG_MODE_BLPI)
181 MCG->C2 |= (MCG_C2_LP_MASK);
187 SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;
189 PORTA_PCR18 &= (uint32_t)~(uint32_t)((PORT_PCR_ISF_MASK | PORT_PCR_MUX(0x07)));
190 if (((SYSTEM_MCG_C2_VALUE) & MCG_C2_EREFS0_MASK) != 0x00U) {
192 PORTA_PCR19 &= (uint32_t)~(uint32_t)((PORT_PCR_ISF_MASK | PORT_PCR_MUX(0x07)));
194 MCG->SC = SYSTEM_MCG_SC_VALUE;
195 MCG->C2 = (SYSTEM_MCG_C2_VALUE) & (uint8_t)(~(MCG_C2_LP_MASK));
196 OSC0->CR = SYSTEM_OSC0_CR_VALUE;
197 #if (MCG_MODE == MCG_MODE_PEE)
198 MCG->C1 = (SYSTEM_MCG_C1_VALUE) | MCG_C1_CLKS(0x02);
200 MCG->C1 = SYSTEM_MCG_C1_VALUE;
202 if (((SYSTEM_MCG_C2_VALUE) & MCG_C2_EREFS0_MASK) != 0x00U) {
203 while((
MCG->S & MCG_S_OSCINIT0_MASK) == 0x00U) {
207 if (((SYSTEM_MCG_C1_VALUE) & MCG_C1_IREFS_MASK) != 0x00U) {
208 while((
MCG->S & MCG_S_IREFST_MASK) == 0x00U) {
211 while((
MCG->S & MCG_S_IREFST_MASK) != 0x00U) {
214 MCG->C4 = ((SYSTEM_MCG_C4_VALUE) & (uint8_t)(~(MCG_C4_FCTRIM_MASK | MCG_C4_SCFTRIM_MASK))) | (
MCG->C4 & (MCG_C4_FCTRIM_MASK | MCG_C4_SCFTRIM_MASK));
220 MCG->C5 = (SYSTEM_MCG_C5_VALUE) & (uint8_t)(~(MCG_C5_PLLCLKEN0_MASK));
221 MCG->C6 = (SYSTEM_MCG_C6_VALUE) & (uint8_t)~(MCG_C6_PLLS_MASK);
222 if ((SYSTEM_MCG_C5_VALUE) & MCG_C5_PLLCLKEN0_MASK) {
223 MCG->C5 |= MCG_C5_PLLCLKEN0_MASK;
227 #if (MCG_MODE == MCG_MODE_BLPE)
228 MCG->C2 |= (MCG_C2_LP_MASK);
229 #elif ((MCG_MODE == MCG_MODE_PBE) || (MCG_MODE == MCG_MODE_PEE))
230 MCG->C6 |= (MCG_C6_PLLS_MASK);
231 while((
MCG->S & MCG_S_LOCK0_MASK) == 0x00U) {
233 #if (MCG_MODE == MCG_MODE_PEE)
234 MCG->C1 &= (uint8_t)~(MCG_C1_CLKS_MASK);
237 #if ((MCG_MODE == MCG_MODE_FEI) || (MCG_MODE == MCG_MODE_FEE))
238 while((
MCG->S & MCG_S_CLKST_MASK) != 0x00U) {
241 SIM_SCGC5 |= SIM_SCGC5_LPTMR_MASK;
242 LPTMR0->CMR = LPTMR_CMR_COMPARE(0);
243 LPTMR0->CSR = (LPTMR_CSR_TCF_MASK | LPTMR_CSR_TPS(0x00));
244 LPTMR0->PSR = (LPTMR_PSR_PCS(0x01) | LPTMR_PSR_PBYP_MASK);
245 LPTMR0->CSR = LPTMR_CSR_TEN_MASK;
246 while((LPTMR0_CSR & LPTMR_CSR_TCF_MASK) == 0u) {
249 SIM_SCGC5 &= (uint32_t)~(uint32_t)SIM_SCGC5_LPTMR_MASK;
250 #elif ((MCG_MODE == MCG_MODE_FBI) || (MCG_MODE == MCG_MODE_BLPI))
251 while((
MCG->S & MCG_S_CLKST_MASK) != 0x04U) {
253 #elif ((MCG_MODE == MCG_MODE_FBE) || (MCG_MODE == MCG_MODE_PBE) || (MCG_MODE == MCG_MODE_BLPE))
254 while((
MCG->S & MCG_S_CLKST_MASK) != 0x08U) {
256 #elif (MCG_MODE == MCG_MODE_PEE)
257 while((
MCG->S & MCG_S_CLKST_MASK) != 0x0CU) {
260 #if (((SYSTEM_SMC_PMCTRL_VALUE) & SMC_PMCTRL_RUNM_MASK) == (0x02U << SMC_PMCTRL_RUNM_SHIFT))
261 SMC->PMCTRL = (uint8_t)((SYSTEM_SMC_PMCTRL_VALUE) & (SMC_PMCTRL_RUNM_MASK));
262 while(
SMC->PMSTAT != 0x04U) {
267 if (((SYSTEM_MCG_C6_VALUE) & MCG_C6_LOLIE0_MASK) != 0U) {
278 uint32_t MCGOUTClock;
281 if ((
MCG->C1 & MCG_C1_CLKS_MASK) == 0x00U) {
283 if ((
MCG->C6 & MCG_C6_PLLS_MASK) == 0x00U) {
285 if ((
MCG->C1 & MCG_C1_IREFS_MASK) == 0x00U) {
287 MCGOUTClock = CPU_XTAL_CLK_HZ;
288 if ((
MCG->C2 & MCG_C2_RANGE0_MASK) != 0x00U) {
289 switch (
MCG->C1 & MCG_C1_FRDIV_MASK) {
297 Divider = (uint16_t)(32LU << ((
MCG->C1 & MCG_C1_FRDIV_MASK) >> MCG_C1_FRDIV_SHIFT));
301 Divider = (uint16_t)(1LU << ((
MCG->C1 & MCG_C1_FRDIV_MASK) >> MCG_C1_FRDIV_SHIFT));
303 MCGOUTClock = (MCGOUTClock / Divider);
305 MCGOUTClock = CPU_INT_SLOW_CLK_HZ;
308 switch (
MCG->C4 & (MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS_MASK)) {
313 MCGOUTClock *= 1280U;
316 MCGOUTClock *= 1920U;
319 MCGOUTClock *= 2560U;
325 MCGOUTClock *= 1464U;
328 MCGOUTClock *= 2197U;
331 MCGOUTClock *= 2929U;
338 Divider = (((uint16_t)
MCG->C5 & MCG_C5_PRDIV0_MASK) + 0x01U);
339 MCGOUTClock = (uint32_t)(CPU_XTAL_CLK_HZ / Divider);
340 Divider = (((uint16_t)
MCG->C6 & MCG_C6_VDIV0_MASK) + 24U);
341 MCGOUTClock *= Divider;
343 }
else if ((
MCG->C1 & MCG_C1_CLKS_MASK) == 0x40U) {
345 if ((
MCG->C2 & MCG_C2_IRCS_MASK) == 0x00U) {
346 MCGOUTClock = CPU_INT_SLOW_CLK_HZ;
348 Divider = (uint16_t)(0x01LU << ((
MCG->SC & MCG_SC_FCRDIV_MASK) >> MCG_SC_FCRDIV_SHIFT));
349 MCGOUTClock = (uint32_t) (CPU_INT_FAST_CLK_HZ / Divider);
351 }
else if ((
MCG->C1 & MCG_C1_CLKS_MASK) == 0x80U) {
353 MCGOUTClock = CPU_XTAL_CLK_HZ;
358 SystemCoreClock = (MCGOUTClock / (0x01U + ((
SIM->CLKDIV1 & SIM_CLKDIV1_OUTDIV1_MASK) >> SIM_CLKDIV1_OUTDIV1_SHIFT)));
void SystemCoreClockUpdate(void)
Update internal SystemCoreClock variable.
#define LPTMR0
Peripheral LPTMR0 base pointer.
__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
Enable External Interrupt.
#define SMC
Peripheral SMC base pointer.
#define RCM
Peripheral RCM base pointer.
#define PMC
Peripheral PMC base pointer.
#define SIM
Peripheral SIM base pointer.
#define MCG
Peripheral MCG base pointer.
void SystemInit(void)
Initialize the system.
#define OSC0
Peripheral OSC0 base pointer.