1.基本知识
1.1clock模块介绍
2440主要的时钟有4个2个PLL:FCLK,HCLK,PCLK,UCLK;MPLL,UPLL。
FCLK是给CPU用的,频率最高。HCLK是给高速外设用的,如LCD、NAND Flash、Camera。 PCLK是给低速外设用的,如UART,IIS,IIC等。HCLK和PCLK都是从FCLK分频得到的。UCLK是专门给USB使用的。
MPLL, UPLL主要是用来升频的,将外部的晶振(jz2440为12M)升频到需要频率。
MPLL是用来给FCLK升频的,UPLL则是给UCLK升频的。
本博客主要介绍FCLK,HCLK,PCLK和MPLL;ULCK和UPLL暂时不讲。
1.2 时钟的比例
HCLK和PCLK是由FCLK分频得到,之间的分频比不是随意设置的,2440给出了一张可供挑选的表格。
在2440文档的Product Overview 章节(后面章节没有提过)查到FCLK最大400M, HCLK最大136M, PCLK最大68M。频率当然是越高越好,所以把FCLK设置成400M。再根据前面分频比的表格,选择1:4:8 的分频比。 PCLK 50M : HCLK 100M: FCLK 400M = 1:4:8
1.3 升频的过程
外部的晶振通过 MPLL/UPLL 升频后达到更高的频率,升频的过程需要一定的时间才可以稳定输出。(VCO:Voltage Controlled Oscillator )
2.主要寄存器介绍
2.1 LOCKTIME
LOCKTIME 就是用来设置升频过程中的lock time, 这里只关心MPLL[15:0]的设置,默认值就是最大值,也是最安全的值。
2.2 MPLLCON
设置MPLL的控制寄存器,最终影响FCLK的频率。
Mpll的最终输出会给到FCLK, 也就是FLCK的频率=Mpll的输出频率。FCLK要设置成400M,Mpll也就等于400M。
Mpll的计算公式为:
Mpll = (2 * m * Fin) / (p * 2^s)
m = (MDIV + 8), p = (PDIV + 2), s = SDIV
2440文档给出了一组参考配置,MDIV= 92, PDIV=1,SDIV=1,带入公式
m= (MDIV +8) =92+8=100
p=(PDIV+2)= 1+2=3
s=SDIV=1
Fin是外部晶振的频率=12M
Mpll =(2*100 * 12M)/(3 * 2^1) = 2400M / 6 = 400M
2.3 CLKCON
设置各个模块时钟的开关,使用默认值就可以了
2.4 CLKDIVN
HCLK, PCLK的分频比控制。
PCLK 50M : HCLK 100M: FCLK 400M = 1:4:8, 那么HCLK=FCLK/4 = 400M/4= 100M, PCLK=HCLK/2 = 100M / 2 = 50M 。所以HDIVN设置成10b,PDIVN设置成1b。其中的CAMDIVN[9]需要设置成0, 它的初始值就是0,所以不用管。
2440里面有个NOTE, 当HDIVN不等于0时(我们设置为10b),需要把将bus mode 设置为非同步总线模式。相关的寄存器说明在2410的手册查到,需要把CP15 (协处理器)的R1寄存器(控制寄存器)的[31:30] 设置为11b。具体的汇编代码为:
mrc p15,0,r0,c1,c0,0 /* 把CP15的R1的值读到r0*/
orr r0,r0, #0xc0000000 /* r0'或'上0xc0000000, 即r0 | 0xc0000000,把31,30bit设置为1 */
mcr p15,0,r0,c1,c0,0 /* 把r0的值写到CP15的R1 */
2.5 CLKSLOW
使用默认值即可。
3. 源码
start.s
.global _start
_start:
/* stop watch dog */
ldr r0, =0x53000000
mov r1, #0
str r1, [r0]
/* Source crystal oscillator 12M
FCLK 400M HCLK 100M PCLK 50M */
/* 1, set lock time LOCKTIME 0x4c000000 */
ldr r0, =0x4c000000
ldr r1, = 0xFFFFFFFF
str r1, [r0]
/*2, set CLKDIVN 0x4c000014
HDIVN = FLCK / 4
PDIVN = HCLK / 2
HDIVN->b10 PDIVN->1 */
ldr r0, = 0x4c000014
ldr r1, = ( (2 << 1) | (1 << 0) )
str r1, [r0]
/* HCLK = FCLK/4 when CAMDIVN[9] = 0
and thc CAMDIVN[9] default value is 0*/
/*3, if HDIVN is not 0, CPU bus mode must be asynchronous */
mrc p15,0,r0,c1,c0,0
orr r0,r0, #0xc0000000
mcr p15,0,r0,c1,c0,0
/* 4, set MPLLCON 0x4c000004
MDIV->92(0x5c), PDIV->1 SDIV->1
MPLL = (2 * m *Fin) / (p * 2 ^s)
m = (MVID + 8) = (92 + 8) = 100
p = (PDIV + 2) = (1 + 2) = 3
s= SDIV = 1
MPLL = (2 * 100 * 12M) / (3 * 2 ^ 1) = 400M
*/
ldr r0, =0x4c000004
ldr r1, =( (92 << 12) | (1 << 4) | (1 << 0))
str r1, [r0]
/* aoto switch nand or nor flash */
/* write 0 to address[0] and read it
* if address[0] is equal 0, it is nand
* because nand can wirte easy, but nor need send
* write-commond before wirte data, so write 0 to
* nor address[0] will fail, and get nor address[0]
* data is not equal 0
*/
mov r1, #0
ldr r0, [r1] /* r0=[0] store address[0] data*/
str r1, [r1] /* 0->[0] */
ldr r2, [r1] /* r2=[0] */
cmp r1, r2
ldr sp, =0x40000000 + 4096/* for nor */
ldreq sp, =4096 /* for nand */
streq r0, [r1] /* recover address[0] data */
bl main
loop:
b loop
源码很简单,就是按照之前介绍寄存器时的参数去设置就行了,不做过多的介绍。
上一篇:s3c2440学习之路-007uart的简单配置
下一篇:s3c2440学习之路-005 轮训模式读取key(按键)
推荐阅读最新更新时间:2024-11-11 10:43
推荐帖子
- 【连载之一】电源的七十二种化身
- 此内容由EEWORLD论坛网友风过琴弦原创,如需转载或用于商业用途需征得作者同意并注明出处本文pdf版下载...序言...电源领域种类繁杂,各种电源有不同的特点、不同的适用场景。本文为系列的第一篇,面向硬件工程师的日常工作,介绍常见的各种电源方案,给出各方案的主体框架,并对其优缺点、适用场合做出详细说明。本文的目标是,依据本文,能够为硬件电路选择一个电源的总体方案,并且能在讨论中怼死对方讲出其中的要点。作者多年前从单片
- 风过琴弦 电源技术
- 【CH579M-R1】+驱动LCD5110显示屏
- 经过一天时间的调试,LCD5110显示屏终于驱动成功,程序是从STM32移植过来的,调整时序时还借助了逻辑分析仪。调试过程中还犯了低级错误,忘记对LCD5110初始化了,时序已经调整的非常理想,但LDC就是无显示,百思不得其解,最后才发现问题。下图为调试过程:这是用逻辑分析仪调整时序的截图:下面是main.c代码:intmain(){UINT8len,i,dir;/*配置串口1:先配置IO口模式,再配置串口*/GPIOA_Set
- hujj 国产芯片交流
- 数据中心(通讯机房)交流电流信号采集方案
- 上海安科瑞为广大数据中心(通讯机房)配电用户提供以下交流电流采集元件:1、AKH-0.66/Z三相电流互感器AKH-0.66/Z系列三相电流互感器外壳采用阻燃、耐温140℃的进口聚碳酸酯注塑成形,产品颜色为米黄色,外壳之间固定采用超音波焊接。铁芯采用取向冷轧硅钢带卷绕而成,二次导线采用高强度电磁漆包线,产品结构新颖,造型美观,安装方便,体积小,质量轻,准确度高,容量大。AKH-0.66/Z三相电流互感器规格尺寸参数对照表
- acrel2011 工控电子
- 无线节点的程序流程图1
- 这个肯定是有地方还需要改的,以后继续改进哈。无线节点的程序流程图1很不错。基本体现这个项目的目的好。画得漂亮。是2张图片啊,开始还以为采集2次才发送呢
- lonerzf ADI参考电路
- 滤波电容,小电容滤高频,大电容滤低频的理解
- 在调试硬件电路时,当并联的小滤波电容不焊接时,发现电压纹波很大(当然是相对而言),焊接后,效果较好,大概峰峰值降低了300mV,随机对该问题展开调查。一开始一直沉迷于公式XC=1/2*PI*f*C,但是计算后感觉还是有出入(也有可能是我算的不对,有理解的深,希望能给与交流),然后就查看了一些资料,前人经验:电源滤波电容如何选取,掌握其精髓与方法,其实也不难。1)理论上理想的电容其阻抗随频率的增加而减少(1/jwc),但由于电容两端引脚的电感效应,这时电容应该
- qwqwqw2088 模拟与混合信号
- 卡尔曼滤波原理的学习
- 《卡尔曼滤波原理及应用:MATLAB仿真》讲了卡尔曼滤波的基本原理及扩展卡尔曼滤波的原理,书中有MATLAB仿真代码,可以作为电子信息类各专业高年级本科生和硕士参考资料,非常适合自学者。卡尔曼滤波原理的学习有时间借本卡尔曼滤波的书来看看有Python仿真的相关书籍吗simulink专门用于仿真的
- ANSHANLIU 测试/测量
设计资源 培训 开发板 精华推荐
- LT3970IDDB 3.3V 降压转换器的典型应用
- ADR4520 双极性输出电压基准的典型应用
- LTC3374EUHF 8 通道 1A 多输出降压稳压器的典型应用电路
- 基于51单片机的超声波测距原理图、PCB、源代码
- 使用 Aimtec 的 AM2M-2412D-NZ 的参考设计
- LT8330ES6 8V 至 30V 输入、-24V 反相转换器的典型应用电路
- LTC2220CUP 演示板,高速 ADC,VCC = +3.3V,170Msps,12 位 AIN > 100MHz
- NCP370GEVB:过压、过流和 反向控制装置评估板
- OP249GSZ瞬态输出阻抗测试治具典型应用电路
- ADR363A、3V 低功耗、低噪声堆叠电压基准的典型应用