LPC1754内部PLL0原理及应用设计详解
LPC_SC->SC->PLL0FEED = 0x55;
#endifLPC_SC->PCONP = PCONP_Val; /* Power Control for Peripherals */
LPC_SC->CLKOUTCFG = CLKOUTCFG_Val; /* Clock Output Configuration */
#endif其中关键参数为PLL0倍频系数PLL0CFG_Val、CPU时钟分频系数CCLKCFG_Val,由于寄存器值比实际值小1,因此它们实际值为16和4。另外每次想PLL0相关寄存器写入新的数值时,需要向馈送寄存器当中写入馈送系列以后才能生效,通常是将0xAA和0x55先后写入PLLxFEED寄存器。
将相关参数准备好之后,就要根据参数配置,判断选中的时钟源,并通过计算得出最后的系统时钟频率。在选用外部12MHz时钟源的条件下,程序会跳转到CASE1的位置运行,并结合此前所给参数,计算出系统时钟频率CCLK=12M×2×16/1/4=96MHz。
case 1: /* Main oscillator => PLL0 */
SystemFrequency = (OSC_CLK *
((2 * ((LPC_SC->PLL0STAT & 0x7FFF) + 1))) / /*PLL0STAT的低15位是15,倍频值*/
(((LPC_SC->PLL0STAT >> 16) & 0xFF) + 1) / /*PLL0STAT的16~23位是0,分频值*/
((LPC_SC->CCLKCFG & 0xFF)+ 1)); /*CCLKCFG是系统分频值,3 */
break;又例如使用32.768KHz的外低速晶振作为时钟源,并同样产生96MHz的系统时钟,只需将CLKSRCSEL_Val、CCLKCFG_Val、PLL0CFG_Val分别改为0x02、0x02、0x1127(4391)即可,含义分别是选择外部低速晶振,系统分频为3(寄存器值比实际值小1),PLL0倍频值为4392(而PLL0分频值不设,默认为0),计算:32.768×2×4392÷3=95944.704KHz,
约为96MHz。
时钟配置注意事项
在整个代码编写过程中要格外注意对馈送寄存器PLLxFEED的操作,要严格遵循0xAA和0x55先后写入的顺序。另外要确保执行写入馈送序列时,不会出现任何一个中断服务程序,即在执行PLL0馈送操作时,必须禁止中断,如果写入的值不正确、或者没有满足无中断发生的条件,那么对PLL0CFG寄存器的更改都不会生效。
在根据自身需求配置所需系统时钟频率时,往往会使用仿真器的Debug功能,观测相关参数,以验证时钟频率配置的正确与否。但不能在执行PLL0馈送操作时,设置任何断点,否侧同样无法使配置生效。
- NXP (Freescale) QorIQ LS1088A-RDB(05-16)
- NXP (Freescale) NOVPEK i.MX6Q/D(05-16)
- NXP (Freescale) QorIQ T1023RDB(05-16)
- 大联大控股品佳推出Microchip、NXP远程医疗解决方案(02-07)
- 飞兆、NXP、TI、安森美四家LED驱动方案大比拼(04-07)
- 最全NXP智能照明解决方案(11-25)