/*********************************************************************************************** * * @brief CLK_Init - Initialise the clocks to run at 20 MHz from the 31.25KHz internal reference clock * @param none * @return none * ************************************************************************************************/ void Clk_Init() { ICS_C1|=ICS_C1_IRCLKEN_MASK; /* Enable the internal reference clock*/ ICS_C3= 0x90; /* Reference clock frequency = 31.25 KHz*/ while(!(ICS_S & ICS_S_LOCK_MASK)); /* Wait for PLL lock, now running at 40 MHz (1280 * 31.25Khz) */ ICS_C2|=ICS_C2_BDIV(1); /*BDIV=2, Bus clock = 20 MHz*/ ICS_S |= ICS_S_LOCK_MASK; /* Clear Loss of lock sticky bit */ }
/*! @brief Sets up the clock out of RESET * */ void clock_initialise(void) { #if (CLOCK_MODE == CLOCK_MODE_NONE) // No clock setup #else // XTAL/EXTAL Pins // Must not enable I2C0, PTB6, PTB7 as conflicting // Configure the Crystal Oscillator OSC0->CR = OSC_CR_OSCEN_M|OSC_CR_OSCSTEN_M|OSC_CR_OSCOS_M|OSC_CR_RANGE_M|OSC_CR_HGO_M; // Out of reset ICS is in FEI mode // ============================================================= // Switch from FEI -> FEI/FBI/FEE/FBE // ============================================================= #if (OSC_CR_OSCEN_M != 0) // Wait for oscillator stable (if used) do { __asm__("nop"); } while ((OSC->CR & OSC_CR_OSCINIT_MASK) == 0); #endif // Reset default ICS->C2 = ICS_C2_BDIV(1); ICS->C1 = ICS_C1_CLKS_M|ICS_C1_RDIV_M|ICS_C1_IREFS_M|ICS_C1_IRCLKEN_M|ICS_C1_IREFSTEN_M; #if (ICS_C1_IREFS_M == 0) #define ICS_S_IREFST_M 0 #else #define ICS_S_IREFST_M ICS_S_IREFST_MASK #endif // Wait for mode change do { __asm__("nop"); } while ((ICS->S & ICS_S_IREFST_MASK) != ICS_S_IREFST_M); // Wait for S_CLKST to indicating that OUTCLK has switched do { __asm__("nop"); } while ((ICS->S & ICS_S_CLKST_MASK) != ICS_S_CLKST(ICS_C1_CLKS_V)); // Set clock divider SIM->CLKDIV = SIM_CLKDIV_OUTDIV1_M|SIM_CLKDIV_OUTDIV2_M|SIM_CLKDIV_OUTDIV3_M; //SIM->BUSDIV = SIM_BUSDIV_BUSDIV_M; ICS->C2 = (ICS->C2 & ~ICS_C2_BDIV_MASK)|ICS_C2_BDIV_M; ICS->C4 = (ICS->C4&~(ICS_C4_LOLIE0_MASK|ICS_C4_CME_MASK))|ICS_C4_LOLIE_M|ICS_C4_CME_M; #endif SystemCoreClockUpdate(); }