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

bootloader系列四——时钟初始化

程序员文章站 2022-06-08 22:58:01
...

2440的时钟模块如下图(2440芯片手册237页) ,下载链接见上一篇博客。

bootloader系列四——时钟初始化

S3C2440可以使用外部晶振(XTIpll)(默认为12MHZ)
和外部时钟(EXTCLK)两种方式输入时钟信号。它由跳
线OM[3:2]决定。 S3C2440 默认的工作主频为12MHz
(晶振频率),S3C2440有两个PLL:MPLL和UPLL。通
过MPLL会产生三个部分的时钟频率:FCLK、HCLK、
PLCK。UPLL则负责产生USB所需时钟UCLK。如下图

bootloader系列四——时钟初始化

 开发板上电后,时钟初始化流程如下图,刚通电时,FCLK为晶振频率12MHz,经过软件配置及Lock Time之后,FCLK变为高频(本例中为405MHz)。

 bootloader系列四——时钟初始化

从2440芯片手册243页可以看到下图所示的信息

bootloader系列四——时钟初始化 

于是,可以总结出时钟初始化的流程:

  配置Lock Time  —》 设置分频系数  —》设置CPU总线模式为异步模式  —》 设置FCLK

 

首先,

设置Lock Time的寄存器如下图,(2440芯片手册254页)。但由于Lock Time一般取默认值,所以可以省去“配置Lock Time”这一步骤。

bootloader系列四——时钟初始化

之后,

2440设置FCLK、PCLK、HCLK的比例关系如下图所示,本例选1:4:8的比例。(2440芯片手册242页)。

bootloader系列四——时钟初始化

设置分频系数所使用的寄存器如下图所示,(2440芯片手册258页) 

bootloader系列四——时钟初始化

接下来, 

根据243页的NOTES,将CPU总线模式设置为异步模式。

最后,

设置FCLK的寄存器如下图(2440芯片手册第255页)

bootloader系列四——时钟初始化

 得到以上信息后,时钟初始化的代码如下

#define CLKDIVN 0x4c000014
#define MPLLCON 0x4c000004
#define MPLL_405MHZ ((127<<12)|(2<<4)|(1<<0))

init_clock:
	ldr r0, =CLKDIVN
	mov r1, #0x5
	str r1, [r0]
	
	mrc p15,0,r0,c1,c0,0
	orr r0,r0,#0xc0000000
	mcr p15,0,r0,c1,c0,0
	
	ldr r0, =MPLLCON
	ldr r1, =MPLL_405MHZ
	str r1, [r0]
	mov pc, lr