注:以下内容学习于韦东山老师arm裸机第一期视频教程

一. 2440时钟简介

1.1 2440是一个SOC(system on chip)系统,不仅有很多CPU,还有很多外设,在2440芯片手册有系统框架图如下:

2440框架图中,不仅有CPU,而且有很多外设,其中外设分为两部分,一部分是AHB总线,一部分是APB总线

1.2 AHB总线

1.2.1 LCD控制器

1.2.2 USB控制器

1.2.3 NAND控制器

1.2.4 内存控制器

1.2.5 摄像头接口

1.2.6 中断控制器

1.2.7 电源管理等等

1.3 APB总线

1.3.1 UART

1.3.2 USB device

1.3.3 I2C

1.3.4 GPIO

1.3.5 RTC

1.3.6 ADC

1.3.7 定时器等等

1.4 因此引入了三个时钟,FLCK,HCLK,PCLK

cpu工作与FCLK,最大工作频率400MHZ

AHB总线工作于HCLK,最大工作频率136MHZ

APB总线工作与PCLK,最大工作频率68MHZ

二.时钟的获取

2.1 2440时钟体系框图如下

2.2 时钟源的选择

从图中看出,时钟源有两个分别是外部晶振和引脚,通过OM[3:2]来选择,模式选择如下图

在2440的原理图上,可以看到OM3,OM2都接到了GND上,因此会选择使用外部晶振作为输入             

2.3 时钟体系流程

12MHZ晶振通过MPLL锁相环得到FLCK,CPU直接使用FCLK,FCLK通过PDIV分频得到PCLK提供给APB总线上的设备使用,

FCLK通过HDIV分频得到HCLK提供给AHB总线上使用

12MHZ晶振也会经过UPLL锁相环提供给USB使用

三.程序的编写

3.1 时序图如下:

注:一旦设置PLL,就会锁定LOCK TIME 直到PLL输出稳定,然后CPU开始工作于新的频率FCLK

3.2 流程分析

3.2.1 一上电,复位引脚会维持一段时间(等待电源稳定),通过复位芯片来维持,如下:

3.2.2 根据OM[3:2]的值FCLK等于晶振的12M

3.2.3 PLL锁存OM[3:2]的值,同时CPU开始运行(复位引脚被拉高)

3.2.4 设置PLL

3.2.5 在CPU停止运行一段时间设置PLL

3.2.6 设置完成后FLCK等于PLL输出的新的频率

3.3 寄存器的设置(目的FCLK=400MZH, HCLK=100MZH, PCLK=50MHZ)

3.3.1 设置LOCKTIME寄存器,决定MPLL和UPLL的LOCKTIME

设置为默认值即可

3.3.2 设置MPLLCON/UPLLCON寄存器,决定FCLKi,如下图

其中公式如下图:

参考设置值如下,我们选择MDIV=92, PDIV = 1, SDIV=1即可设置FCLK = 400MHZ:

MPLLCON = (92 << 12) | (1 << 4) | (1 << 0);

3.3.3 设置CLKCON寄存器(关掉用不到的设备)

3.3.4 设置CLKDIVN寄存器,决定HCLK,PCLK,如下图:

首先要设置bit[2:1]为10,这时HCLK=FCLK/4=100MHZ,但是需要CAMDIVN[9]=0(默认值就是0)

设置bit[0]为1,这时PCLK=HCLK/2=50MHZ

bit[3]取默认值

3.3.5 如果HDIVN不等于0,CPU必须设置为异步模式,CPU会工作于HCLK,如下图

对于此处的汇编命令 orr r0,r0,#R1_nF:OR:R1_iA ,查阅相关资料大概了解了一下:【它扯到了协处理器P15的C1寄存器】可以参考以下地址了解协处理器P15(https://www.cnblogs.com/lifexy/p/7203786.html)

原来iA位和nF位是控制CPU总线模式的:
orr r0,r0,#R1_nF:OR:R1_iA
这命令的意思肯定是让CPU的总线模式从“fast bus mode”变为“asynchronous bus mode”
怎么理解#R1_nF:OR:R1_iA这东西,刚开始以为这是arm指令的某个命令,网上找到有人把它理解成条件运算符(exp1?exp2:exp3;),其实它就是对r0寄存器的30,31位置“1”的一条伪代码。所以我们在bootloader里会看到这样的代码:

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

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

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

所以 #R1_nF:OR:R1_iA 就是 #0xc0000000的意思 
 

3.3.6 提高系统时钟代码如下(FCLK=400MHZ,HCLK=100MHZ,PCLK=50MHZ):

.text
.global _start _start: /* 1.关闭看门狗 */
ldr r0, =0x53000000
ldr r1, =0
str r1, [r0] /* 2.设置时钟 */
/* 2.1 设置LOCKTIME(0x4C000000)=0xFFFFFFFF */
ldr r0, =0x4C000000
ldr r1, =0xFFFFFFFF
str r1, [r0] /* 2.2 设置CLKDIVN(0x4C000014) = 0x5 FCLK : HCLK : PCLK = 400m : 100m : 50m*/
ldr r0, =0x4C000014
ldr r1, =0x5
str r1, [r0] /* 2.3 设置CPU处于异步模式 */
mrc p15,0,r0,c1,c0,0
orr r0,r0,#0xc0000000 /* #R1_nF:OR:R1_iA */
mcr p15,0,r0,c1,c0,0 /* 2.4 设置MPLLCON(0x4C000004)=(92<<12) | (1 << 4) | (1 << 0)
* m = MDIV + 8 = 100
* p = PDIV + 2 = 3
* s = SDIV = 1
* Mpll = (2 * m * Fin) / (p * 2 ^ s)= (2 * 100 * 12) / (3 * 2 ^ 1) = 400MHZ
*/
ldr r0, =0x4C000004
ldr r1, =(92<<12) | (1 << 4) | (1 << 0)
str r1, [r0]  /* 一旦设置PLL, 就会锁定lock time直到PLL输出稳定
  * 然后CPU工作于新的频率FCLK
  */

/* 3.设置栈
* 自动分辨NOR启动或者NAND启动
* 向0地址写入0,在读出来,如果写入则是NAND,否则是NOR
*/
ldr r0, =0
ldr r1, [r0] /* 读出原来的值备份 */
str r0, [r0] /* 向0地址写入0 */
ldr r2, [r0] /* 再次读出来 */
cmp r1, r2
ldr sp, =0x40000000 + 4096 /* nor启动 */
moveq sp, #4096 /* nand启动 */
streq r1, [r0] /* 恢复原来的值 */ bl main halt:
b halt

S3C2440时钟体系的更多相关文章

  1. s3c2440裸机-时钟编程(一、2440时钟体系介绍)

    1.总线框架 下图是2440的总线框架,其中有AHB(Advanced High performance Bus)高速总线,APB(Advanced Peripheral Bus)外围总线. 不同总线 ...

  2. 第010课_掌握ARM芯片时钟体系

    from:第010课_掌握ARM芯片时钟体系 第001节_S3C2440时钟体系结构 S3C2440是System On Chip(SOC),在芯片省不仅仅有CPU,还有一堆外设. 至于有哪些外设,可 ...

  3. S5PV210 时钟体系分析

    S5PV210 时钟体系 如下面时钟结构图所示,S5PV210 中包含 3 大类时钟域, 分别是主系统时钟域(简称 MSYS).显示相关的时钟域(简称 DSYS). 外围设备的时钟域(简称 PSYS) ...

  4. 第九篇:S3C2400时钟体系

    S3C2400时钟体系 S3C2400时钟配置流程 该学习板使用了外部晶振12Mhz 晶振--->经过MPLL(锁相环) --->(倍频得到)FCLK--->(对FCLK分频得到)H ...

  5. S3C2440时钟配置

    参考: http://blog.csdn.net/mr_raptor/article/details/6555734 http://blog.csdn.net/mjx91282041/article/ ...

  6. S3C2440时钟系统详解

    在讲述系统时钟之前,因为这些设备都是挂靠在系统时钟上的,所以必须先说系统时钟,S3C2440的时钟系统如下 外部时钟源分两种,晶振或者外部频率,由om3-2选择,时钟电路根据两种选择也有两种 我们来分 ...

  7. S3C2440 时钟设置分析(FCLK, HCLK, PCLK)

    时钟对于一个系统的重要性不言而喻,时钟决定了系统发送数据的快慢,高性能的芯片往往能支持更快速度的时钟,从而提供更好的体验. S3C2440的输入时钟频率是12MHZ,对于这款芯片,显然速度是不够的,所 ...

  8. S3C2440时钟体系结构

    任意一款单板,我们了解其时钟都是通过时钟树来的. 这里没有全部截完,只是讲解时钟来源,OSC代表晶振,这说明我们的时钟可以来至晶振OSC也可以来至外部输入EXTCLK,这是通过OM选择器来完成的. 2 ...

  9. ARM S3C2440 时钟初始化流程

    1.设置lock time 2.设置分频系数 3.设置CPU到异步工作模式 4.设置 FCLK 了解 芯片的时钟原理图,以及寄存器的作用 了解芯片的晶振频率,锁相环,分频系数,以及有哪些时钟

随机推荐

  1. 还原对于server失败 备份集中的数据库备份与现有数据库不同

    还原对于server失败 备份集中的数据库备份与现有数据库不同         今天在SQL Server 2008 R2中还原一个数据库备份,遇到错误.还原对于server失败 备份集中的数据库备份 ...

  2. 每日一支TED——弗兰斯&#183;兰庭:为动物发声的摄影作品——2015年6月3日

    今天是听TED的第11天,从今天開始简单写一下听TED的感受! 刚把得! 弗兰斯·兰庭从一个部落得到一个思想说:全部的动物都是一样的.虽然他们的外形不一样.可是内在确实一样的,他们在外面伪装,可是他们 ...

  3. 防遗忘笔记,Fedora交叉编译window下的virt-iewer的汉化

    1. 汉化代码里的资源 virtviewer使用的是gettex的方案是标准的linux里国际化的方案.按道理仅仅须要改动virtualviewer/po/zh_CN.po的文件. 编译. 然后确认在 ...

  4. EF TMD

    TMD 几个月前,本着学习的心态,首次在项目中应用EF.因为这里老是赶.赶.赶,当时只是匆匆而就,浅尝辄止,搞到现在对EF一知半解,每次在新项目使用,都担惊受怕,大费周折,不知道什么时候,在什么地方就 ...

  5. java学习笔记:Eclipse打开现有项目

    初学JAVA,觉得困难重重. 多年来,已经习惯了微软系列的VS,现在使用Eclipse,觉得差别很大. 比如打开一个现有项目.并没有什么所谓的项目文件,如*.sln,*.cproj什么的.那怎么打开? ...

  6. kafka02

  7. Unix域套接字(Unix Domain Socket)介绍【转】

    本文转载自:http://blog.csdn.net/roland_sun/article/details/50266565 版权声明:本文为博主原创文章,未经博主允许不得转载. 在Linux系统中, ...

  8. 关于OpenFileDialog的使用 2(转)

    关于OpenFileDialog的使用 (2010-03-25 12:51:33) 标签: 杂谈 分类: WinForm 1. OpenFileDialog控件有以下基本属性 InitialDirec ...

  9. 华为FusionSphere概述——计算资源、存储资源、网络资源的虚拟化,同时对这些虚拟资源进行集中调度和管理

    华为FusionSphere概述 FusionSphere是华为自主知识产权的云操作系统,集虚拟化平台和云管理特性于一身,让云计算平台建设和使用更加简捷,专门满足企业和运营商客户云计算的需求.华为云操 ...

  10. Road Construction(无向图的双连通分量)

    http://poj.org/problem?id=3352 题意:给出一个有n个顶点m条边的无向连通图,问至少添加几条边,使删除任意一条边原图仍连通. 思路:一个边双连通图删除任意一条边仍为连通图. ...