时钟初始化
首先,我们应该知道一点,mini2440开发板在没有开启时钟前,整个开发板全靠一个12MHz的外部晶振提供频率来工作运行的,也就是说CPU、内存、UART、ADC等所有需要用到时钟频率的硬件都工作在12MHz下,而S3C2440A可以正常工作在400MHz下,可想而知两者速度相差会有多大了。如果CPU工作在12MHz频率下,开发板的使用效率非常低,所有依赖系统时钟工作的硬件,其工作效率也很低,比如,我们电脑里面经常提到的超频,超频就是让CPU工作在更高的频率下,让电脑运算速度更快,虽然频率是越高越好,但是由于硬件特性决定了任何一个设备都不可能无止境的超频,电脑超频时要考虑到CPU或主板发热过大,烧坏的危险,同样开发板的主板上的外设和CPU也有一个频率限度,ARM920T内核的S3C2440的最高正常工作频率如下:
CPU工作于FCLK,AHB总线工作于HCLK ,APB总线工作于PCLK。不设置时钟就工作在晶振频率12M。设置之后可以工作在400M
使用锁相环来生产时钟,一个MPLL生产时钟给CPU用,一个UPLL生产时钟给USB用。
时钟信号来自于12M的晶振或者外部时钟信号。
为什么需要不同种类的时钟呢?
由于不同的硬件外设工作时需要的额定频率不同,所以需要产生不同种类的时钟频率。也就是说,对于一些需要时钟工作的硬件,如果切断其时钟源,就不会再工作了,从而达到低功耗的目的,这也是便携嵌入式设备的一个特点。
选择器OM决定时钟源。有这三个参数决定主频FCLK
HDIVN决定HCLK的值,PDIVN决定PCLK的值。如山图所示。
002编程实现时钟分配
首先设置FCLK-400M HCLK-100M PCLK-50M
设置分频HDIVN 和PDIVN 要设置寄存器CLKDIVN
HDIVN要等于0b10 前提是CAMDIVN[9] = 0;设置;PDIVN 位置1
使用默认值即可。
设置FCLK = 400M(mini2440 手册上面说了最多达到400M )
读到:MDIV = 127 ;PDIV = 2 ;SDIV = 1.
验证:计算公式
m =127+8=135 p=2+2=4 s=1 MPLL=(2135fin–12)/(4*2)=405(验证了一下)实际应该只有400M
接下来设置寄存器编程:
MDIV = 127 ;PDIV = 2 ;SDIV = 1.
移位操作:(127<<12)|(2<<4)|(1<<0)设置完这几个寄存器之后还要注意到一些问题。
如果没有设置CPU为异步模式,则CPU工作于HCLK频率。所以要在.s文件里面做以上设置。
总的来说很简单,代码不贴了,需要的留言提供。