您的位置 首页 编程

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

S3C2440的时钟控制单元可以产生如下的时钟信号:FCLKFORCPU,HCLKFORAHBBUS(高速设备,比如内存控制器、中断控制器、LCD控制器…

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
ldrr0,=CLKDIVN
ldrr1,=CLKDIV_VAL;CLKDIV_VAL=7,7=1:3:6. Fclk:Hclk:Pclk
strr1,[r0]

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

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

END.!!!

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/biancheng/275149.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部