1. 原理分析
S3C2440A有两个锁相环(PLLs):一个(MPLL)用于FCLK、HCLK和PCLK,另一个(UPLL)专用于USB。其中FCLK用于CPU,HCLK用于AHB总线,PCLK用于APB总线。
AHB(Advanced High performance Bus)高级高性能总线,用于高性能模块的连接。
APB(Advanced Peripheral Bus)外围总线,用于低速外设的连接。
将上图简化之后,我们可以粗略的得到下图。
由这个简化的图我们可以得知,晶振的频率经过MPLL生成的频率便是FCLK所用频率,经过UPLL生成的频率就是USB所用频率。如果将FCLK再经过HDIV和PDIV进行分频,那么将分别得到HCLK和PCLK。
那么从系统上电(复位)到按照设定的频率工作,整个的时序和工作流程是怎么样的呢?在芯片手册中有这样一个图,解释了这个流程。
系统上电后,晶振(crystal oscillator 简称OSC)开始工作。等到OSC稳定之后,nRESET才会拉至高电平,之后PLL会按照配置进行工作,锁定时间过后,可以立即将FCLK配置为锁相环输出。
在有了上述理论基础,假如我们想将FCLK:HCLK:PCLK=400M:100M:50M,晶振频率为12M,我们就可以将配置分为如下几步
设置LOCKTIME(0x4C000000)
设置HDIV和PDIV的分频值,FCLK:HCLK:PCLK=400M:100M:50M,所以可以得出HDIV=4、PDIV=8,这两个值可以通过CLKDIVN(0x4C000014)寄存器来配置。
根据上表,HDIVN我们应配置为0b10,PDIVN应配置为0b1,所以该寄存器应配置为0x5
设置CPU工作于异步模式
这段话的意思大致就是,如果HDIVN不是0(我们上面设置了,它的确不是0了),CPU的模式必须要从快速总线模式更改为异步总线模式。怎么改,芯片手册也提供了汇编代码,其中有疑问的就是 #R1_nf:OR:R1_iA 这个是什么意思?
其实 orr r0,r0,#R1_nf:OR:R1_iA 这句话的意思就是将30位(nf bit) 31位(ia bit) 置1,所以这句话也等同于orr r0,r0,#0xc0000000
设置MPLL中的P、M、S,使FCLK=400M
手册里面提供了公式,现在我们可以将手册给出的值带入公式验证一下。
可以通过MPLLCON(0x4C000004)来设置它们3个的值。
2. 程序编写
.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
上一篇:ARM微处理器的指令集概述(四)——MOV和LDR的区别
下一篇:《2440裸机》基础知识
推荐帖子
- 有用FPGA做过图像压缩dct变换的吗
- 有没有什么好的资料,算法借鉴有用FPGA做过图像压缩dct变换的吗楼主是想知道什么问题吗?还是遇到什么困难了,最好发出来说下原因,看看能不能帮到你哦error_echo发表于2014-12-2613:51楼主是想知道什么问题吗?还是遇到什么困难了,最好发出来说下原因,看看能不能帮到你哦不知道DCT变换的算法啊
- my_style FPGA/CPLD
- TMS320F28335项目开发记录2_CCS与JTAG仿真器连接问题汇总
- CCS与仿真器连接问题实际使用过程中,仿真器和CCS连接可能出现这样或那样的问题,也许你的连接很成功,没碰到过什么问题,但我的问题的确不少,可能与电脑配置有关吧,也可能与人品有关吧;下面的自己的一些错误和解决方法总结,不一定对,但也算是一种解决方法,分享给大家:问题:1.jtag连接不上,报错:ThecontrollerhasdetectedadeadJTAGclock.Theusermustturn-onorcon
- 风雨也无晴 微控制器 MCU
- 51单片机230个Proteus仿真实例
- 51单片机230个Proteus仿真实例买一个謝謝你的分享谢谢楼主资源分享!回复楼主GONGHCU的帖子我晕,,,没有源码,没有HEX文件。。。怎么玩啊打开怎么是乱码啊一点儿头绪都没有111111111号!不错!没有程序???买了,收藏下感谢分享!!!好东西。。。。打开怎么是乱码啊一点儿头绪都没有楼主好人啊好资源啊,正在学习中。谢谢ddddddddddddddddd我晕,,,没有源码,没有HEX文件。。。怎么玩啊看来还是不下了
- GONGHCU 51单片机
- CE6 MUX 不能加载,怪事
- 有个很奇怪的事情,我的平台下,mux07_10.dll死活不加载。后来我做了一个最简单空驱动,比方叫kmt驱动,生成kmt.dll,是可以加载的,但我把Kmt.dll修改成MUX.DLL,MUX07_10.DLL,MUX0710.DLL,死活就不加载。完全一模一样的代码,只修改source、def文件和platform.bib,reg文件;再把生成的Muxxx.dll改成其他什么名字,例如xxx.dll,就又可以加载了。大家有没有碰到这样的问题?太奇怪了。。。。。难道wince不支持MUX?
- czgg048 嵌入式系统
- ds1820读出的数据
- ds1820不带B,常温下读出的数据为00H76H,测量体温是数据为00H88H,77H转换成10进制后118*0.5=59°度88H=68度,显然是不对的吧?谁能告诉我是读出数据出错了,还是不会转换的问题。急等;将温度数据通过串口发送出去,波特率2400;本程序专为AT89C51实验开发板编写.适合12晶振;本程序经过验证,可以显示温度+/-和两位整数温度和两位小数温度数据DOTEQU30HZHENGSHUEQU31HFLAG1EQU38H;是否
- zhaofuzheng 测试/测量
- 【读书】《RISC-V开放架构设计之道》1.新生儿RISC-V
- 每当有一个新概念产生时,我们会习惯性的问:催生他的目的是什么?对于RISC-V来说,他的主要目的在于:替代现有的ARM架构和X86架构当然,X86架构是CISC(复杂指令集),我们首先和同为RISC(精简指令集)的ARM架构做对比ARM好用吗?答案是肯定的。现如今一个房间里的ARM设备极大可能要比X86、8051等架构的设备要多许多,况且ARM的多样化也是其他几种类型的几倍。但是,还不够好。(图源:网络)ARM架构由ARM公司收取专利
- 电子烂人 编程基础
设计资源 培训 开发板 精华推荐
- 使用 ON Semiconductor 的 CAT4134 的参考设计
- ADR421 输出微调调整电压基准的典型应用
- LT1308,单节锂离子电池至 5V/1A DC/DC 转换器
- 使用 Analog Devices 的 LTC660 的参考设计
- EVAL-AD5433SDZ,使用 AD5433、10 位、高带宽乘法 DAC 和并行接口的评估板
- LTC3778EF 演示板,高效笔记本 CPU 电源,低电压 Tualatin,Vin = 7.5V - 24V,Vcore = 1.15V/15Amax + VID
- EDA实验四
- LT1764AET-3.3 SCR 预稳压器的典型应用可提供跨线路变化的效率
- MIKROE-3414,配备两个电容式触摸板和一个基于 ATSAML10 MCU 的电容式滑块的 SAML 触摸点击板
- 使用 MaxLinear, Inc 的 SPX385N-1.2/TR 的参考设计