File indexing completed on 2025-05-11 08:22:52
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062 #include <stdint.h>
0063 #include "fsl_device_registers.h"
0064
0065
0066
0067
0068
0069
0070
0071 uint32_t SystemCoreClock = DEFAULT_SYSTEM_CLOCK;
0072
0073
0074
0075
0076
0077 void SystemInit (void) {
0078 #if ((__FPU_PRESENT == 1) && (__FPU_USED == 1))
0079 SCB->CPACR |= ((3UL << 10*2) | (3UL << 11*2));
0080 #endif
0081
0082 #if defined(__MCUXPRESSO)
0083 extern uint32_t g_pfnVectors[];
0084 SCB->VTOR = (uint32_t)g_pfnVectors;
0085 #endif
0086
0087
0088 WDOG1->WMCR &= ~(uint16_t) WDOG_WMCR_PDE_MASK;
0089 WDOG2->WMCR &= ~(uint16_t) WDOG_WMCR_PDE_MASK;
0090
0091
0092
0093 #if (DISABLE_WDOG)
0094 if ((WDOG1->WCR & WDOG_WCR_WDE_MASK) != 0U)
0095 {
0096 WDOG1->WCR &= ~(uint16_t) WDOG_WCR_WDE_MASK;
0097 }
0098 if ((WDOG2->WCR & WDOG_WCR_WDE_MASK) != 0U)
0099 {
0100 WDOG2->WCR &= ~(uint16_t) WDOG_WCR_WDE_MASK;
0101 }
0102 if ((RTWDOG->CS & RTWDOG_CS_CMD32EN_MASK) != 0U)
0103 {
0104 RTWDOG->CNT = 0xD928C520U;
0105 }
0106 else
0107 {
0108 RTWDOG->CNT = 0xC520U;
0109 RTWDOG->CNT = 0xD928U;
0110 }
0111 RTWDOG->TOVAL = 0xFFFF;
0112 RTWDOG->CS = (uint32_t) ((RTWDOG->CS) & ~RTWDOG_CS_EN_MASK) | RTWDOG_CS_UPDATE_MASK;
0113 #endif
0114
0115
0116 if ((SysTick->CTRL & SysTick_CTRL_ENABLE_Msk) != 0U)
0117 {
0118 SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
0119 }
0120
0121
0122 #if defined(__ICACHE_PRESENT) && __ICACHE_PRESENT
0123 if (SCB_CCR_IC_Msk != (SCB_CCR_IC_Msk & SCB->CCR)) {
0124 SCB_EnableICache();
0125 }
0126 #endif
0127
0128 SystemInitHook();
0129 }
0130
0131
0132
0133
0134
0135 void SystemCoreClockUpdate (void) {
0136
0137 uint32_t freq;
0138 uint32_t PLL1MainClock;
0139 uint32_t PLL2MainClock;
0140
0141
0142 if ((CCM->CBCDR & CCM_CBCDR_PERIPH_CLK_SEL_MASK) != 0U)
0143 {
0144 switch (CCM->CBCMR & CCM_CBCMR_PERIPH_CLK2_SEL_MASK)
0145 {
0146
0147 case CCM_CBCMR_PERIPH_CLK2_SEL(0U):
0148 if((CCM_ANALOG->PLL_USB1 & CCM_ANALOG_PLL_USB1_BYPASS_MASK) != 0U)
0149 {
0150 freq = (((CCM_ANALOG->PLL_USB1 & CCM_ANALOG_PLL_USB1_BYPASS_CLK_SRC_MASK) >> CCM_ANALOG_PLL_USB1_BYPASS_CLK_SRC_SHIFT) == 0U) ?
0151 CPU_XTAL_CLK_HZ : CPU_CLK1_HZ;
0152 }
0153 else
0154 {
0155 freq = (CPU_XTAL_CLK_HZ * (((CCM_ANALOG->PLL_USB1 & CCM_ANALOG_PLL_USB1_DIV_SELECT_MASK) != 0U) ? 22U : 20U));
0156 }
0157 break;
0158
0159
0160 case CCM_CBCMR_PERIPH_CLK2_SEL(1U):
0161 freq = CPU_XTAL_CLK_HZ;
0162 break;
0163
0164 case CCM_CBCMR_PERIPH_CLK2_SEL(2U):
0165 freq = (((CCM_ANALOG->PLL_SYS & CCM_ANALOG_PLL_SYS_BYPASS_CLK_SRC_MASK) >> CCM_ANALOG_PLL_SYS_BYPASS_CLK_SRC_SHIFT) == 0U) ?
0166 CPU_XTAL_CLK_HZ : CPU_CLK1_HZ;
0167 break;
0168
0169 case CCM_CBCMR_PERIPH_CLK2_SEL(3U):
0170 default:
0171 freq = 0U;
0172 break;
0173 }
0174
0175 freq /= (((CCM->CBCDR & CCM_CBCDR_PERIPH_CLK2_PODF_MASK) >> CCM_CBCDR_PERIPH_CLK2_PODF_SHIFT) + 1U);
0176 }
0177
0178 else
0179 {
0180
0181 if((CCM_ANALOG->PLL_ARM & CCM_ANALOG_PLL_ARM_BYPASS_MASK) != 0U)
0182 {
0183 PLL1MainClock = (((CCM_ANALOG->PLL_ARM & CCM_ANALOG_PLL_ARM_BYPASS_CLK_SRC_MASK) >> CCM_ANALOG_PLL_ARM_BYPASS_CLK_SRC_SHIFT) == 0U) ?
0184 CPU_XTAL_CLK_HZ : CPU_CLK1_HZ;
0185 }
0186 else
0187 {
0188 PLL1MainClock = ((CPU_XTAL_CLK_HZ * ((CCM_ANALOG->PLL_ARM & CCM_ANALOG_PLL_ARM_DIV_SELECT_MASK) >>
0189 CCM_ANALOG_PLL_ARM_DIV_SELECT_SHIFT)) >> 1U);
0190 }
0191
0192
0193 if((CCM_ANALOG->PLL_SYS & CCM_ANALOG_PLL_SYS_BYPASS_MASK) != 0U)
0194 {
0195 PLL2MainClock = (((CCM_ANALOG->PLL_SYS & CCM_ANALOG_PLL_SYS_BYPASS_CLK_SRC_MASK) >> CCM_ANALOG_PLL_SYS_BYPASS_CLK_SRC_SHIFT) == 0U) ?
0196 CPU_XTAL_CLK_HZ : CPU_CLK1_HZ;
0197 }
0198 else
0199 {
0200 PLL2MainClock = (CPU_XTAL_CLK_HZ * (((CCM_ANALOG->PLL_SYS & CCM_ANALOG_PLL_SYS_DIV_SELECT_MASK) != 0U) ? 22U : 20U));
0201 }
0202 PLL2MainClock += (uint32_t)(((uint64_t)CPU_XTAL_CLK_HZ * ((uint64_t)(CCM_ANALOG->PLL_SYS_NUM))) / ((uint64_t)(CCM_ANALOG->PLL_SYS_DENOM)));
0203
0204 switch (CCM->CBCMR & CCM_CBCMR_PRE_PERIPH_CLK_SEL_MASK)
0205 {
0206
0207 case CCM_CBCMR_PRE_PERIPH_CLK_SEL(0U):
0208 freq = PLL2MainClock;
0209 break;
0210
0211
0212 case CCM_CBCMR_PRE_PERIPH_CLK_SEL(1U):
0213 freq = PLL2MainClock / ((CCM_ANALOG->PFD_528 & CCM_ANALOG_PFD_528_PFD2_FRAC_MASK) >> CCM_ANALOG_PFD_528_PFD2_FRAC_SHIFT) * 18U;
0214 break;
0215
0216
0217 case CCM_CBCMR_PRE_PERIPH_CLK_SEL(2U):
0218 freq = PLL2MainClock / ((CCM_ANALOG->PFD_528 & CCM_ANALOG_PFD_528_PFD0_FRAC_MASK) >> CCM_ANALOG_PFD_528_PFD0_FRAC_SHIFT) * 18U;
0219 break;
0220
0221
0222 case CCM_CBCMR_PRE_PERIPH_CLK_SEL(3U):
0223 freq = PLL1MainClock / (((CCM->CACRR & CCM_CACRR_ARM_PODF_MASK) >> CCM_CACRR_ARM_PODF_SHIFT) + 1U);
0224 break;
0225
0226 default:
0227 freq = 0U;
0228 break;
0229 }
0230 }
0231
0232 SystemCoreClock = (freq / (((CCM->CBCDR & CCM_CBCDR_AHB_PODF_MASK) >> CCM_CBCDR_AHB_PODF_SHIFT) + 1U));
0233
0234 }
0235
0236
0237
0238
0239
0240 __attribute__ ((weak)) void SystemInitHook (void) {
0241
0242 }