ok6410时钟初始化

来源:互联网 发布:游戏数据分析报告 编辑:程序博客网 时间:2024/04/28 02:48

ok6410时钟体系需要懂得事:

1.晶振多少赫兹 

2.有多少锁相环(PLL)

3.锁相环产生哪些时钟

4.时钟是干什么的

ok6410时钟初始化要做的事:

1.配置locktime

2.设置分频系数

3.配置FCLK

4.如果FCLK ≠ HCLK,设置CPU到异步模式


平台

晶振

锁相环

时钟

应用场合

举例

 

 6410

 

 

12M

APLL

ACLK

处理器

ARM11内核

   MPLL

HCLK

AHB总线

LCDDMA

PCLK

APB总线

UartGPIO

EPLL

SCLK

USB总线

USB主从口


首先看6410的时钟体系图,根据此图来进行配置


lock time设置为默认即可,如有需要在进行设置,所以第一步可跳过,直接进行第二步设置分频系数。



由这两张图可得以下关系:

ARMCLK=APLL/(DIVARM+1);

HCLKX2=MPLL/(DIVHCLKX2+1);

HCLK=HCLKX2/(DIVHCLK+1);

PCLK=HCLKX2/(DIVPCLK+1);


由此设置分频系数

#define CLK_DIV0 0X7E00F020

#define DIV_VAL ((0x0 << 0)|(0x1 << 9)|(0x1 << 8)|(0x3 << 12))


ldr r0, =CLK_DIV0

ldr r1, =DIV_VAL

str r1,[r0]


设置flock只需设置APLL、MPLL




由此可设置MPLL、APLL,代码如下

#define MPLL_CON 0x7e00f010

#define APLL_CON 0x7e00f00c

#define PLL_VAL ((1 << 31) | (266 << 16) |(3 << 8)|(1 << 0))

;设置APLLMPLL

ldr r0, =APLL_CON

ldr r1, =PLL_VAL

str r1, [r0]

 

ldr r0, =MPLL_CON

ldr r1, =PLL_VAL

str r1, [r0]


然后设置异步模式,2440中,通过CP15协处理器设置,而ok6410中有专门寄存器来进行设置


0:异步模式

1:同步模式

;设置异步模式

ldr r0, =OTHERS

ldr r1,  [r0]

bic r1,r1,#0xc0 ;67位都需设置为0,由时钟图和上图可得


最后,0k6410还需设置OTHERS的时钟来源,


#define CLK_SRC 0x7e00f01c

ldr r0, =CLK_SRC

mov r1, #0x3

str r1, [r0] 


到此所有设置已完,总代码如下:

init_clock

;设置分频系数

ldr r0, =CLK_DIV0

ldr r1, =DIV_VAL

str r1,[r0]

 

;设置异步模式

ldr r0, =OTHERS

ldr r1,  [r0]

bic r1,r1,#0xc0 ;67位设置为0

 

;设置APLLMPLL

ldr r0, =APLL_CON

ldr r1, =PLL_VAL

str r1, [r0]

 

ldr r0, =MPLL_CON

ldr r1, =PLL_VAL

str r1, [r0]

 

ldr r0, =CLK_SRC

mov r1, #0x3

str r1, [r0] 

 

mov pc, lr




参考资料:《S3C6410用户手册》

1 0
原创粉丝点击