void setupClock() { LPC_SYSCON->PDRUNCFG_b.SYSPLL_PD = 0; // 0=powered, 1=off LPC_SYSCON->SYSPLLCLKSEL = 1; // 0=irc, 1=systemosc, 3=32khzclk LPC_SYSCON->SYSPLLCLKUEN = 1; LPC_SYSCON->SYSPLLCLKUEN = 0; LPC_SYSCON->SYSPLLCLKUEN = 1; while(!(LPC_SYSCON->SYSPLLCLKUEN & 0x01)); // this works // must admit not sure this is right LPC_SYSCON->SYSPLLCTRL_b.MSEL = 3; LPC_SYSCON->SYSPLLCTRL_b.PSEL = 1; while(!(LPC_SYSCON->SYSPLLSTAT & 0x01)); // **this is where it never exits** } |
void setupSystemOscillator() { LPC_SYSCON->SYSAHBCLKCTRL_b.IOCON = 1; LPC_IOCON->PIO2_0 = 1; LPC_IOCON->PIO2_1 = 1; LPC_SYSCON->PDRUNCFG_b.SYSOSC_PD = 0; int i; for(i = 0x1000; i > 0; i--) { asm("movs r0, r0"); // noop delay } } void setupClock() { setupSystemOscillator(); LPC_SYSCON->SYSPLLCLKSEL = 1; LPC_SYSCON->SYSPLLCLKUEN = 0; LPC_SYSCON->SYSPLLCLKUEN = 1; LPC_SYSCON->PDRUNCFG_b.SYSPLL_PD = 1; LPC_SYSCON->SYSPLLCTRL_b.MSEL = 0; LPC_SYSCON->SYSPLLCTRL_b.PSEL = 3; LPC_SYSCON->PDRUNCFG_b.SYSPLL_PD = 0; while((LPC_SYSCON->SYSPLLSTAT & 0x01) != 1); } |