LPC2294的锁相环路(PLL)介绍
1.PLL介绍
PLL只接受在10Mhz到25Mhz范围内的输入时钟频率,输入频率乘以一个系数到范围10Mhz到75Mhz为使用电流控制振荡器(CCO)的CCLK时钟,乘数可能是1到32的整数(实际上,由于cpu的频率上限,乘数不能超过7)CCO的工作范围为156Mhz到320Mhz,当锁相环提供所需要的输出频率时,环路中有一个额外的分频器来保持CCO在其频率范围内,输出分配器可以设置为除2、4、8或16以产生输出时钟, 由于最小输出分频器值为2,因此确保锁相环输出具有50%占空比。PLL的框图如图所示。
PLL**是通过PLLCON寄存器控制的,PLL乘法器和分频器的值由PLLCFG寄存器控制,这两个寄存器被保护,以防止意外改变锁相环参数或锁相环失活。因为所有的芯片操作,包括看门狗定时器,提供芯片时钟都是依赖于PLL时,偶然的改变PLL设置可能导致微控制器的意外行为,保护是由类似看门狗定时器的feed序列来完成的。详细信息在PLLFEED寄存器的描述中提供。
PLL是芯片复位和当进入电源下降模式时关闭和旁路的。PLL仅由软件启用。该程序必须配置和**PLL,等待PLL锁,然后连接到PLL作为一个时钟源。
2.PLL相关寄存器
PLLCON:锁相环控制寄存器。保持寄存器更新PLL控制位。写入到这个寄存器的值只有在发生了一个有效的PLL FEED序列之后才会生效
PLLCFG: 锁相环配置寄存器。保持寄存器更新PLL配置值。写入到这个寄存器的值只有在发生了一个有效的PLL FEED 序列之后才会生效。
PLLSTAT: 锁相环状态寄存器。回读寄存器的PLL控制和配置信息。如果PLLCON或PLLCFG已经被写入,但是PLL FEED序列还没有发生,它们将不会反映当前的PLL状态。读取这个寄存器提供了控制PLL的实际值,以及PLL的状态。
PLLFEED: 锁相环FEED寄存器。这个寄存器允许将PLL控制和配置信息从PLLCON和PLLCFG寄存器加载到实际影响PLL操作的shadow寄存器中。
3.寄存器位介绍
3.1PLLCON
PLLCON寄存器包含启用和连接PLL的位。启用PLL允许它尝试锁定当前的倍数和分频器值的设置。连接PLL使处理器和所有芯片功能从PLL输出时钟运行。在给出正确的PLL FEED 序列之前,对PLLCON寄存器的更改不会生效
表1.PLLCON寄存器位
| 位 | 名称 | 功能 |
|---|---|---|
| 0 | PLLE | PLL使能。当为1时,并且在一个有效的PLL feed 之后,此位将**PLL并允许它锁定到请求的频率。 |
| 1 | PLLC | PLL连接。当PLLC和PLLE都被设为1,经过一个有效的PLL feed 后,连接PLL作为微控制器的时钟源。另外,振荡器时钟由微控制器直接使用。 |
| 7:2 | 保留 |
PLL在用作一个时钟源之前,必须被设置,启用和锁定。当从振荡器时钟切换到锁相环输出或反之,内部电路同步操作,以确保不会产生故障,在操作期间丢失了锁环,硬件不能确定在连接或者自动断开PLL之前PLL是锁定的,在锁环丢失的情况下,很可能是振荡器时钟变得不稳定,断开锁环也不能解决这个问题
3.2PLLCFG
PLLCFG寄存器包含PLL乘法器和分频器的值。对PLLCFG寄存器的更改只有在给出正确的PLL feed序列后才会生效,锁相环频率的计算,以及乘法器和分频器的值可以在锁相环频率计算部分找到。
表2.PLLCFG寄存器位
| 位 | 名称 | 功能 |
|---|---|---|
| 4:0 | MSEL | 锁相环乘数的值。提供锁相环频率计算中的值“M”。 |
| 6:5 | PSEL | 锁相环分频器的值。提供锁相环频率计算中的值“P”。 |
| 7 | 保留 |
3.3 PLLSTAT
PLLSTAT是只读寄存器,提供了实际的PLL参数和PLL的状态,PLLSTAT的值可能和PLLCON和PLLCFG中的值不一样,因为这些寄存器中的值只有在一个正确的PLL FEED出现时才会生效。(PLLSTAT是当前值,PLLCON和PLLCFG是即将改变的值)
表3.PLLSTAT寄存器位
| 位 | 名称 | 功能 |
|---|---|---|
| 4:0 | MSEL | 回读PLL乘法器的值。这是PLL当前使用的值。 |
| 6:5 | PSEL | 回读PLL分频器的值。这是PLL当前使用的值。 |
| 7 | 保留 | |
| 8 | PLLE | 回读PLL使能位。当为1时,PLL是当前**。当为零时,PLL被关闭。当电源关闭模式被**时,这个位被自动清除。 |
| 9 | PLLC | 回读PLL连接位。当PLLC和PLLE都为1时,PLL作为位处理器的时钟源连接。当PLLC或PLLE为零时,PLL被旁路,振荡器时钟直接由微处理器使用。当电源关闭模式被**时,这个位被自动清除。 |
| 10 | PLOCK | 反映PLL锁的状态。当为零时,锁相环没有锁定。当为1时,锁相环锁定在要求的频率上。 |
| 15:11 | 保留 |
4.PLL中断
PLLSTAT寄存器中的PLOCK位连接到中断控制器。这允许软件打开PLL并继续其他功能,而不必等待PLL实现锁。当中断发生时(PLOCK = 1), PLL可能被连接,中断被禁用。
5.PLL 模式
PLLE和PLLC的锁相环控制位组合如下所示。
表4.PLLE和PLLC组合
| PLLC | PLLE | PLL功能 |
|---|---|---|
| 0 | 0 | PLL被关闭和断开。CCLK等于(从系统得到)未修改的时钟输入。 |
| 0 | 1 | PLL是活动的,但还没有连接。置位PLOCK后,即可连接PLL。 |
| 1 | 0 | 和00组合一样。这防止了PLL在未启用的情况下被连接的可能性。 |
| 1 | 1 | PLL是活跃的,并已连接作为系统时钟源。CCLK/系统时钟等于PLL输出。 |
6. PLL Feed 寄存器
为了使对PLLCON和PLLCFG寄存器的更改生效,必须将正确的提要序列写入PLLFEED(0xE01F C08C)寄存器。FEED顺序为:
- 将值0xAA写入PLLFEED。
- 将值0x55写入PLLFEED。
这两个写入必须在正确的顺序,并且必须是连续的APB总线周期。后一项要求意味着在PLLfeed操作期间必须禁用中断。如果任何一个feed值不正确,或者没有满足前面提到的条件之一,那么对PLLCON或PLLCFG寄存器的任何更改都不会生效。
表5.PLLFEED寄存器位
| 位 | 名称 | 功能 |
|---|---|---|
| 7:0 | PLLFEED | 为了使PLL配置和控制寄存器的更改生效,PLL FEED序列必须写入到这个寄存器。 |
7.锁相环和电源关闭模式
电源关闭模式自动关闭和断开**PLL。从电源关闭模式的唤醒不会自动恢复PLL设置,这必须在软件中完成。通常,一个**PLL,等待锁,然后连接PLL的例程可以在任何中断服务例程的开始被调用,因为唤醒可能被调用。重要的是,不要试图在从电源关闭模式唤醒后,在执行恢复时简单地给PLL提供信息来重新启动PLL。这将在建立PLL锁之前同时启用和连接PLL
8. PLL 频率计算
表6.确定PLL频率的元素
| 名称 | 功能 |
|---|---|
| FOSC | 来自晶体振荡器/外部振荡器的频率 |
| FCCO | 锁相环电流控制振荡器的频率 |
| CCLK | PLL输出频率(也是处理器时钟频率) |
| M | PLL乘法器的值从MSEL位在PLLCFG寄存器 |
| P | PLLCFG寄存器中的PSEL位的PLL分频器值 |
锁相环是有源且连接的,锁相环输出频率为:
CCLK = M×FOSC 或 CCLK = FCCO /(2×P)
CCO频率可计算为:
FCCO = CCLK×2×P 或者 FCCO = FOSC×M×2×P
PLL的输入和设置必须满足以下要求:
1.FOSC在10mhz到25mhz的范围内。
2.CCLK在10mhz到Fmax的范围内(微控制器允许的最大频率-由嵌入的系统微控制器决定)。
3.FCCO在156mhz到320mhz之间。
9.确定PLL设置的程序
如果一个特定的应用程序使用PLL,它的配置可以确定如下:
1.选择所需的处理器操作频率(CCLK)。这可能是基于处理器吞吐量需求,需要支持一组特定的UART波特率,等等。(外围设备可能以比处理器更低的时钟运行)
2.选择振荡器频率(FOSC)。CCLK必须是FOSC的整数倍(非分数)
3.计算M的值来配置MSEL位。M = CCLK / F。M必须在1到32的范围内。在PLLCFG中写入MSEL位的值是M - 1。
4.为P找到一个值来配置PSEL位,使FCCO在其定义的频率范围内。FCCO由上式计算。P必须为1,2,4或8。当P = 1时,在PLLCFG中写入PSEL位的值为00;P = 2为01;10表示P =4;11表示P = 8。
表7. PLL 分频器的值
| PSEL 位 (PLLCFG[6:5]) | P的值 |
|---|---|
| 00 | 1 |
| 01 | 2 |
| 10 | 4 |
| 11 | 8 |
表 8. PLL 乘法器的值
| MSEL 位 (PLLCFG[4:0]) | M的值 |
|---|---|
| 00000 | 1 |
| 00001 | 2 |
| 00010 | 3 |
| 00011 | 4 |
| … | … |
| 11110 | 31 |
| 11111 | 32 |
10.锁相环配置示例
例如:系统设计要求FOSC = 10 MHz, CCLK = 60 MHz。
根据这些规范,M = CCLK / Fosc = 60mhz / 10mhz = 6。因此,M - 1 = 5将写到PLLCFG[4:0]。
P的值可以由P = F CCO / (CCLK x 2)推导,条件是FCCO必须在156mhz到320mhz之间。假设FCCO允许的最低频率为156mhz,则P = 156mhz / (2 ×60mhz)= 1.3。最高的F CCO频率准则产生P = 2.67。表7中列出的满足这两个要求的P的唯一解是P = 2。因此,将使用PLLCFG[6:5]= 01。