S3C2440之提高系统时钟
一、S3C2440时钟体系:
1、S3C2440可以使用外接晶振,然后通过内部产生时钟源;也可以直接使用外部时钟源。时钟控制逻辑提供FCLK、HCLK、PCLK三种时钟,FCLK用于CPU核、HCLK用于AHB总线(主要用于高性能模块之间连接)、PCLK用于APB总线(主要用于低带宽周边外设之间连接)。
2、当S3C2440 CPU核工作电压为1.2V时,主频可达到300MHz;工作电压为1.3V时,主频可达400MHz。
3、上电时,PLL并没有启动,此时FCLK等于外部输入的时钟(Fin)。若提高时钟,则需要软件配置启动PLL。上电后。晶体振荡器开始振荡,在几毫秒后,当nRESET在稳定OSC (XTIpll)时钟后才会被释放。
二、编程提高运行时钟:
1、设置LOCKTIME寄存器(LOCK TIME COUNT REGISTER),此寄存器用于设置Lock time的长度。MPLL启动后需要等待一段时间(Lock time),使其输出稳定。一般来说,使用默认值0xFFFFFFFF即可;
2、设置CLKDIVN寄存器(CLOCK DIVIDER CONTROL (CLKDIVN) REGISTER),此寄存器用于设置FCLK、HCLK、PCLK之间比例;
3、设置CPU工作与异步模式;
4、设置MPLLCON寄存器(MPLL CONTROL REGISTER),此寄存器用于设置FCLK与Fin的倍数。公式为:
Mpll = (2 * m * Fin) / (p * 2S)
m = (MDIV + 8), p = (PDIV + 2), s = SDIV
三、代码:
/* LOCKTIME(0x4C000000) = 0xFFFFFFFF */
ldr r0, =0x4C000000
ldr r1, =0xFFFFFFFF
str r1, [r0]
/* 设置MPLL, FCLK : HCLK : PCLK = 400m : 100m : 50m */
/* CLKDIVN(0x4C000014) = 0X5, tFCLK:tHCLK:tPCLK = 1:4:8 */
ldr r0, =0x4C000014
ldr r1, =0x5
str r1, [r0]
/* 设置CPU工作于异步模式 */
mrc p15,0,r0,c1,c0,0
orr r0,r0,#0xc0000000 //R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0
/* 设置MPLLCON(0x4C000004) = (92<<12)|(1<<4)|(1<<0)
* m = MDIV+8 = 92+8=100
* p = PDIV+2 = 1+2 = 3
* s = SDIV = 1
* FCLK = 2*m*Fin/(p*2^s) = 2*100*12/(3*2^1)=400M
*/
ldr r0, =0x4C000004
ldr r1, =(92<<12)|(1<<4)|(1<<0)
str r1, [r0]
注:1、一旦设置PLL, 就会锁定lock time直到PLL输出稳定然后CPU工作于新的频率FCLK
2、orr r0,r0,#0xc0000000 //R1_nF:OR:R1_iA 是对协处理器的操作,nF和iA是控制CPU总线模式的,意思是让CPU的总线模式从“fast bus mode”变为“asynchronous bus mode”
上一篇: stm32f4编码器模式