ok6410时钟初始化
2016-03-18 20:35
309 查看
ok6410时钟体系需要懂得事:
1.晶振多少赫兹
2.有多少锁相环(PLL)
3.锁相环产生哪些时钟
4.时钟是干什么的
ok6410时钟初始化要做的事:
1.配置locktime
2.设置分频系数
3.配置FCLK
4.如果FCLK ≠ HCLK,设置CPU到异步模式
首先看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))
;设置APLL、MPLL
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 ;6、7位都需设置为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 ;6、7位设置为0
;设置APLL、MPLL
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.晶振多少赫兹
2.有多少锁相环(PLL)
3.锁相环产生哪些时钟
4.时钟是干什么的
ok6410时钟初始化要做的事:
1.配置locktime
2.设置分频系数
3.配置FCLK
4.如果FCLK ≠ HCLK,设置CPU到异步模式
平台 | 晶振 | 锁相环 | 时钟 | 应用场合 | 举例 |
6410 | 12M | APLL | ACLK | 处理器 | ARM11内核 |
MPLL | HCLK | AHB总线 | LCD、DMA | ||
PCLK | APB总线 | Uart、GPIO | |||
EPLL | SCLK | USB总线 | USB主从口 |
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))
;设置APLL、MPLL
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 ;6、7位都需设置为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 ;6、7位设置为0
;设置APLL、MPLL
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用户手册》
相关文章推荐
- 字符指针的初始化以及程序分析实例
- 生产计划
- lintcode:排颜色 II
- gson处理多层嵌套的复杂形式的json
- LINUX编程学习路线
- 机房重构—策略模式简单用
- .dsw和.dsp文件有什么区别?
- [扫描线 线段树 拓扑排序] BZOJ2584 [Wc2012]memory
- hdu 2079 课时间(题目已修改,注意读题)
- servlet中请求转发(forword)与重定向(sendredirect)的区别
- 【Code Art / C#】文字转换成字符画
- 数论(毕达哥拉斯定理):POJ 1305 Fermat vs. Pythagoras
- 求1+2!+3!+...+20!的和
- 指针与引用
- android 修改 SwitchPreferenceCompat 高度,内边距,字体大小
- 总结
- hdu 2602 01背包,hdu 1114 完全背包
- hdu 1015 Safecracker【DFS】
- hdu 1260 Tickets 动态规划
- HDOJ 2004 成绩转换