Hello, want to switch PLL at differernt frequency and want to know the feedback mechanism whether its lock or not using below code for fix mdec and pdec value .
} void setting_MDEC_PDEC(int mdec, int pdec) { LPC_SYSCON->SYSPLLMDEC = mdec; // x13 // 0xd LPC_SYSCON->SYSPLLPDEC = pdec; // /2 // 6 }
int32_t main(void) { int i ,mdec,pdec; int temp = 0; char strChar2Int[10]; int size;
LPC_IOCON->PIO0_0 |= (1 << 0); //pin0_1 as uart tx LPC_SYSCON->CLKOUTCLKSEL = 3; LPC_SYSCON->CLKOUTDIV = 1; LPC_SYSCON->CLKOUTUEN = 0; LPC_SYSCON->CLKOUTUEN = 1; while (!(LPC_SYSCON->CLKOUTUEN & 0x01));
UARTInit(24000000); UARTSend("\n\rEnter mdec\n\r",20); while(1) { __WFI(); switch(UARTBuffer[UARTCount-1]){ case '>': // <M255> or <P002> strChar2Int[0] = UARTBuffer[UARTCount-2]; //5 strChar2Int[1] = UARTBuffer[UARTCount-3]; //5 strChar2Int[2] = UARTBuffer[UARTCount-4]; //2 UARTSend("\n\rHere",6); if (UARTBuffer[UARTCount-5] == 'M') mdec = str2integer(strChar2Int); else if (UARTBuffer[UARTCount-5] == 'P') pdec = str2integer(strChar2Int); if (UARTBuffer[UARTCount-5] == 'M'){ UARTCount = 0; UARTSend("Send PDEC:",11); } else if (UARTBuffer[UARTCount-5] == 'P') { UARTSend("Setting PLL",11); // LPC_SYSCON->SYSPLLCTRL = 0x00000c90; LPC_SYSCON->SYSPLLCLKSEL = 0; LPC_SYSCON->SYSPLLCLKUEN = 0x01; LPC_SYSCON->SYSPLLCLKUEN = 0x00; LPC_SYSCON->SYSPLLCLKUEN = 0x01; while (!(LPC_SYSCON->SYSPLLCLKUEN & 0x01)){}; LPC_SYSCON->SYSPLLCTRL = 0x00280C90; // bit[9:4] = 0x9 and bit [14:10] = 0x3 // // bit[15] = BYPASS , set to 0, use CCO to create PLL output // // bit[16] = not BYPASS_CCODIV2, set to 0 // // bit[19] = PLL input divider bypass, set to 1 to use PLL input clock // // bit[20] = PLL output divider bypass, set to 0 to use P divider // // bit[21] = Enable clk , set to 0 = Enabled
LPC_SYSCON->SYSPLLMDEC = mdec; // x32 LPC_SYSCON->SYSPLLPDEC = pdec; // /2 //Turn on PLL LPC_SYSCON->PDRUNCFG &= ~(1<<22); //Waiting for Lock while(!(LPC_SYSCON->SYSPLLSTAT & 0x01)){}; LPC_SYSCON->MAINCLKSEL = 3; LPC_SYSCON->MAINCLKUEN = 0x01; LPC_SYSCON->MAINCLKUEN = 0x00; LPC_SYSCON->MAINCLKUEN = 0x01; while (!(LPC_SYSCON->MAINCLKUEN & 0x01));
}
break; } } }
Please try reading the posting instructions for placing source code in-line, a wall of text will be ignored. http://www.keil.com/forum/tips.asp
Please read the Reference Manual for the part you are using, the PLL is not part of the ARM core, and not generic in its implementation. Specifically state the part being used so others know what documentation you should be familiar with.