新闻中心

EEPW首页>嵌入式系统>设计应用> LPC2478时钟系统学习笔记

LPC2478时钟系统学习笔记

作者: 时间:2016-11-20 来源:网络 收藏
LPC2478芯片有 the Main Oscillator, the Internal RC Oscillator, and the RTC oscillator三个独立的时钟系统。下面分别介绍三者:


上电或任何复位发生时,lpc2478将the Internal RC Oscillator作为时钟源。此后用户程序(软件)选择是否选用其它两个时钟源。

本文引用地址://m.amcfsurvey.com/article/201611/319017.htm


对于lpc2478来说,其外部时钟在1MZ-24MZ之间。the Main Oscillator可以作为CPU的时钟源,也可以作为或不作为PLL的时钟源。


The oscillator(晶振) output is calledoscclk。在使用the Main Oscillator作为时钟源时,其可以工作在两种模式下:slave mode and oscillation mode.

其电容的选择可参考数据手册。我们通过软件控制SCS register来启动the Main Oscillator作为时钟源(OSCRANGE,OSCEN,OSCSTAT位)。OSCRANGE为0,其频率为1MZ-20MZ;为1,其频率为15MZ-24MZ. OSCEN为1使能。OSCSTAT为1说明the Main Oscillator可以作为时钟源,已经稳定。


The RTC oscillator(Real-Time Clock)主要用于实时时钟看门狗定时器,也可以用于驱动PLL和CPU.


关于使用三种时钟源时应该注意以下两点:


1、the Internal RC Oscillator不能用于USB模块。


2、如果CAN模块的波特率在100K以上时,不能使用the Internal RC Oscillator作为时钟源。


The CLKSRCSEL register的前两位决定使用哪种时钟源作为驱动PLL的时钟源。
00(默认)the Internal RC Oscillator作为驱动PLL的时钟源。

01 theMain Oscillator作为驱动PLL的时钟源。


10 The RTC oscillator作为驱动PLL的时钟源。


11保留。


PLL (Phase Locked Loop)——锁相环。LPC2478的PLL可接受32K-24MZ的驱动时钟源。经过其倍频后供给CPU和USB等模块使用.

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 (PCLKSEL0and PCLKSEL1)该寄存器用来设置外围模块的时钟。(数据手册P58)



评论


技术专区

关闭