S3C2440A时钟结构分析(ARM9架构)

发布者:huanguu最新更新时间:2022-04-21 来源: eefocus关键字:S3C2440A  ARM9架构 手机看文章 扫描二维码
随时随地手机看文章

一、时钟树分析

S3C2440A时钟树

 

从上图的左上角我们可以得知,S3C2440A支持两种外部时钟源输入,一种是通过接在XTIpll与XTOpll上的外部振荡电路(一般由晶振为核心组成),还有一种是通过将现成的时钟频率通过EXTCLK输入。


时钟输入芯片后,送到MPLL(主锁相环)与UPLL(USB锁相环)进行倍频。MPLL出来的时钟信号称之为FCLK,一般直接用于给CPU核心提供时钟信号;UPLL出来的时钟信号称为UCLK,一般用于给USB提供时钟信号。FCLK经过HDIVN与PDIVN分频后会产生HCLK与PCLK,前者一般用于给AHB高速总线与高速外设提供时钟信号,比如USB模块、NAND FLASH控制器等;后者一般用于APB外设总线,给低速外设提供信号,比如各种串行通讯模块、外部GPIO等。


以下摘录一段S3C2440A数据手册中对各个时钟信号的说明


USB host interface and USB device interface needs 48Mhz clock. In the S3C2440A, the USB dedicated PLL (UPLL) generates 48Mhz for USB. UCLK does not fed until the PLL (UPLL) is configured.


FCLK is used by ARM920T. HCLK is used for AHB bus, which is used by the ARM920T, the memory controller, the interrupt controller, the LCD controller, the DMA and USB host block. PCLK is used for APB bus, which is used by the peripherals such as WDT, IIS, I


《S3C2440A 32-BIT CMOS MICROCONTROLLER USER’S MANUAL》 Revision 1.3

二、时钟树的初始化

在进行芯片上电前,需要通过修改OM3和OM2引脚去配置所使用的时钟源,引脚和对应的设置关系如下表所示:


然后就开始对寄存器进行设置了!总体的设置流程是:1、设置锁相环生效延时时间;2、设置PCLK与HCLK的分频系数;3、配置CPU进入异步模式以使得CPU可以使用FCLK作为时钟源; 4、设置UCLK与FCLK;


首先需要设置的是LOCK TIME COUNT REGISTER (LOCKTIME),此寄存器用来作为锁相环的生效延时计数,因为锁相环设置后到产生稳定的时钟信号中间会需要一定时间,通过设置这个寄存器来告诉芯片锁相环稳定所需要花费的时间,一般我们保持此寄存器的默认值即可。

LOCK TIME COUNT REGISTER (LOCKTIME)

 

然后是通过CLOCK DIVIDER CONTROL (CLKDIVN) REGISTER设置HCLK与PCLK的分频,一定要先设置这两者的分频寄存器然后再开始设置MPLL和UPLL,这样可以防止AHB与APB总线上的时钟频率过快。寄存器说明如下:

CLOCK DIVIDER CONTROL (CLKDIVN) REGISTER

 

其中HDIVN设置值对应的实际分频系数还取决于CAMDVN寄存器的第8位和第9位,上电时,这两位默认为0。


在接着设置UCLK与FCLK之前,我们要先设置CPU总线进入异步工作模式,这样才可以在HDIVN不为0时使用FCLK作为CPU的工作时钟源,官方手册提供了CPU进入异步模式的汇编代码,代码如下:


/* 设置CPU工作于异步模式 */

mrc p15,0,r0,c1,c0,0

orr r0,r0,#0xc0000000   //R1_nF:OR:R1_iA

mcr p15,0,r0,c1,c0,0

最后是设置UPLL与MPLL来设置UCLK与MCLK。根据手册上的指示,在设置FCLK前要先设置UCLK,所以接下来先配置UPLLCON寄存器,然后配置MPLLCON寄存器,两个寄存器说明如下:

PLL CONTROL REGISTER (MPLLCON & UPLLCON)

 

通过寄存器位端MDIV、PDIV、SDIV的组合可以计算得到想要的频率,不过官方为了方便使用提供了一组常用频率对应的值,想自己手动计算的也可以通过手册提供的公式自行计算,官方参考值如下:

PLL VALUE SELECTION TABLE

 

三、时钟树配置参考汇编代码

 


.text.global _start

_start:

/* 关闭看门狗 */

ldr r0, =0x53000000

ldr r1, =0str r1, [r0]

 

/* 设置MPLL, FCLK : HCLK : PCLK = 400m : 100m : 50m */

/* LOCKTIME(0x4C000000) = 0xFFFFFFFF */

ldr r0, =0x4C000000

ldr r1, =0xFFFFFFFFstr r1, [r0]

 

/* CLKDIVN(0x4C000014) = 0X5, tFCLK:tHCLK:tPCLK = 1:4:8  */

ldr r0, =0x4C000014

ldr r1, =0x5str 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


关键字:S3C2440A  ARM9架构 引用地址:S3C2440A时钟结构分析(ARM9架构)

上一篇:ARM交叉编译环境安装记录
下一篇:S3C2440上电启动流程概述

推荐帖子

2010年TI杯江苏赛区QQ交流群群号:100194463
本帖最后由paulhyde于2014-9-1509:01编辑2010年TI杯江苏赛区QQ交流群群号:1001944632010年TI杯江苏赛区QQ交流群群号:1001944632010年TI杯江苏赛区QQ交流群群号:1001944632010年TI杯江苏赛区QQ交流群群号:1001944632010年TI杯江苏赛区QQ交流群群号:1001944632010年TI杯江苏赛区QQ交流群群号:100194463群内有各种资料。欢迎加入2010年TI杯江苏
xueyunfei666 电子竞赛
使用反向门极驱动光电耦合器进行变速电机驱动的设计考量
使用反向门极驱动光电耦合器进行变速电机驱动的设计考量使用反向门极驱动光电耦合器进行变速电机驱动的设计考量
安_然 模拟电子
你对LED灯具了解的不多?那给你一份初级培训资料免费下载吧!
时间已经跨入2013年,有人说2013年是LED照明在民用市场领域发展比较快的关键一年,你对LED灯具了解的不多?那就给你一份初级培训资料免费下载吧!如果你对LED了解的很多了,那你期待吧,有空给你整一个高级培训资料,,,呵呵今天本该周日,但为了已经过好的新年第一天元旦,要接下去继续上班。但无论是连上8天班还是2013年的第一场流星雨,都无法阻挡我们对照明行业的了解与学习热情哦,今天推荐一篇初级LED照明灯具培训资料供大家下载学习!觉得有用的朋友,下载后一定要点评哦,因
qwqwqw2088 LED专区
关于多普达-蓝牙发送文件
关于多普达-蓝牙发送文件多普达中选择一个文件-打开下拉菜单-选择蓝牙发送文件-蓝牙发送界面现在我放做一个button,clickbutton时进入蓝牙发送界面,文件还是原来的文件.请问mobilec++能否实现关于多普达-蓝牙发送文件能实现如果“蓝牙发送界面”是一个独立的程序,那么你的需求可以实现:点button时调用这个程序即可。如果“蓝牙发送界面”是原来浏览器自己实现的非独立程序,那么你的需求就无法简单实现,必须在点button后自己调用蓝牙相关函数,并自己实现
heyuqi 嵌入式系统
【第二周颁奖】分享、评论《Vishay光电子博文》尽享精彩好礼!
活动内容:分享、评论《Vishay光电子博文》尽享精彩好礼!活动链接:https://bbs.eeworld.com.cn/thread-374983-1-1.html大家期待的第二周获奖名单,今天新鲜出炉喽,看看这次是否有你的大名!请以下获奖的朋友把您的姓名、手机、详细地址、公司、从事领域、职位常用邮箱通过邮箱的方式发到sudan@eeworld.com.cn邮箱或者站内短消息给苏莎莎!获奖名单
EEWORLD社区 综合技术交流
【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统-环境搭建 5
##【2024DigiKey创意大赛】-基于毫米波雷达的生命体征检测及健康监护系统-环境搭建-PlatformIO安装###方法一:通过Homebrew安装(Mac)1.**安装Homebrew**(如果尚未安装):```text/bin/bash-c"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"```2.**使用Ho
zygalaxy DigiKey得捷技术专区
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved