继续上文(LPC2478时钟系统学习笔记(一))。
文章的写作思路基本每一段围绕一个小知识点进行解释。因知识水平有限,其中可能存在不足之处望高人指点,本人不胜感激。
LPC2400系列中引导启动与LPC2000系列稍有不同。其中有关PLL的部分有些需要注意。在ISP模式下,引导代码会通过IRC时钟源驱动PLL,从而启动PLL。
这就是说在我们的用户程序开始执行之前PLL已经使能,如果我们选择其他的时钟源,必须按照步骤次序断开PLL.另外,在ISP模式下,引导代码会改变某些寄存器的值。如the SCS register中的GPIOM位会被置位。用户必须注意这点,否则可能导致PORT0 and PORT1不能正常使用。
PLL寄存器主要有以下四个。PLLCON,PLLCFG,PLLSTAT,PLLFEED。
PLLCON(可读写)包括使能和连接位。PLL作为其他模块的时钟源之前必须启动,使能,锁相达到稳定状态。
PLLCFG(可读写)为配置寄存器。MSEL设置‘M’的值,NSEL设置‘N’的值。下面为计算公式:FCCO = (2 × M × FIN) / N
当输入时钟FIN在MZ级别上变化时,‘M’取值范围6-512,当输入时钟在低频变化时,‘M’取特殊的值(参考数据手册)。 FIN范围 是 32 kHz to 50 MHz。 FCCO范围是 275 MHz to 550 MHz。
注意:
1, 如果用户程序中用到USB接口,FCCO必须为48MZ的整数倍(如96等)。
2, 在选择CPU的时钟源,也需要考虑USB的情况,FCCO最好为两者的公倍数。低频时功耗消耗也低。
3, 对于驱动PLL时钟源的选择上述三者均可,但如果用到USB则必须使用the main oscillator。
4, 通过计算公式得到的‘N’,‘M’值必须减一写入寄存器中。其中‘N’值最好小一点。最好使用数据手册中推荐的值。
举例:用户程序中用到USB,期望的FCCO值为288MZ,CPU工作频率60MZ,外部时钟为4MZ。
由以上公式可导出M = (FCCO × N) / (2 × FIN),假设N=1,
M = 288 × 106 / (2 × 4 × 106) = 36,PLLCFG中位0x23 (N - 1 = 0; M - 1 = 35 = 0x23)。对于CPU,288 × 106 / 60 × 106 = 4.8,取整数5即可,CPU=57.6 MHz。如果要求精确,则FCCO只能去48和60的最小公倍数480MZ,再计算即可。(更多举例请参考数据手册)
PLLSTAT(只读)状态寄存器。MSEL, NSEL为当前值比实际使用的值小1.PLLE,PLLC为1表示PLL使能连接。PLOCK为1表示锁定相位,它可以监视PLL是否达到稳定状态,可以为下一级使用。PLOCK还连接到了中断控制器。用户使用软件可以控制。当中断发生,PLL连接使用,中断失效。
PLLFEED寄存器通过按顺序写数据保护PLLCON,PLLCFG寄存器中的值。1. 写 0xAA to PLLFEED.2. 写 0x55 to PLLFEED. 如果次序中任何一步不正确,PLLCON,PLLCFG寄存器中的值不会改变。
掉电模式下PLL自动关闭。当芯片从掉电模式下被唤醒时,PLL不会自动的连接,必须由软件完成(由相应的中断服务程序)。需要注意的是不能简单的通过向PLLFEED寄存器中依次喂食启动PLL,如果这样会出现错误。
PLL的启动设置顺序:此序列非常重要不能出现错误。
1, 如果PLL已经连接,通过喂食序列断开连接。
2, 通过喂食序列断开使能。
3, 如果需要加快无锁相时的速度,改变CPU分频器的设置。
4, 写The PCLKSRCSEL register以选择相应的时钟源驱动PLL。
5, 写PLLCFG,喂食序列保证生效。此时PLL是不使能状态。
6, 使能PLL, 喂食序列保证生效。
7, 在使能PLL的条件下,改变CPU分频器的设置。在连接PLL之前这一点非常重要。
8, 等待PLL稳定。通过监视PLOCK(the PLLSTAT register)是否置位确定。或者通过中断实现,或者等待固定时间。
9, 连接PLL,喂食序列保证生效。
PLL输出的时钟通过分频用于CPU和USB等模块。当USB接口使时,CPU频率必须大于18MZ。USB接口频率必须是48MZ的整数倍。
CPU Clock Configuration register (CCLKCFG ),配置寄存器控制PLL输出给CPU分频的大小。当PLL无连接时,CCLKCFG取值为1。CCLKSEL取值为0,1,3,5……255。此值加1为实际分频大小。
USB Clock Configuration register (USBCLKCFG),配置寄存器控制PLL输出给USB分频的大小。当PLL无连接时,CCLKCFG取值为1。USBCLKCFG取值为0,1,2,3,4,5,6,7。此值加1为实际分频大小。
IRC Trim Register (IRCTRIM) 该寄存器是用来调整片内的4 MHz振荡器。
Peripheral Clock Selection registers 0 and 1 (PCLKSEL0 and PCLKSEL1)该寄存器用来设置外围模块的时钟。(数据手册P58)
用户1277994 2011-1-7 14:40
用户1584511 2011-1-7 11:59
用户1277994 2011-1-7 08:59
博主文章是原创的吗?请更新下个人资料吧。