欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

S3C2440之提高系统时钟

程序员文章站 2024-02-22 18:40:34
...

  一、S3C2440时钟体系:

1、S3C2440可以使用外接晶振,然后通过内部产生时钟源;也可以直接使用外部时钟源。时钟控制逻辑提供FCLK、HCLK、PCLK三种时钟,FCLK用于CPU核、HCLK用于AHB总线(主要用于高性能模块之间连接)、PCLK用于APB总线(主要用于低带宽周边外设之间连接)。

2、当S3C2440 CPU核工作电压为1.2V时,主频可达到300MHz;工作电压为1.3V时,主频可达400MHz。

S3C2440之提高系统时钟


3、上电时,PLL并没有启动,此时FCLK等于外部输入的时钟(Fin)。若提高时钟,则需要软件配置启动PLL。上电后。晶体振荡器开始振荡,在几毫秒后,当nRESET在稳定OSC (XTIpll)时钟后才会被释放。

S3C2440之提高系统时钟


  二、编程提高运行时钟:

1、设置LOCKTIME寄存器(LOCK TIME COUNT REGISTER),此寄存器用于设置Lock time的长度。MPLL启动后需要等待一段时间(Lock time),使其输出稳定。一般来说,使用默认值0xFFFFFFFF即可;

2、设置CLKDIVN寄存器(CLOCK DIVIDER CONTROL (CLKDIVN) REGISTER),此寄存器用于设置FCLK、HCLK、PCLK之间比例;

S3C2440之提高系统时钟


3、设置CPU工作与异步模式;

S3C2440之提高系统时钟


4、设置MPLLCON寄存器(MPLL CONTROL REGISTER),此寄存器用于设置FCLK与Fin的倍数。公式为:

                Mpll = (2 * m * Fin) / (p * 2S)
                m = (MDIV + 8), p = (PDIV + 2), s = SDIV

S3C2440之提高系统时钟


  三、代码:

/* 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”

  
相关标签: S3C2440系统时钟