刚看完韦东山老师的教学视频,写个随笔巩固一下下。
2440芯片上不止有cpu,还有 AHB高速总线(LCD,中断,USB,内存 控制器等),APB低速外设总线(I2C,I2S,GPIO等)。存在3个时钟,FCLK,HCLK(AHB),PCLK(APB).
2440有一个12m的晶振(时钟源),是通过锁相环PLL硬件实现倍频。2440芯片有两个PLL:MPLL、UPLL,时钟源经过MPLL, MPLL和UPLL (供给USB)通过 M、P、S 这3个参数确定FCLK输出频率。MPLL通过HDIVN和PDIVN分频之后确定HCLK和PCLK的频率,通过通过设置MPLL、HDIVN、PDIVN 给CPU提速。
2440CPU 启动过程。
1.上电之后,复位芯片等待电源稳定,会处于低电平一段时间,电源稳定之后才输出高电平。
2.根据OM[3:2]的值,此时的FCLK为12MHZ(时钟源的频率)
3.复位芯片输出高电平之后,会锁存OM[3:2]的值。
4.设置PLL的值,此时PLL开始工作,并等待PLL输出稳定之后(LOCK TIME寄存器)
5.FCLK输出新时钟。
涉及寄存器
设置CLKDIVN寄存器设置HDIVN和PDIVN。
设置MPLL寄存器
具体如何设置MDIV PDIV SDIV,下图提供了相关参考:
具体代码如下:
1 //设置LOCKTIME
2 ldr r0, =0x4C000000
3 ldr r1, =0xFFFFFFFF
4 str r1, [r0]
5
6 //设置MPLL FCLK:HCLK:PCLK = 400:100:50(1:4:8)
7 ldr r0, =0x4C000014
8 ldr r1, =0x5 //CLKDIV = Ox5 (0b101)
9 str r1, [r0]
10
11 //设置cpu为异步模式
12 mrc p15, 0, r0, c1, c0, 0
13 orr r0, r0, #0xc0000000
14 mcr p15, 0, r0, c1, c0, 0
15
16 /*设置时钟以最高频率运行 400MHZ*/
17 //MPLL= (92 << 12) | (1 << 4) | (1 << 0)
18 ldr r0, =0x4C000004
19 ldr r1, =(92 << 12) | (1 << 4) | (1 << 0)
20 str r1, [r0]