一。时钟源
ARM要正常运行,需要提供时钟,该时钟可能是晶振也可能是外部时钟。除了USB外,其他模块的时钟源,“一定”为同一时钟源,而USB和其他模块是否为同一时钟源呢?是由OM2,OM3引脚决定的,即有硬件设置决定的。分为同是外部时钟,同为晶振,分别为外部时钟和晶振共四种情况。
二。变频
时钟源具有一定的固定频率,并不意味着其他模块的时钟频率就一定为该固定频率,有时候需要改变频率。这一工作便是由“锁相环”完成的。“锁相环”的主要目的就是变频。
由于USB的特殊性,进而系统中也就有了两个“锁相环”,一个专门为USB服务,另一个为其他模块服务。只要向“锁相环”相关的寄存器中软件写入相应的值,便可实现输出频率的改变。
三。变频流程
由于两个“锁相环”工作原理一样,现在拿专门问系统内部模块服务的“锁相环”来说明,变频的过程。
可大体分为两种情况的变频:1.上电复位变频 2.在正常工作状态下变频
1,上电复位变频:上点复位后,在软件配置“PLLCON”锁定时间前,FCLK用的是时钟源。复位后,系统就根据软件写入寄存器PLLCON和LOCKTIME进行时钟配置了。配置好后,此时进入LOCKTIME阶段,此阶段下,FCLK的值变为0,同时锁相环的输出频率向Mpll的值(即配置好后的频率)靠近。等到LCOKTIME结束,输出频率为配置后的频率。此时FCLK的值变为Mpll的值。
2。 正常工作状态下变频:在正常工作状态下,改变频率,改变相关寄存器中值,然后,系统就会经过LOCTIME 然后正常运行,在LOCTIME期间,FCLK为0。配置好的频率,只有在LOCKTIME后方起作用。
四。关于分频
在主频MPS值设置好后,要马上设置CLKDIVN寄存器即分频系数寄存器中的值,以此设定HCLK和PCLK的值。CLKDIVN的值的改变也是在LOCKTIME后才起作用。
五。时钟管理相关的寄存器
LOCKTIME寄存器 默认值0xFFFFFFFF,其中低16位用于配置主模块的,高16位用于配置USB的
MPLLCON寄存器 配置主模块输出频率的 【1:0】名称为SDIV用于设置后分频,【9:4】名称为PDIV用于设置预分频,【19:12】主分频MDIV用于设置主分频。
UPLLCON寄存器 配置USB模块输出频率的 其中各位如MPLLCON寄存器一样。
那么输出频率和输入频率的关系式什么呢?如下公式所示:
Mpll=(2*m*Fin)/(p*2s(s此方)) m=MDIV+8,p=PDIV+2,s=SDIV
Mpll=(m*Fin)/(p*2s(s此方)) m=MDIV+8,p=PDIV+2,s=SDIV
注:在我们进行程序设计的时候,只需要将MDIV,PDIV,SDIV的值写入相应MPLLCON或UPLLCON寄存器相应位中即可。