在使用任何一种处理器芯片时,都有必要其时钟配置有清楚地认识,能够灵活掌握其配置方法。在此,就我对S3C2440的时钟配置的认识做简要介绍,若有不合适之处,还望朋友们可以指正。
通过S3C2440的模式选择引脚(OM2&OM3)的组合方式可以选择S3C2440的时钟源(外部晶振XTIPLL或是外部时钟EXTCLK)。我现有实验板的的OM2、OM3引脚为低电平,则复位后系统主时钟及USB总线时钟均由外部晶振XTIPLL(=12MHz)提供。
S3C2440处理器的工作频率可达400MHz,这是由于在片内集成有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的数据手册。
利用12MHz的外部晶振得到271.5MHz的主频,可设置MDIV=173(0xad), PDIV=2, SDIV=2.
除了可设置内核时钟FCLK,常常还需要设置AHB总线设备使用的HCLK和APB总线设备使用的PCLK,三者之间的关系如何呢?通过寄存器CLKDIVN可设置三者的分频关系,具体可参观数据手册中对此的说明。通常设置三者为1:4:8,1:3:6的分频关系,即若主频FLCK是400MHz,按照1:4:8的设置,那么HLCK是100MHz,PLCK是50MHz。
若CLKDIVN设置为0x5,那么比例即为1:4:8。前面我们设置271.5MHz的主频,则PCLK=33.9375MHz,可将该频率映射到CLKOUT0引脚,对其测试验证。
编制汇编程序如下:
AREA Example,CODE,READONLY;声明代码段Example
ENTRY ;标示程序入口
CODE32 ;声明32位ARM指令
START LDR R0, =0x000ad022 ;FCLK=271.5MHz
LDR R1, =0x4C000004 ;MPLLCON寄存器
STR R0,[R1]
LDR R0, =0x00000005 ;FCLK:HCLK:PCLK=1:4:8
LDR R1, =0x4C000014 ;CLOCK DIVIDER control
STR R0,[R1]
LDR R0, =(0xa<<18) ;CLKOUT0、CLKOUT1引脚复用
LDR R1, =0x56000070 ;端口H控制寄存器
STR R0,[R1]
LDR R0, =(0x86<<3) ;输出HCLK及PCLK
LDR R1, =0x56000080 ;MISCCR寄存器
STR R0,[R1]
END
通过示波器测量,PCLK约为34MHz,HCLK约为68MHz,验证通过,O(∩_∩)O~
来自: http://hi.baidu.com/lhy%5F2010/blog/item/eebb47cc78faf1590fb345da.html