LPC2XX系列晶体振荡器及系统时钟概述

LPC2XX系列晶体振荡器及系统时钟概述

1.晶体振荡器

  LPC2000微控制器可以使用内部的晶体振荡器产生时钟信号,也可以从外部引入时钟信号。

 

  使用从属模式时,时钟信号通过X1引脚从外部输入,输入频率范围:1~50(MHz),其幅度不小于200m Vrms.

  使用振荡模式时,时钟信号由内部晶体振荡器和外部连接的晶体振荡产生,振荡频率范围:1~30(MHz)

  注意:如果使用了ISP下载功能或者连接PLL提高频率,则输入的时钟频率范围必须在10~25(MHz)之间。

2.锁相环(PLL)

  由晶体振荡器输出的时钟信号,通过PLL升频,可以获得更高的系统时钟(CCLK)。

  PLL接受的输入时钟频率范围为10~25MHz,通过一个电流控制振荡器(CCO)倍增到1060MHz。

 

锁相环(PLL)计算实例

系统要求:FOSC=10MHz、CCLK=60MHz

  1.计算M值:M=CCLK / FOSC =6;

  2.设置MSEL位:写入值为(M-1)=5;

  3.设置PSEL位:P=FCCO/(CCLK*2)=(156~320)/120=1.3~2.67

    所以P取整数2,PSEL写入值为2.

3.系统时钟初始化流程

 

系统时钟初始化--启动代码实例

4.PLL配置寄存器(PLLCFG-0xE01FC084)

  PLLCFG寄存器包含PLL倍频器和分频器值。在执行正确的PLL馈送序列之前改变PLLCFG寄存器的值不会生效(见PLL馈送寄存器(PLLFEED-0xE01FC08C))的描述。PLL频率和倍频器以及分频器值的计算详见PLL频率计算一节。

PLL频率计算

  PLL等式使用下列参数

  Fosc  晶振频率

  FCCO      PLL电流控制振荡器的频率

  cclk  PLL输出频率(也是处理器的时钟频率)

  M   PLLCFG寄存器中MSEL位的倍增器值

  P    PLLCFG寄存器中PSEL位的分频器值

  PLL输出频率(当PLL激活并连接时)由下式得到:

  cclk=M*Fosc  或  cclk=Fcco /(2*P)

  CCO频率可由下式得到:

  FCCO=cclk*2*P  或 FCCO=Fosc*M*2*P

  PLL输入和设定必须满足下面的条件:

  Fosc的范围:10MHz~25MHz

  cclk的范围:10MHz~Fmax(LPC2114/2124/2212/2214的最大允许频率)

  Fcco的范围:156MHz~320MHz

 

确定PLL设定的过程

  如果一个特定的应用使用PLL,它的配置必须依照下面的原则:

  1.选择处理器的操作频率(cclk)。这可以根据处理器的整体要求,UART波特率的支持等因素来决定。记住外围器件的时钟频率可以低于处理器频率(见VPB分频器描述)。

  2.选择振荡器频率(Fosc)。cclk一定是Fosc的整数(非小数)倍。

  3.计算M值以配置MSEL位。M=cclk/Fosc,M的取值范围为1~32.写入MSEL位的值为M-1(见表2-28)

  4.选择P值以配置PSEL位,使Fcco在定义的频率限制范围内,Fcco可通过前面的等式计算。P必须是1,2,4或8中的一个。写入PSEL位的值00表示P=1;01表示P=2;10表示P=4;11表示P=8(见表27)。

表 27 PLL分频器值

PSEL位PLLCFG[6:5] P值
00 1
01 2
10 4
11 8

表28 PLL倍增器值

MSEL位PLLCFG[4:0] M值
00000 1
00001 2
00010 3
00011 4
... ...
11110 31
111111 32

PLL举例

  系统要求Fosc=10MHz,cclk=60MHz

  根据这些要求,可得出M=cclk/Fosc=60MHz/10MHz=6。因此,M-1=5写入PLLCFG4:0。

  P值可由P=Fcco/(cclk*2)得出,Fcco必须在156MHz~320MHz内。假设Fcco取最低频率156MHz,则P=156MHz/(2*60MHz)=1.3。Fcco取最高频率可得出P=2.67.因此,同时满足Fcco最低和最高频率要求的P值只能为2,见表27。所以,PLLCFG=6:5=1。

LPC2214 原理图中使用的晶振:频率10MHz

 

LPC2114系统时钟的设置

LPC2114微控制器的系统时钟有三种:晶振或外部时钟源为Fosc,经PLL调整后供给CPU得时钟为Fcclk,而经VPB分频器后供给外围器件的时钟为Fpclk。

1、对PLL设置

PLL接受的输入时钟频率范围为10MHZ~25MHZ。输入频率经过一个电流控制振荡器(CCO)倍增到范围10MHZ~60MHZ。倍频器可以是从1到32得整数,但实际上由于CPU最高频率得限制,其倍频值不能高于6CCO得操作频率范围为156MHZ—320MHZ,因此在环中有个额外的倍频器在PLL提供所需要得输出频率时使CCO保持在频率范围内。输出分频器可设置为2、4、8或16分频。由于输出分频器得最小值为2,它保证了PLL输出有50%得占空比。

PLL在芯片复位后被关闭并旁路,它可通过软件使能。程序必须在配置并激活PLL后等待其锁定,然后再连接PLL。

 

PLL基本操作方法:

① 设置PLLCFG寄存器,即倍频值(M)和分频值(P);

② PLLCON=0x01 ,即PLLE位置位,使能PLL部件;

③ PLLFEED=0xaa,PLLFEED=0x55,使PLLCON和PLLCFG寄存器得更改生效;

④ 读取PLLSTAT的值,等待PLL锁定;

⑤ PLLCON=0x03,即PLLC位置位,连接PLL时钟;

⑥ PLLFEED=0xaa,PLLFEED=0x55,使连接生效。

PLL设置相关计算:

Fcclk=M×Fosc

其中M为1~6,Fcclk<60MHZ.

               Fcco=Fcclk×2×P

其中P为2/4/8/16,Fcco为156MHZ~320MHZ。

2、VPB分频器设置

设置VPBDIV值进行分频设置,可设置为Fcclk的1/4,相同,1/2时钟作为Fpclk。

3、位于Target.c中的系统时钟设置代码(一般不需要修改)

 

PLLCON =0x01;

//PLL被激活但是尚未连接,即PLLE置位,使能PLL部件 [PLLC:PLLE]=01

#if (Fpclk / (Fcclk / 4)) == 1                  

    VPBDIV = 0;

//VPB总线时钟为处理器时钟的1/4,VPBDIV寄存器的[1:0]位,设置VPB时钟速率00

#endif

 

#if (Fpclk / (Fcclk / 4)) == 2

    VPBDIV = 2;  //VPB总线时钟为处理器时钟的1/2    10

#endif

 

#if (Fpclk / (Fcclk / 4)) == 4

    VPBDIV = 1;   //VPB总线时钟等于处理器时钟      01

#endif

 

#if (Fcco / Fcclk) == 2                     //P值等于1, 即是PSEL位PLLCFG[6:5]  00

    PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);

#endif

 

#if (Fcco / Fcclk) == 4                       //P值等于2    01

    PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);

#endif

 

#if (Fcco / Fcclk) == 8                       //P值等于4    10

    PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);

#endif

 

#if (Fcco / Fcclk) == 16                      //P值等于8    11

    PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);

#endif

 

    PLLFEED = 0xaa;

    PLLFEED = 0x55;               //使PLLCON和PLLCFG寄存器得更改生效

    while((PLLSTAT & (1 << 10)) == 0); //读取PLLSTAT值,等待PLL锁定,PLLSTAT寄存器的第十位位PLOCK,为0时,PLL未锁定;为1时,锁定到指定得频率.

    PLLCON = 0x03;    //PLL已使能并连接到处理器作为系统时钟源  即PLLC置位,连接PLL时钟[PLLC:PLLE]=11

    PLLFEED = 0xaa;

    PLLFEED = 0x55;              //使PLLCON和PLLCFG寄存器得更改生效

 

3、  位于config.h中的时钟配置(根据需要自己设定)

#define   Fosc            11059200              //晶振(外部时钟源)11.0592MHZ

#define   Fcclk           (Fosc * 4)              //即M=4

#define   Fcco            (Fcclk * 4)             //即P=2

#define   Fpclk           (Fcclk / 4) * 1           //VPB分频器VPBDIV值, Fcclk的1/4

posted @ 2020-09-03 09:10  陈木  阅读(1113)  评论(0)    收藏  举报