/****************************************************************************** * @file system_M451Series.c * @version V0.10 * $Revision: 11 $ * $Date: 15/09/02 10:02a $ * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Source File for M451 Series MCU * * @note * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. *****************************************************************************/ #include "M451Series.h" /*---------------------------------------------------------------------------- DEFINES *----------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------- Clock Variable definitions *----------------------------------------------------------------------------*/ uint32_t SystemCoreClock = __SYSTEM_CLOCK; /*!< System Clock Frequency (Core Clock)*/ uint32_t CyclesPerUs = (__HSI / 1000000); /* Cycles per micro second */ uint32_t PllClock = __HSI; /*!< PLL Output Clock Frequency */ uint32_t gau32ClkSrcTbl[] = {__HXT, __LXT, 0, __LIRC, 0, 0, 0, __HIRC}; /*---------------------------------------------------------------------------- Clock functions *----------------------------------------------------------------------------*/ void SystemCoreClockUpdate(void) /* Get Core Clock Frequency */ { #if 1 uint32_t u32Freq, u32ClkSrc; uint32_t u32HclkDiv; /* Update PLL Clock */ PllClock = CLK_GetPLLClockFreq(); u32ClkSrc = CLK->CLKSEL0 & CLK_CLKSEL0_HCLKSEL_Msk; if(u32ClkSrc == CLK_CLKSEL0_HCLKSEL_PLL) { /* Use PLL clock */ u32Freq = PllClock; } else { /* Use the clock sources directly */ u32Freq = gau32ClkSrcTbl[u32ClkSrc]; } u32HclkDiv = (CLK->CLKDIV0 & CLK_CLKDIV0_HCLKDIV_Msk) + 1; /* Update System Core Clock */ SystemCoreClock = u32Freq / u32HclkDiv; //if(SystemCoreClock == 0) // __BKPT(0); CyclesPerUs = (SystemCoreClock + 500000) / 1000000; #endif } /** * Initialize the system * * @param None * @return None * * @brief Setup the microcontroller system. * Initialize the System. */ void SystemInit(void) { /* ToDo: add code to initialize the system do not use global variables because this function is called before reaching pre-main. RW section maybe overwritten afterwards. */ SYS_UnlockReg(); /* One-time POR18 */ if((SYS->PDID >> 12) == 0x945) { M32(GCR_BASE+0x14) |= BIT7; } /* Force to use INV type with HXT */ CLK->PWRCTL &= ~CLK_PWRCTL_HXTSELTYP_Msk; SYS_LockReg(); #if 0 // NOTE: C-runtime not initialized yet. Ensure no static memory (global variable) are accessed in this function. nu_ebi_init(); #endif /* FPU settings ------------------------------------------------------------*/ #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) SCB->CPACR |= ((3UL << 10 * 2) | /* set CP10 Full Access */ (3UL << 11 * 2)); /* set CP11 Full Access */ #endif } #if 0 void nu_ebi_init(void) { // TO BE CONTINUED } #endif /*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/