S3C6410的ARM内核是 ARM1176JZF-S ,在1.1v下最高可以跑 533MHz,1.2v可以跑 667MHz。
S3C6410用的是可以使用外部晶振
(XXTIpll)和外部时钟(XEXTCLK),两种方式输入时钟信号.它由跳线OM[0]决定,这一位为0,选择XXTIpll .否则选择 XEXTCLK.
APLL/MPLL/EPLL
S3C6410提供三种PLL,它们是APLL,MPLL和EPLL.他们提高不同倍数来给不同模块来使用.理论上可PLL可以倍频到1.6GHz.
APLL即ARM PLL,
MPLL即 Main PLL,
EPLL即extra PLL,
![](http://blogimg.chinaunix.net/blog/upfile2/101128205539.jpg)
由上框图可以看出,APLL倍频后信号给ARM11内核,
MPLL倍频信号给ARM周边 AXI,AHB,APB三个总线,中间各个设备常用的HCLK和PCLK时钟频率也是从这里分频出去的。
其中AXI/AHB总线设备使用 HCLK频率,APB总线设备使用PCLK频率。
而EPLL主要是给需要特殊频率的设备UART/IIC/IIS等设备提供的
HCLK/PCLK/HCLKX2/
ARM11内核最高可以达到667MHz主频,而其内部自带一个分频器(divider)-- DIVRAM,最高可以做到16分频.
而ARM11内核与其它内部模块通过三个总线AXI/AHB/APB相连,AXI总线/AHB总线设备,运行速度最高可达到133MHz的.即HCLK频率 而APB总线的设备最高是66MHZ,即PCLK频率.
S3C6410还会有一额外的 HCLKX2 两个DDR控制器,DDR0和DDR1的来单独使用,它最高可以到266MHz,单独这样处理会降低功耗。
如果觉得HCLK频率过高,可以通过DIVHCLK 分频器通过一频降频,PCLK也能通过DIVPCLK来分频。
![](http://blogimg.chinaunix.net/blog/upfile2/101128212241.jpg)
在上图还出现在DIVJPEG和DIVSEC,这里是因为硬件JPEG加速模块和安全模块这两个虽然是挂在AHB总线上,但不能运行在133MHZ频率之上,因此这两个模块需要两个特殊分频器(DIVCLKJPEG 和DIVCLKSECUR)来单独分频。
这样有如下换算关系。
注意后面的写法 0/668MHZ 这里不是分数表达,前面是预分频因子 !(即SFR)后面分频后的输出频率.
它有
Fout = Fin / (SFR +1) 关系
以最后一行为例,前面两列是倍频后时钟频率,这里当APLL倍频后达到667MHZ,MPLL倍频到266MHz后,
后面各列经过各个分频器后输出时钟频率,而且这里变化是APLL的频率,而MPLL倍频后的时钟频率始终为266MHZ.
DIVarm分频因子为0,
即从APLL输入到CPU后仍然是 667MHZ
因此在S3C6410软件中,我们可以把如下频率看成是常量
DIVhclkx2 分频因子为0,这样从MPLL输入,得到
HCLKX2的时钟频率为 266MHZ.
DIVhclk 分频因子为1,这样从MPLL输入,得到
HCLK的时钟频率为 133MHZ.
DIVclkjpeg/DIVpclk/DIVclkjsecuse 分频因子均为3,这样从MPLL输入,得到
PCLK的时钟频率为 66MHZ,CLKJPEG/CLKSECUSE也是如此
特殊时钟频率
有不少模块采用特殊的时钟频率,这一些模块往往采用EPLL作为输入时钟频率,如LCD的时钟频率
![](http://blogimg.chinaunix.net/blog/upfile2/101128221612.jpg)
如何判断IP模块所属总线?
S3C6410比较简单,它有三个寄存器,HCLK_GATE, PCLK_GATE,SCLK_GATE用来判断各个模块需要使用哪一个时钟频率。
只要看哪一个模块在哪一个GATE寄存器,即采用哪种频率
![](http://blogimg.chinaunix.net/blog/upfile2/101128220738.jpg)
使用PCLK的设备
![](http://blogimg.chinaunix.net/blog/upfile2/101128220927.jpg)
SCLK_GATE是指明一些模块采用特殊频率
![](http://blogimg.chinaunix.net/blog/upfile2/101128221052.jpg)
S3C6410 APLL /MPLL 锁相环倍数设定
在S3C6410系统中,锁相环的倍和输入频率,还有输出频率都不是随便设定,而且有要求,并能满足一定公式。
APLL倍数
一般输入晶振要求 12mHZ.基本是衡定不变的,以Fin表示。这样要求CPU在不同频率下运行,它的频率用Fout表示,必须要调整参数,其中需要满足如下公式
下列公式中MDIV/PDIV/SDIV就是软件开发者要设置的值
![](http://blogimg.chinaunix.net/blog/upfile2/101128223241.png)
为了简化开发,一般会有如下固定值给开发来设定
![](http://blogimg.chinaunix.net/blog/upfile2/101128223414.png)
其中APLL的设置由APLL_CON来设置,MPLL的设置由EPLL_CON来设置它们有如下格式
![](http://blogimg.chinaunix.net/blog/upfile2/101128223606.png)
如想设置主频为667MHz ,则寄存器要设为
rAPLL_CON = (1<<31) |(33 <<16) | ( 3 << 8) | (1<< 0);
本博客转载自
http://blog.csdn.net/yangzhu1982/article/details/6096123,对6410时钟总结的不错,收藏了。