【说明】
我们的ARM11最高可以跑500到600MHZ,但是其实并不是一启动开发板就这个速度的,相反,我们如果启动开发板后没有进行时钟设置,CPU是不会跑这么快的。这一节,我们就来简单分析6410的时钟体系,下一节写代码区设置时钟,使得CPU跑到500MHZ以上!
【原理图分析】
我们先来一张全局图,有个大概的了解,然后分块分析
1】全局图
2】时钟源的选择(全局图的左上角)
1)OM[0] = 0 ,这个是硬件设置的,我的板子TINY6410晶振频率是12M
2)FOUT的计算手册中提供了公式,上边是参考手册的,而FIN显然就是外部晶振12M啦,MDIV,PDIV,SDIV是设置寄存器来控制的,等下会说
3)CLK_SRC[0] 如果是0就让FINAPLL通过, 如果是1就让FOUT 通过,显然我们想让FOUT(不然我们设置它干什么)
3】主时钟分频(在上边那张图的右边)
1)第一个多路选择器我们选择0,也就是不要分频,直接输出,这个用MISC_CON[19] 位控制
2)DIVIDER 可以继续分频,根据ARMCLK的公式就可以得最终输出给CPU的时钟了
4】MPLL
这个和上边一样的,,就不需要多解释了。
5】DOUTMPLL(中间部分)
1)DOUTAPL的设置中,MPLL_RATIO 是要设置后面的寄存器的
2)MISC_CON[19] 控制SYNC667
6】HCLK与PCLK
这2个最终的输出频率是给外设用的
1)同样的,HCLKX2_RATIO ,HCLK_RATIO, PCLK_RATIO都要设置寄存器,公式手册上都有,不过还是看着图比较直观
【相关寄存器】
1】PLL_LOCKTIME
1)我们设置好寄存器之后,PLL不是瞬间就到达我们期望的532MHZ,而在他上升的过程中,我们要让CPU停止工作一段时间,等到PLL稳定后才继续工作,下图很好的解释了这个过程
2】OTHERS寄存器
1)专门挑这几位是因为,当CPU始终和内存时钟不一致的时候,需要设置为异步模式
2)设置异步模式首先要清第6,7位,然后循环查看8到11位知道这3位为0,这样就成功设置为异步模式了
3】CLK_DIV
1)这三个寄存器就是设置上边原理图中标注的各种RATIO, 具体的大家查查手册吧。
4】APLL_CON, MPLL_CON
1)里面的那几位是不是很眼熟啊!没错,就是前面公式里边的,现在好了,公式也知道了,原理也知道了,很好理解了,不过还有一个寄存器需要介绍
5】CLK_SRC
1)我们先设置分频系数,设置APLL和MPLL的输出频率,最后再来设置时钟源,切换到FOUT