- FCLK 时钟用于CPU
- HCLK时钟用于AHB bus 外设
- PCLK 时钟用于 APB bus 外设
S3C2440 有两个锁相环(PLLs),
一个用于FCLK,HCLK,PCLK
另一个专门用于USB 模块
时钟控制逻辑可以在没有PLL的情况下制作慢速时钟,并通过软件将时钟连接/断开与每个外围模块的连接,从而降低了功耗。
通过在片内集成的2个锁相环:MPLL和UPLL,可对输入的Fin=12MHz的晶振频率进行倍频。S3C2440使用了三个倍频因子MDIV、PDIV和SDIV来设置倍频,通过寄存器MPLLCON和UPLLCON可设置倍频因子。其中MPLLCON寄存器用于设置处理器内核时钟主频FCLK,其输入输出频率间的关系为
FCLK=MPLL=(2*m*Fin)/(p*2^s)
其中m=(MDIV+8), p=(PDIV+2), s=SDIV。
其中UPLLCON寄存器用于产生48MHz或96MHz,提供USB时钟(UCLK),其输入输出频率间的关系为
UCLK=UPLL=(m * Fin) / (p * 2^s)
其中m=(MDIV+8), p=(PDIV+2), s=SDIV。
手工计算相对复杂些,我们可以根据欲得到的主频FCLK大小,直接通过查表来获知各倍频因子的设置参数,详见。
S3C2440的数据手册中提供了一个表格来查询各个输出频率和输入频率所对应的MPLL中参数m、p和s的值,使用的时候最好只使用该表格中推荐的数值。
除了可设置内核时钟FCLK,还需要设置AHB总线设备使用的HCLK和APB总线设备使用的PCLK。通过CLKDIVN和CAMDIVN这两个寄存器可设置三者的分频关系,如图4 为CLKDIVN的说明,可以通过设置CLKDIVN和CAMDIVN的相关位来设置这三个时钟。
2440提供了CLKOUT0和CLKOUT1这两个引脚用于测试时钟。可以通过设置MISCCR寄存器的CLKSEL0和CLKSEL1位来选择CLKOUT0和CLKOUT1的时钟源。其时钟源分别有000=MPLL输出,001为UPLL输出,010为RTC输出,011为HCLK,100为PCLK,101为DCLK1/0,11X为保留的。
main clock 时钟源 来自 外部晶振(XTIpll)或者外部时钟(EXTCLK)
时钟发生器包括一个振荡器(oscillator)(振荡放大器)(Oscillation Amplifier),它是连接到外部晶振,并且还具有两个PLL(锁相环),它们产生高电平S3C2440A需要的频率时钟。
再普通操作模式下设置时钟步骤:
1、设置 CLKDIVN
2、设置PMS
3、set CLKDIVN registe
如何设置寄存器使其能正常运行
上图表达了MO[3:2]控制了时钟源时什么
下面是按照FCLK=400 HCLK =200 PCLK = 200
notes:
1)虽然MPLL在打开重新reset之后就会启动。但是只有当有效的设定MPLLCON寄存器,之后MPLL才会作为系统的时钟,在这之前时钟直接使用来自晶振或外部的时钟作为系统的时钟,所以即使你不想修改默认的MPLLCON寄存器的值,你还是要去设置默认值给MPLLCON寄存器
2)当OM[1:0] 是11的时候,OM[3:2}被用做test mode的选择
这里我们设置OM[3:2] = 00
设置MPLL lock time = 0xffff
按照表输入12MHZ 输出400MHZ设置
开启具体哪个功能的时钟控制
时钟分频寄存器
设置HDIVN =01 PDIVN = 1
代码: