大家好:<br /> 现有一项目,其中为了节能要每隔大概200ms让lpc2132掉电一次(1s后由RTC唤醒),程序运行的时候设置的cpu工作频率是Fcclk=48mhz,Pclk=Pcclk,所以醒来后不能用lpc2132默认的配置,要重新连接pll,我是在醒来后调用了一个重设置pll的函数void Pll_ReConnect(void),其内容是从target.c中拷贝过来的,如下所示,但是系统运行大概经过几十次掉电、醒来后就会死在等待连接成功的地方“while((PLLSTAT & (1 << 10)) == 0);”<br />以下是该函数的内容和config.h中的设置:<br />void Pll_ReConnect(void)<br />{<br />PLLCON = 1;<br />#if (Fpclk / (Fcclk / 4)) == 1<br /> VPBDIV = 0;<br />#endif<br />#if (Fpclk / (Fcclk / 4)) == 2<br /> VPBDIV = 2;<br />#endif<br />#if (Fpclk / (Fcclk / 4)) == 4<br /> VPBDIV = 1;<br />#endif<br /><br />#if (Fcco / Fcclk) == 2<br /> PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);<br />#endif<br />#if (Fcco / Fcclk) == 4<br /> PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);<br />#endif<br />#if (Fcco / Fcclk) == 8<br /> PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);<br />#endif<br />#if (Fcco / Fcclk) == 16<br /> PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);<br />#endif<br /> PLLFEED = 0xaa;<br /> PLLFEED = 0x55;<br /> while((PLLSTAT & (1 << 10)) == 0);<br /> PLLCON = 3;<br /> PLLFEED = 0xaa;<br /> PLLFEED = 0x55;<br /> <br /> while((PLLSTAT & (1 << 10)) == 0);<br /> <br /> PLLCON = 3;<br /> PLLFEED = 0xaa;<br /> PLLFEED = 0x55;<br />}<br /><br />#define Fosc 12000000 //Crystal frequence,10MHz~25MHz,should be the same as actual status. <br /> //应当与实际一至晶振频率,10MHz~25MHz,应当与实际一至<br />#define Fcclk (Fosc * 4) //System frequence,should be (1~32)multiples of Fosc,and should be equal or less than 60MHz. <br /> //系统频率,必须为Fosc的整数倍(1~32),且<=60MHZ<br />#define Fcco (Fcclk * 4) //CCO frequence,should be 2、4、8、16 multiples of Fcclk, ranged from 156MHz to 320MHz. <br /> //CCO频率,必须为Fcclk的2、4、8、16倍,范围为156MHz~320MHz<br />#define Fpclk (Fcclk / 4) * 4 //VPB clock frequence , must be 1、2、4 multiples of (Fcclk / 4).<br /> //VPB时钟频率,只能为(Fcclk / 4)的1、2、4倍<br /><br />#include "target.h" //This line may not be deleted 这一句不能删除<br /><br />#endif<br /><br /><br />是不是这个pll不能如此频繁的重设置?请各位指教!谢谢 |
|