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闪烁的比之前快。
上一篇:S3C2440裸机------UART/串口
下一篇:ARM中的汇编和机器码
推荐阅读最新更新时间:2024-11-08 10:22
设计资源 培训 开发板 精华推荐
- 使用 ROHM Semiconductor 的 BM1P061FJ 的参考设计
- 多功能集成于一体的小计算机系统
- 使用 NXP Semiconductors 的 TDA3681 的参考设计
- 使用 Analog Devices 的 LTC2609CGN-1 的参考设计
- ER_201612_PL16_04,用于电池供电的低压 BLDC 电动工具电机驱动器的电动工具 ME/MF DirectFET 套件
- MIC59150 的典型应用:超高速 1.5A LDO
- SIM卡转接板
- LED声控灯2
- MC33172VDR2G 有源高 Q 陷波滤波器的典型应用
- LTC2656CFE-H12 八通道、12 位数模转换器的典型应用