×
单片机 > 单片机程序设计 > 详情

ARM系列之时钟模块详述及其分频系数的设定

发布时间:2020-06-16 发布时间:
|
S3C2440的时钟控制单元可以产生如下的时钟信号:FCLK FOR CPU, HCLK FOR AHB BUS(高速设备,比如内存控制器、中断控制器、LCD控制器、DMA以及USBhost), PCLK FOR APB BUS(低速设备,比如WTG、I2C,SDI/MMC,GPIO,RTC,UART,PWM,ADC,SPI)和用于USB的UCLK,共四种分频率,前三种共用一个PLL。 S3C2440有两个PLL, 一个用于FCLK,HCLK,和PCLK,叫做MPLL; 而另一个用于USB模块(固定48MHz),叫做UPLL。时钟控制逻辑还可以没有PLL来降低时钟或者不使每个外设连接到时钟以降低电源能耗。

 


-------------------------------------o---------------------------------------------------------


关于时钟源选择的问题,主要时钟源一个来自于外部晶振(XTlpll),一个来自于外部时钟(EXTCLK)。时钟发生器包括一个连接到外部晶振的振荡器和两个锁相环(PLL)。 时钟源的选择可以通过芯片引脚的状态进行配置,即芯片的OM3和OM2引脚。具体分配情况如下表所示:(原理图中已经将OM3和OM2都接地,即00的情况,用的是外部晶振,而且晶振频率为12MHz)。.


 


---------------------------o-----------------------------------------------------


具体分频寄存器设置时序如下图所示:(尽管MPLL在系统复位的时候就开始产生,但是只有有效的设置好MPLLCON寄存器后才能用于系统时钟。在此之前,外部时钟将直接作为系统时钟。即使不需要改变MPLLCON寄存器的初值,也必须将同样的值写入寄存器。设置完成后,经过LOCKTIME的时间,设置的分频才能起效果。)


 如上图所示,FCLK的启动过程:


1、上电几毫秒后,晶振输出稳定,FCLK=晶振频率,nRESET信号恢复高电平后,CPU开始执行指令。


2、我们可以在程序开头启动MPLL,在设置MPLL的几个寄存器后,需要等待一段时间(Lock Time),MPLL的输出才稳定。在这段时间(Lock Time)内,FCLK停振,CPU停止工作。Lock Time的长短由寄存器LOCKTIME设定。


3、Lock Time之后,MPLL输出正常,CPU工作在新的FCLK下。LOCKTIME默认时间为200us。


 


-----------------------------------------o-------------------------------------------------


时钟分频流程如下图所示:(Fin默认为外部晶振时钟频率,12MHz。)


位于时钟信号发生器的内部MPLL用于将输出信号和相关输入信号在相位和频率上同步起来。包括上图所示的一些基本模块:根据DC电压产生相应比例关系频率的压控振荡器VCO,出书P(对输入频率Fin进行分频),除数M(对VCO的输出频率进行M分频,分频后输入到相位频率探测器PFD),除数S(对MPLL输出频率Mpll进行分频),相差探测器,charge pump,loop filter。


 


----------------------------o------------------------------------------------


时钟频率的计算关系:FCLK,HCLK,PCLK. (其中已经知道用于USB的UCLK位48MHz。)


一般情况下,这三个始终之间是存在一定的额比例关系的,默认情况下为1:1:1。但是通常情况下会设置为1:4:8或者1:3:6。寄存器CLKDIVN用于设置这三者之间的比例关系。


也就是说,如果CLKDIVN设置为0x5,那么比例即为1:4:8,前提是CAMDIVN[9]为0. 也就说如果主频FLCK是400MHz,按照1:4:8的设置,那么HLCK是100MHz,PLCK是50MHz。讲到这里主题也该突出,说到最后,问题的关键就是如何计算FCLK了吧!!!


 


--------------------------------ooo------------------------------------------


现在的CPU主频都是通过倍频的技术实现的,下面就描述下如何个倍频法:


1. MPLL. 对于S3C2440来说,常用的输入Fin主要有两种频率:12MHz和16.935MHz。CPU通过MDIV、PDIV和SDIV进行倍频得到MPLL,即FCLK。公式如下所示:


Mpll = (2 * m * Fin) / (p * 2^S)


m = (MDIV + 8), p = (PDIV + 2), s = SDIV;  1<=M<=248,1<=P<=62


理论上,我们可以通过设置任意值而得到我们想要的频率,然而由于实际存在种种的约束关系,设置一个适当的频率不容易,手册中推荐了如下的设置值:


例如,假设输入时钟FIN=16.9344M,MDIV=110, PDIV=3, SDIV=1,利用上面的公式,FCLK=2*16.9344*(110+8)/((2+3)*2)=399.65 MHz。


2. UPLL.上面已经详细的描述了MPLL的设置过程。下面着重描述USB的使用频率UPLL的设置。需要对UPLLCON寄存器设置,如上上图所示。同样也可以通过查表。


Upll = (m * Fin) / (p * 2^S)


m = (MDIV + 8), p = (PDIV + 2), s = SDIV


需要注意的是CLKDIVN寄存器的第三位DIVN_UPLL用来设置USB时钟UCLK和UPLL的关系,如果UPLL已经是48Mhz了,那么这一位应该设置为0,表示1:1的关系,否则是1:2的关系。由于目标USB只需要48MHz的频率,所以源频率,即UPLL只能为48或者96。


 


--------------------------------ooo------------------------------------------


讲到这里,重点都说了哇,不多还有些特别的东西需要提出来下。


1. 在arm的体系中,还存在一个概念,叫做慢时钟模式的概念,即将时钟减半或者关闭,以减少能源消耗。可以通过CLKSLOW和CLKDIVN寄存器相互配合实现。如下图所示:


2. arm体系中很多模块都需要时钟,要是能够将不需要使用时钟的外设的时钟共用给关了,也能减少消耗,在arm中提供了这样的寄存器给予定制,即CLKCON寄存器。


3. 专门用于相机时钟设定的寄存器CAMDIVN。如下图所示,在分频时候用到了HCLK4_HALF、HCLK3_HALF。


没了~~~


------------over----------------------------------------


样例程序如下:


[PLL_ON_START   ; //设置CLKDIVN的值在PLL锁存时间LOCKTIME之后有效。


;Configure FCLK:HCLK:PCLK
 ldr r0,=CLKDIVN  
 ldr r1,=CLKDIV_VAL  ;CLKDIV_VAL=7, 7=1:3:6. Fclk:Hclk:Pclk
 str r1,[r0]


 


;Configure UPLL  //UPLL
 ldr r0,=UPLLCON
 ldr r1,=((U_MDIV<<12)+(U_PDIV<<4)+U_SDIV)  ; //Fin = 12.0MHz, UCLK = 48MHz
 str r1,[r0]


 


;Configure MPLL  //MPLL
 ldr r0,=MPLLCON
 ldr r1,=((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV)  ; //Fin = 12.0MHz, FCLK = 400MHz
 str r1,[r0]
    ]


 


END.!!!

关键字:ARM系列  时钟模块  分频系数 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址