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”

  
发布了6 篇原创文章 · 获赞 10 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览