LPC1700系列Cortex-M3内部时钟系统
(PLL0CON)
[0] 使能PLL0,允许PLL0尝试锁定倍频器和分频器的当前设定值
[1] 连接PLL0,使PLL0输出作为处理器和大多数片内外设的时钟源
对于PLL0CON寄存器的更改,只有在执行了正确的PLL0馈送序列后才生效
5.2.2 PLL0配置寄存器(PLL0CFG)
[14:0] MSEL0, PLL0倍频器值; [15] 保留;[23:16] NSEL0, PLL0预分频器值; [31:24] 保留
5.2.3 PLL0状态寄存器(PLL0STAT)
PLL0STAT寄存器提供了当前生效的PLL0工作参数和状态。
[14:0] MSEL0,保存的值是M - 1; [15] 保留
[23:16] NSEL0,N - 1; [24] PLLE0,使能位; [25] PLLC0,连接位;
[26] PLOCK0,反应PLL0的锁定状态。 [31:27] 保留
5.2.4 PLL0馈送寄存器(PLL0FEED)
使用顺序:PLL0CFG = ***; PLL0FEED = 0xAA; PLL0FEED = 0x55;
5.3 PLL0和掉电模式
掉电模式会自动关闭并断开PLL0。从掉电模式唤醒不会自动恢复原先的PLL0设置参数,必须在软件中恢复PLL0。通常,可以在中断服务程序的开始激活PLL0、等待锁定并连接PLL0,该中断服务程序也可以在掉电唤醒时调用。
5.4 PLL0频率计算中的参数
Fin, Fcco, N, M
Fcco = Fin x 2M / N
在较高的振荡器频率下(超过1MHz),允许M值的范围从6~512,这是支持主振荡器和IRC操作的整个M值范围。
对于较低频率,特别是在RTC振荡器用来计时PLL0时,选择了65个M值用于支持波特率产生和CAN/USB操作
5.5 确定PLL0频率参数的过程
(1)确定是否需要使用USB以及是否由PLL0驱动。USB需要一个占空比为50%的48MHz时钟源,也就是说Fcco必须是48MHz的偶数整数倍(即96MHz的整数倍),此时误差范围极小;
(2)选择所需的处理器频率(Fcclk)。这取决于处理器的吞吐量要求,外设可在较低时钟频率下运行,这个频率可低于处理器的频率(较低的Fcco值,处理器功耗也更低)。找出与所需Fcclk的倍数接近的一个Fcco值,再与USB所要求的Fcco值相比较;
(3)选择PLL0输入频率(Fin)的值。这可从主振荡器、RTC振荡器或片内RC振荡器中选择。使用USB功能时,需选择主振荡器;
(4)计算M和N的值来产生十分精确的Fcco频率。
总的来说,建议使用一个较小的N值,这样可以降低CCO的倍频数。
5.6 PLL0频率计算举例
例1:在应用中使用USB接口
a. 在应用中使用USB接口并且由PLL0驱动。在PLL0操作范围(275MHz ~ 550MHz)内,96MHz的最小整数倍频值是288MHz(越小则功耗越低);
b. 预期的CPU速率为60MHz;
c. 使用外部4MHz晶振或内部4MHz作为系统时钟源。 计算 M = (Fcco * N ) / (2 * Fin)
d. 为了使PLL0的倍频值最小,可选择N=1。因此M = 288 * 10^6 * 1 / (2 * 4 * 10^) = 36
例2:在应用中不适用USB接口
a. 预期的Fcclk为72MHz;
b. 使用32.768KHz RTC时钟源作为系统时钟源。
c.要产生所需的Fcclk,而在PLL操作范围内,最小的Fcco为288MHz(4*72MHz),此时,我们令N=1,以获得Fcco的最小倍频值。M=288*10^6/(2*32768)=4394.53125。我们取不同的N值,得到M值不同,且Fcco可以算出几个误差,求得最接近的M=8789, N=2
5.7 PLL0设置步骤
要对PLL0进行正确初始化,须注意下列步骤:
(1) 如果PLL0已连接,则用一个馈送序列断开与PLL0的连接;
(2) 用一个馈送序列禁止PLL0;
(3) 如果需要,可在没有PLL0的情况下改变CPU时钟分频器的设置以加速操作;
(4) 如果需要,可操作“时钟源选择控制寄存器”以改变系统时钟源;
(5) 写PLL0CFG并用一个馈送序列使其有效。PLL0CFG只能在PLL0被禁止时更新;
(6) 用一个馈送序列使能PLL0;
(7) 改变CPU时钟分频器设置,使之与PLL0一起操作;
注意:在连接PLL0之前完成这个操作。
(8) 通过监控PLL0STAT寄存器的PLOCK位0,或者使用PLL0锁定中断来等待PLL0实现锁定。此外,当使用低频时钟作为PLL0的输入时(也就是32KHz时),需要等待一个固定的时间。当PLL参考频率Fref(=Fin/N)少于100KHz或大于20MHz时,PLOCK0的值可能不稳定。在这些情况下,启动PLL0后等待一段时间即可。当Fref大于400KHz时,这个时间为500us;当Fref少于400KHz时,这个时间为200/Fref秒;
(9) 用一个馈送序列连接PLL0。
注意:不要合并上面的任何一个步骤。例如,不能用相同的馈送序列同时更新PLL0CFG和使能PLL0
5.8 PLL0和启动/引导代码的相互作用
当在用户Flash中无有效代码(由校验和字决定)或在启动时拉低ISP使能引脚(P2.10)时,芯片将进入ISP模式,并且引导代码将用IRC设置PLL0。因此,当用户启动JTAG来调试用户代码时,用户代码不能认为PLL0被禁止。在用户启动代码中必须对PLL0进行重新设置。
6
LPC1700系列Cortex-M3内部时钟系 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)