S3C2440A时钟(clock)模块介绍
系统时钟:
JZ2440V3开发板在没有开启时钟前,整个开发板全靠一个12MHz的晶振提供频率来运行,也就是说CPU,内存,UART等需要用到时钟频率的硬件都工作12MHz下,而S3C2440A可以正常工作在400MHz下,两者速度相差可想而知,就好比牛车和动车。如果CPU工作在12MHz频率下,开发板的使用效率非常低,所有依赖系统时钟工作的硬件,其工作效率也很低,比如,我们电脑里面经常提到的超频,超频就是让CPU工作在更高的频率下,让电脑运算速度更快,虽然频率是越高越好,但是由于硬件特性决定了任何一个设备都不可能无止境的超频,电脑超频时要考虑到CPU或主板发热过大,烧坏的危险,同样开发板的主板上的外设和CPU也有一个频率限度,ARM920T内核的S3C2440的最高正常工作频率如下:
- FCLK:400MHz
- HCLK:100MHz
- PCLK:50MHz
既然如此,那么怎样让CPU工作在400MHz,让牛车速度提高到动车的速度呢?
1.系统工作时钟频率
在对系统时钟进行提速之前,让我们先来了解下S3C2440上的工作时钟频率:FCLK,HCLK,PCLK,其中FCLK主要为ARM920T内核提供工作频率,如图2-44所示:
HCLK主要为S3C2440 AHB总线(Advanced High performance Bus)上挂接硬件提供工作频率,AHB总线主要挂接有内存,NAND,LCD控制器等硬件,如图2-45所示:
PCLK主要为APB总线提供工作频率,由图2-46所示,APB总线主要挂接UART串口,Watchdog等硬件控制器。
也就是说,对于一些需要时钟工作的硬件,如果切断其时钟源 ,就不会再工作,从而达到降低功耗的目的,这也是便携嵌入式设备里的一个特点。
时钟源:为了减少外界环境对开发板电磁干扰,降低制作成本,通常开发板的外部晶振时钟频率都很低,JZ2440V3开发板由12MHz的晶振来提供时钟源,要想让CPU运行在更高的频率就要通过时钟控制逻辑单元PLL(锁相环)来提高主频。
S3C2440里有两个PLL:MPLL和UPLL,MPLL用来产生FCLK,HCLK,PCLK的高频工作时钟,UPLL用来为USB提供工作频率。
开发板上电后,晶振OSC开始提供晶振时钟,由于系统刚刚上电,电压信号等都还不稳定,这时复位信号(nRESET)拉低,这时MPLL虽然默认启动,但是如果不向MPLLCON中写入值,那么外部晶振则直接作为系统时钟FCLK,过几毫秒后,复位信号上拉,CPU开始取指运行,这时可以通过代码设置启动MPLL,MPLL启动需要一定锁定时间(LockTime),这是因为MPLL输出频率还没有稳定,在这期间FCLK都停止输出,CPU停止工作,过了LockTime后时钟稳定输出,CPU工作在新设置的频率下,这时可以通过设置FCLK,HCLK和PCLK三者的频率比例来产生不同总线上需要的不同频率,下面详细介绍开启MPLL的过程:
- 设置LockTime变频锁定时间;
- 设置FCLK与晶振输入频率(Fin)的倍数;
- 设置FCLK,HCLK,PCLK三者之间的比例;
LockTime变频锁定时间由LOCKTIME寄存器(见下表)来设置,由于变频后开发板所有依赖时钟工作的硬件都需要一小段调整时间,该时间计数通过设置LOCKTIME寄存器[31:16]来设置UPLL(USB时钟锁相环)调整时间,通过设置LOCKTIME寄存器 [15:0]设置MPLL调整时间,这两个调整时间数值一般用其默认值即可。
表2-8变频锁定时间寄存器(LOCKTIME)
寄存器名 |
地址 |
是否读写 |
描述 |
复位默认值 |
LOCKTIME |
0x4C000000 |
R/W |
变频锁定时间寄存器 |
0xFFFFFFFF |
LOCKTIME |
位 |
描述 |
初始值 |
U_TIME |
[31:16] |
UPLL对UCLK的锁定时间值 (U_TIME:300us) |
0xFFFF |
M_TIME |
[15:0] |
MPLL对于FCLK,HCLK,PCLK的锁定时间值(M_TIME:300us) |
0xFFFF |
FCLK与Fin的倍数通过MPLLCON寄存器设置,三者之间有以下关系:
MPLL(FCLK) = (2*m*Fin)/(p*2^s)
其中:m = MDIV + 8, p = PDIV + 2, s = SDIV
当设置完MPLL之后,就会自动进入LockTime变频锁定期间,LockTime之后,MPLL输出稳定时钟频率。
表2-9 MPLL配置寄存器(MPLLCON)
寄存器名 |
地址 |
是否读写 |
描述 |
复位默认值 |
MPLLCON |
0x4C000004 |
R/W |
MPLL配置寄存器 |
0x00096030 |
MPLLCON |
位 |
描述 |
初始值 |
MDIV |
[19:12] |
主分频器控制位 |
0x96 |
PDIV |
[9:4] |
预分频器控制位 |
0x03 |
SDIV |
[1:0] |
后分频器控制位 |
0x0 |
通过上述算法比较难以找到合适的PLL值,下表给出了官方推荐的一些MPLL参考设置:
表2-10 官方推荐MPLL
FCLK,HCLK,PCLK三者之间的比例通过CLKDIVN寄存器进行设置。S3C2440时钟设置时,还要额外设置CAMDIVN寄存器,如下表,HCLK4_HALF,HCLK3_HALF分别与CAMDIVN[9:8]对应,下表列出了各种时钟比例:
表2-11 FCLK HCLK PCLK设置比例
如果HDIVN设置为非0,CPU的总线模式要进行改变,默认情况下FCLK = HCLK,CPU工作在fast bus mode快速总线模式下,HDIV设置为非0后, FCLK与HCLK不再相等,要将CPU改为asynchronous bus mod异步总线模式,可以通过下面的嵌入汇编代码实现:
__asm{ mrc p15, 0, r1, c1, c0, 0 /* 读取CP15 C1寄存器 */ orr r1, r1, #0xc0000000 /* 设置CPU总线模式 */ mcr p15, 0, r1, c1, c0, 0 /* 写回CP15 C1寄存器 */
}
关于mrc与mcr指令,请查看MMU与内存保护的实现章节。
表2-12时钟分频器控制寄存器(CLKDIVN)
寄存器名 |
地址 |
是否读写 |
描述 |
复位默认值 |
CLKDIVN |
0x4C000014 |
R/W |
时钟分频器控制寄存器 |
0x00000000 |
CLKDIVN |
位 |
描述 |
初始值 |
DIV_UPLL |
[3] |
UCLK选择寄存器(UCLK必须对USB提供48MHz) 0:UCLK=UPLL clock 1:UCLK=UPLL clock/2 |
0 |
HDIVN |
[2:1] |
00:HCLK = FCLK/1 01:HCLK = FCLK/2 10:HCLK = FCLK/4,当CAMIVN[9]=0 HCLK = FCLK/8,当CAMIVN[9]=1 11: HCLK = FCLK/3,当CAMIVN[8]=0 HCLK = FCLK/6,当CAMIVN[8]=1 |
0 |
PDIVN |
[0] |
0:PCLK是和HCLK/1相同时钟 1:PCLK是和HCLK/2相同时钟 |
0 |
表2-13摄像头时钟分频控制寄存器(CAMDIVN)
寄存器名 |
地址 |
是否读写 |
描述 |
复位默认值 |
CAMDIVN |
0x4C000018 |
R/W |
摄像头时钟分频控制寄存器 |
0x00000000 |
CAMDIVN |
位 |
描述 |
初始值 |
… |
… |
… |
… |
HCLK4_HALF |
[9] |
HDIVN分频因子选择位(当CLKIVN[2:1]位为10b时有效) 0: HCLK=FCLK/4 1: HCLK=FCLK/8 |
0 |
HCLK3_HALF |
[8] |
HDIVN分频因子选择位(当CLKIVN[2:1]位为11b时有效) 0: HCLK=FCLK/3 1: HCLK=FCLK/6 |
0 |
… |
… |
… |
… |
如果要禁止某个硬件外设的时钟,可以通过设置CLKCON寄存器。下表是此寄存器的定义。
寄存器名 | 地址 | 是否读写 | 描述 | 复位默认值 |
CLKCON | 0x4C00000C | R/W | 时钟控制寄存器 | 0xFFFFF0 |
CLKCON | 位 | 描述 | 初始值 |
AC97 | [20] |
PCLK控制的AC97模块 0 = 禁止,1 = 使能 |
1 |
Camera | [19] |
HCLK控制的相机模块 0 = 禁止,1 = 使能 |
1 |
SPI | [18] |
PCLK控制的SPI模块 0 = 禁止,1 = 使能 |
1 |
IIS | [17] |
PCLK控制的IIS模块 0 = 禁止,1 = 使能 |
1 |
IIC | [16] |
PCLK控制的IIC模块 0 = 禁止,1 = 使能 |
1 |
ADC | [15] |
PCLK控制的ADC模块 0 = 禁止,1 = 使能 |
1 |
RTC | [14] |
PCLK控制的RTC模块 0 = 禁止,1 = 使能 |
1 |
GPIO | [13] |
PCLK控制的GPIO模块 0 = 禁止,1 = 使能 |
1 |
UART2 | [12] |
PCLK控制的UART2模块 0 = 禁止,1 = 使能 |
1 |
UART1 | [11] |
PCLK控制的UART1模块 0 = 禁止,1 = 使能 |
1 |
UART0 | [10] |
PCLK控制的UART0模块 0 = 禁止,1 = 使能 |
1 |
SDI | [9] |
PCLK控制的SDI模块 0 = 禁止,1 = 使能 |
1 |
PWMTIMER | [8] |
PCLK控制的PWMTIMER模块 0 = 禁止,1 = 使能 |
1 |
USB外设 | [7] |
PCLK控制的USB外设模块 0 = 禁止,1 = 使能 |
1 |
USB主控 | [6] |
HCLK控制的USB主机模块 0 = 禁止,1 = 使能 |
1 |
LCDC | [5] |
HCLK控制的LCDC模块 0 = 禁止,1 = 使能 |
1 |
NAND控制器 | [4] |
HCLK控制的NAND模块 0 = 禁止,1 = 使能 |
0 |
SLEEP | [3] |
控制S3C2440A的休眠模式 0 = 禁止,1 = 转换到休眠模式 |
0 |
IDLE位 | [2] |
进入空闲模式 0 = 禁止,1 = 过渡到IDLE模式 |
0 |
Reserved | [1:0] | Reserved | 0 |
从上表可以看出,当往某位写1时就使能了相应外设的时钟,此外设就可以正常工作了。
此外,具体外设的时钟还要根据具体外设能够支持的工作频率进行设置。例如,LCD能够支持的工作频率为10MHz,那么还要设置LCDCON1寄存器来进一步设置让LCD控制器工作的频率。
完!
本文转自:https://blog.csdn.net/mr_raptor/article/details/6555734
S3C2440A时钟(clock)模块介绍相关推荐
- STM32F407ZGT6芯片时钟系统模块介绍
STM32F4时钟系统的知识在<STM32F4中文参考手册>第六章复位和时钟控制章节有非常详细的讲解,网上关于时钟系统的讲解也有很多,讲不出啥特色,时钟模块是芯片非常重要的组成部分,我们必 ...
- (41)时钟组Clock Group介绍
(41)时钟组Clock Group介绍 1 文章目录 1)文章目录 2)时序约束引言 3)FPGA时序约束课程介绍 4)时钟组Clock Group介绍 5)技术交流 6)参考资料 2 时序约束引言 ...
- UltraScale时钟资源和时钟管理模块
UltraScale时钟资源和时钟管理模块 绪论 图2.1和2.2给出了UltraScale结构的时钟结构.从图中可以看出,基本的结构是由表示分段时钟行和列的CR块构成的CR以一个单元的方式排列,从而 ...
- 基于FPGA的数字钟——(三)时钟显示模块(数码管)
基于FPGA的数字钟--(三)数码管显示模块 一.硬件原理 本设计中使用 6 个共阳数码管,可以显示 6 个数字(包含小数点) .电路用 PNP管来反向驱动并且控制列扫描信号来选择哪个数码管.而且所有 ...
- USB WiFi 模组/模块介绍
USB WiFi 模组/模块介绍 USB 通用串行总线 (Universal Serial Bus,USB) 是一种新兴的并逐渐取代其他接口标准的数据通信方式,由 Intel.Compaq.Digit ...
- 爬虫之requests模块介绍
爬虫之requests模块介绍 requests文档http://docs.python-requests.org/zh_CN/latest/index.html [文档中包括的快速上手要精 ...
- Zynq器件XADC模块介绍
1.前言 赛灵思的7系列FPGA和Zynq器件创造性地在片上集成了模数转换器和相关的片上传感器(内置温度传感器和功耗传感器),这是相比赛灵思前一代产品来新增加的特性,可在系统设计中免去外置的ADC器件 ...
- python模块介绍-locustio:性能测试工具locustio
转自:http://automationtesting.sinaapp.com/blog/m_locustio_doc python测试文章 http://weibo.com/cizhenshi?is ...
- 【收藏】GeoMesa整体架构模块介绍、创建Schema并导入数据
geomesa-accumulo:基于 Apache Accumulo的DataStore 实现 geomesa-archetypes: Maven构建模板 geomesa-arrow: 基于 Apa ...
最新文章
- MySQL8索引篇:性能提升了100%!!
- 获取远程数据本地缓存到PHP数组
- 16.如何做到webpack打包vue项目后,可以修改配置文件
- struts2 form标签加上validate=true就出错的解决办法
- Delphi中的时间操作技术(1)
- 【渝粤题库】陕西师范大学200271 微分几何 作业(专升本)
- Nimbus三Storm源码分析--Nimbus启动过程
- Python传奇:30年崛起之路
- 创意吃鱼法(洛谷-P1736)
- python精确匹配字符串_Python: 字符串搜索和匹配,re.compile() 编译正则表达式字符串,然后使用match() , findall() 或者finditer() 等方法...
- 关于iptables配置的心得
- Unity 3D游戏开发学习资料(开发必备)
- android data/app下的文件被误删,系统恢复,怎样恢复被误删除的文件
- oracle imp仅导入数据
- Linux为什么不怕病毒
- 技术人员帮助电商运营选择最合适的物流快递运输公司的5个切入点
- 麒麟合盛(APUS)李涛:APUS云重新定义“云联邦”
- dns辅服务器未响应ping,四招教你快速解决DNS服务器未响应
- Win11安装Android子系统
- GraalVM Native Image
热门文章
- linux 复制文件生效命令,linux复制并覆盖文件使用什么命令
- 信用卡账单 php源码,华夏信用卡电子账单读取
- python信用卡管理_python信用卡操作
- 电脑屏幕视力保护色 RGB(204,232,207)
- 低龄老人“年轻态”,养老消费金融打开“新风口”
- 计算机三级网络技术知识点总结
- 老字号,没那么容易倒——wifi共享精灵
- ZBrush球体起形
- python3 使用selenium爬取QQ空间说说信息
- 求助,Mac更新系统至macOS Big Sur死机