123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- #include <stdint.h>
- #include "fsl_device_registers.h"
- uint32_t SystemCoreClock = DEFAULT_SYSTEM_CLOCK;
- void SystemInit (void) {
- #if ((__FPU_PRESENT == 1) && (__FPU_USED == 1))
- SCB->CPACR |= ((3UL << 10*2) | (3UL << 11*2));
- #endif
- #if (DISABLE_WDOG)
-
- WDOG->UNLOCK = WDOG_UNLOCK_WDOGUNLOCK(0xC520);
-
- WDOG->UNLOCK = WDOG_UNLOCK_WDOGUNLOCK(0xD928);
-
- WDOG->STCTRLH = WDOG_STCTRLH_BYTESEL(0x00) |
- WDOG_STCTRLH_WAITEN_MASK |
- WDOG_STCTRLH_STOPEN_MASK |
- WDOG_STCTRLH_ALLOWUPDATE_MASK |
- WDOG_STCTRLH_CLKSRC_MASK |
- 0x0100U;
- #endif
- SystemInitHook();
- }
- void SystemCoreClockUpdate (void) {
- uint32_t MCGOUTClock;
- uint16_t Divider;
- if ((MCG->C1 & MCG_C1_CLKS_MASK) == 0x00U) {
-
- if ((MCG->C6 & MCG_C6_PLLS_MASK) == 0x00U) {
-
- if ((MCG->C1 & MCG_C1_IREFS_MASK) == 0x00U) {
-
- switch (MCG->C7 & MCG_C7_OSCSEL_MASK) {
- case 0x00U:
- MCGOUTClock = CPU_XTAL_CLK_HZ;
- break;
- case 0x01U:
- MCGOUTClock = CPU_XTAL32k_CLK_HZ;
- break;
- case 0x02U:
- default:
- MCGOUTClock = CPU_INT_IRC_CLK_HZ;
- break;
- }
- if (((MCG->C2 & MCG_C2_RANGE_MASK) != 0x00U) && ((MCG->C7 & MCG_C7_OSCSEL_MASK) != 0x01U)) {
- switch (MCG->C1 & MCG_C1_FRDIV_MASK) {
- case 0x38U:
- Divider = 1536U;
- break;
- case 0x30U:
- Divider = 1280U;
- break;
- default:
- Divider = (uint16_t)(32LU << ((MCG->C1 & MCG_C1_FRDIV_MASK) >> MCG_C1_FRDIV_SHIFT));
- break;
- }
- } else {
- Divider = (uint16_t)(1LU << ((MCG->C1 & MCG_C1_FRDIV_MASK) >> MCG_C1_FRDIV_SHIFT));
- }
- MCGOUTClock = (MCGOUTClock / Divider);
- } else {
- MCGOUTClock = CPU_INT_SLOW_CLK_HZ;
- }
-
- switch (MCG->C4 & (MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS_MASK)) {
- case 0x00U:
- MCGOUTClock *= 640U;
- break;
- case 0x20U:
- MCGOUTClock *= 1280U;
- break;
- case 0x40U:
- MCGOUTClock *= 1920U;
- break;
- case 0x60U:
- MCGOUTClock *= 2560U;
- break;
- case 0x80U:
- MCGOUTClock *= 732U;
- break;
- case 0xA0U:
- MCGOUTClock *= 1464U;
- break;
- case 0xC0U:
- MCGOUTClock *= 2197U;
- break;
- case 0xE0U:
- MCGOUTClock *= 2929U;
- break;
- default:
- break;
- }
- } else {
-
- Divider = (((uint16_t)MCG->C5 & MCG_C5_PRDIV_MASK) + 0x01U);
- MCGOUTClock = (uint32_t)(CPU_XTAL_CLK_HZ / Divider);
- Divider = (((uint16_t)MCG->C6 & MCG_C6_VDIV_MASK) + 16U);
- MCGOUTClock *= Divider;
- MCGOUTClock /= 2;
- }
- } else if ((MCG->C1 & MCG_C1_CLKS_MASK) == 0x40U) {
-
- if ((MCG->C2 & MCG_C2_IRCS_MASK) == 0x00U) {
- MCGOUTClock = CPU_INT_SLOW_CLK_HZ;
- } else {
- Divider = (uint16_t)(0x01LU << ((MCG->SC & MCG_SC_FCRDIV_MASK) >> MCG_SC_FCRDIV_SHIFT));
- MCGOUTClock = (uint32_t) (CPU_INT_FAST_CLK_HZ / Divider);
- }
- } else if ((MCG->C1 & MCG_C1_CLKS_MASK) == 0x80U) {
-
- switch (MCG->C7 & MCG_C7_OSCSEL_MASK) {
- case 0x00U:
- MCGOUTClock = CPU_XTAL_CLK_HZ;
- break;
- case 0x01U:
- MCGOUTClock = CPU_XTAL32k_CLK_HZ;
- break;
- case 0x02U:
- default:
- MCGOUTClock = CPU_INT_IRC_CLK_HZ;
- break;
- }
- } else {
-
- return;
- }
- SystemCoreClock = (MCGOUTClock / (0x01U + ((SIM->CLKDIV1 & SIM_CLKDIV1_OUTDIV1_MASK) >> SIM_CLKDIV1_OUTDIV1_SHIFT)));
- }
- __attribute__ ((weak)) void SystemInitHook (void) {
-
- }
|