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; } } }