STATIC void SystemSetupClocking(void)
{
int i;
Chip_SCU_PinMuxSet(0xF, 4, (SCU_MODE_MODE_PULLDOWN | SCU_MODE_INBUFF_EN | SCU_MODE_ZIF_DIS | SCU_MODE_FUNC1));
/* Setup FLASH acceleration to target clock rate prior to clock switch */
Chip_CREG_SetFlashAcceleration(MAX_CLOCK_FREQ);
/* Switch main system clocking to external pin */
Chip_Clock_DisableCrystal();
Chip_Clock_SetBaseClock(CLK_BASE_MX, CLKIN_CLKIN, true, false);
/* Setup PLL for 108MHz and switch main system clocking */
Chip_Clock_SetupMainPLLHz(CLKIN_CLKIN, CRYSTAL_MAIN_FREQ_IN, 108 * 1000000, 108 * 1000000);
Chip_Clock_SetBaseClock(CLK_BASE_MX, CLKIN_MAINPLL, true, false);
emc_WaitMS(10);
/* Setup PLL for maximum clock, 204 MHz */
Chip_Clock_SetupMainPLLHz(CLKIN_CLKIN, CRYSTAL_MAIN_FREQ_IN, MAX_CLOCK_FREQ, MAX_CLOCK_FREQ);
emc_WaitMS(10);
/* Setup system base clocks and initial states. This won't enable and disable individual clocks, but sets up the base clock sources for each individual peripheral clock. */
for (i = 0; i < (sizeof(InitClkStates) / sizeof(InitClkStates[0])); i++) {
Chip_Clock_SetBaseClock(InitClkStates.clk, InitClkStates.clkin,
InitClkStates.autoblock_enab, InitClkStates.powerdn);
}
/* Setup USB0 PLL state for a 480MHz output and attach */
LPC_CGU->PLL[0].PLL_CTRL |= 1; // Power down PLL
LPC_CGU->PLL[0].PLL_NP_DIV = (98<<0) | (514<<12);
LPC_CGU->PLL[0].PLL_MDIV = (0xB<<17)|(0x10<<22)|(0<<28)|(0x7FFA<<0);
LPC_CGU->PLL[0].PLL_CTRL = (CLKIN_CLKIN<<24) | (0x3<<2) | (1<<4);
Chip_Clock_SetBaseClock(CLK_BASE_USB0, CLKIN_CLKIN, true, false);
/* Setup CLKOUT */
Chip_Clock_SetDivider(CLK_IDIV_E, CLKIN_MAINPLL, 10); // Divider E = 10
Chip_Clock_SetBaseClock(CLK_BASE_OUT, CLKIN_IDIVE, true, false);
} |