历史上的今天
今天是:2024年10月13日(星期日)
2021年10月13日 | S3C2440裸机------时钟
2021-10-13 来源:eefocus
1.S3C2440的时钟体系
1.1.S3C2440结构框图

从上面的结构图可以看出,S3C2440主要分为CPU,高速总线,低速总线。其中
CPU工作与FCLK
AHB总线工作于HCLK,AHB(Advance High performance Bus)总线主要用于高性能模块。
慢速外设工作于PCLK,APB(Advance Peripheral Bus)总线主要用于低贷款的周边外设之间的连接。

我们的S3C2440硬件电路板上,时钟源是一个12M的晶振,我们用PLL锁相环可以得到上面的三种频率。
1.2 S3C2440时钟树

从上图的左上角可以看出,时钟源有两个选择,可以是晶振,也可以是直接从EXTCLK管脚输入的时钟。具体选择什么时钟源由后面的OM进行选择,我们的电路图中OM的两个管脚都是接地低电平的,因此使用晶振作为时钟源。
然后往后有两个PLL,MPLL和UPLL,分别是MAIN PLL和USB PLL.
晶振经过MPLL,得到FCLK提供给CPU,然后FCLK经过HDIV分频可以得到HCLK提供给AHB总线,经过PDIV得到PCLK提供给APB总线。
晶振经过UPLL然后给USB提供时钟。

1.3 S3C2440上电顺序

2.寄存器配置
下面我们编程来配置S3C2440的时钟,我们配置FCLK=400M,HCLK=100M, PCLK=50M。我们需要设置MPLLCON寄存器让FCLK=400M.然后设置CLKDIVN让HCLK=FCLK/4, PCLK=FCLK/8.
2.1CLKDIVN寄存器

我们把CLKDIVN[2:1]的HDIVN设置为10,然后CLKDIVN[0]的PDIVN设置为1.
2.2MPLLCON寄存器

我们通过设置MDIV=92,PDIV=1,SDIV=1就可以设置FCLK=400M.
2.3设置CPU为异步模式
另外,芯片手册里面有一个注意事项,如果我们的HDIVN不是零的话,CPU总线必须设置为异步模式,否则CPU会使用HCLK而不是FCLK.所以我们要设置CPU为异步模式。

3.编程
修改之前的start.S.
.text
.global _start
_start:
/* 关闭看门狗 */
ldr r0, =0x53000000
ldr r1, =0
str r1, [r0]
/* 设置MPLL, FCLK : HCLK : PCLK = 400m : 100m : 50m */
/* LOCKTIME(0x4C000000) = 0xFFFFFFFF */
ldr r0, =0x4C000000
ldr r1, =0xFFFFFFFF
str r1, [r0]
/* 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]
/* 一旦设置PLL, 就会锁定lock time直到PLL输出稳定
* 然后CPU工作于新的频率FCLK
*/
/* 设置内存: sp 栈 */
/* 分辨是nor/nand启动
* 写0到0地址, 再读出来
* 如果得到0, 表示0地址上的内容被修改了, 它对应ram, 这就是nand启动
* 否则就是nor启动
*/
mov r1, #0
ldr r0, [r1] /* 读出原来的值备份 */
str r1, [r1] /* 0->[0] */
ldr r2, [r1] /* r2=[0] */
cmp r1, r2 /* r1==r2? 如果相等表示是NAND启动 */
ldr sp, =0x40000000+4096 /* 先假设是nor启动 */
moveq sp, #4096 /* nand启动 */
streq r0, [r1] /* 恢复原来的值 */
bl main
halt:
b halt
4.实验
我们之前的LED实验里面,LED闪烁的时候有延时函数,当我们提高了时钟频率之后,会发现LED闪烁的比之前快。
下一篇:ARM中的汇编和机器码
史海拾趣
|
Wince6.0下面检测到SD卡后串口提示响应超时,但是SD卡可以正常识别和使用,请高手指点如何才能解决响应超时的问题 我使用的是PXA310平台,SD卡插入插槽后开机,刚开机的一段时间内串口打印的信息提示错误 串口信息如下 [MMC] SDH_INIT, Index:0 [MMC] SDH_INIT, cao:0 [MMC] SDH_INIT, intrTHreadP:100 [MMC] SDH_INIT, IstThreadP:101 [MMC] DMA BUFFER ...… 查看全部问答> |
|
smdk2440下串口输出一些debug信息后就再没debug信息了 板子启动后,输出了一些诸如\"HW_Init, PWR_Init, PWR_Open, PWR_IOControl, PWR_Close\"的debug信息后,就没再有debug信息了,输出的那些信息都是在smdk2440\\drivers\\pwrbtn_pcf\\目录下的,而同目录下别的文件里的debug信息都打印不出来,我在t ...… 查看全部问答> |
|
现在急需在武汉做Linux C/C++ 嵌入式开发的程序员,主要是做手机界面,因此需要在界面开发上有经验的人 请联系:陈先生 手机:13100628660 简历发至邮箱:peng.chen.wh@gmail.com… 查看全部问答> |
|
理解功率MOSFET的UIS及雪崩能量(图) 作者:万代半导体元件上海有限公司 刘松 葛小荣 日期:2010-4-4 来源:今日电子 在功率MOSFET的数据表中,通常包括单脉冲雪崩能量EAS,雪崩电流IAR,重复脉冲雪崩 ...… 查看全部问答> |




