LPC2478芯片有 the Main Oscillator, the Internal RC Oscillator, and the RTC oscillator三个独立的
时钟系统。下面分别介绍三者:
上电或任何复位发生时,lpc2478将the Internal RC Oscillator作为时钟源。此后用户程序(软件)选择是否选用其它两个时钟源。
对于lpc2478来说,其外部时钟在1MZ-24MZ之间。the Main Oscillator可以作为CPU的时钟源,也可以作为或不作为PLL的时钟源。
The oscillator(晶振) output is called oscclk。在使用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,如果这样会出现错误。