s3c2440的FCLK、HCLK、PCLK
来源:互联网 发布:硕鼠for mac 编辑:程序博客网 时间:2024/04/29 05:50
1、系统工作时钟频率
在对系统时钟进行提速之前,让我们先来了解下S3C2440上的工作时钟频率,FCLK,HCLK,PCLK,其中FCLK主要为ARM920T内核提供工作频率,如图2-44所示:
图2-44 ARM920T内核结构
HCLK主要为S3C2440 AHB总线(Advanced High performance Bus)上挂接硬件提供工作频率,AHB总线主要挂接有内存,NAND,LCD控制器等硬件,如图2-45所示:
图2-45 S3C2440 AHB总线上挂接硬件
PCLK主要为APB总线提供工作频率,由图2-46所示,APB总线主要挂接UART串口,Watchdog等硬件控制器。
图2-46 S3C2440 APB总线挂接硬件
也就是说,对于一些需要时钟工作的硬件,如果切断其时钟源 ,就不会再工作,从而达到降低功耗的目的,这也是便携嵌入式设备里的一个特点。
时钟源:为了减少外界环境对开发板电磁干扰,降低制作成本,通常开发板的外部晶振时钟频率都很低,MINI2440开发板由12MHz的晶振来提供时钟源,要想让CPU运行在更高的频率就要通过时钟控制逻辑单元PLL(锁相环)来提高主频。
S3C2440里有两个PLL:MPLL和UPLL,MPLL用来产生FCLK,HCLK,PCLK的高频工作时钟,UPLL用来为USB提供工作频率。
图2-47系统时钟初始化时序
开发板上电后,晶振OSC开始提供晶振时钟,由于系统刚刚上电,电压信号等都还不稳定,这时复位信号(nRESET)拉低,这时MPLL虽然默认启动,但是如果不向MPLLCON中写入值,那么外部晶振则直接作为系统时钟FCLK,过几毫秒后,复位信号上拉,CPU开始取指运行,这时可以通过代码设置启动MPLL,MPLL启动需要一定锁定时间(LockTime),这是因为MPLL输出频率还没有稳定,在这期间FCLK都停止输出,CPU停止工作,过了LockTime后时钟稳定输出,CPU工作在新设置的频率下,这时可以通过设置FCLK,HCLK和PCLK三者的频率比例来产生不同总线上需要的不同频率,下面详细介绍开启MPLL的过程:
l 设置LockTime变频锁定时间
l 设置FCLK与晶振输入频率(Fin)的倍数
l 设置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设置比例
如果HDIV设置为非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
…
…
…
…
- s3c2440的FCLK、HCLK、PCLK
- s3c2440的FCLK、HCLK、PCLK
- S3C2440 FCLK、HCLK、PCLK的配置
- S3C2440 FCLK、HCLK、PCLK的配置
- S3C2440 FCLK, HCLK, PCLK的关系
- FCLK,HCLK,PCLK,s3c2440时钟
- ARM 9:S3C2440 FCLK, HCLK, PCLK时钟的关系
- 【转】ARM9 S3C2440 FCLK,HCLK,PCLK时钟的关系
- ARM9 S3C2440 FCLK,HCLK,PCLK时钟的关系
- 关于S3C2440时钟设置的理解-FCLK HCLK PCLK
- S3C2440的时钟系统:MPLL,UPLL,FCLK,HCLK,PCLK
- s3c2440 FCLK、HCLK、PCLK时钟频率配置
- s3c2440 FCLK、HCLK、PCLK时钟频率配置
- FCLK HCLK PCLK的关系
- FCLK HCLK PCLK的关系
- FCLK HCLK PCLK的关系
- FCLK/HCLK/PCLK的配置
- 32的FCLK , HCLK, PCLK
- IOS的内存管理
- 浅聊初级数据持久化
- Foundation框架第四弹:NSArray的写入与读取
- 将.xlsx文件读取到.xml文件
- Service的简介和启动方式
- s3c2440的FCLK、HCLK、PCLK
- mysql5 自动增长ID,编号不连续问题
- poj 1285 Agri-Net(prim || kruskal)
- 翻转排序
- cocos2dx 弹出式模态对话框的实现与封装
- 【Android】将欢迎界面或者引导界面全屏化显示
- Zigbee的HAL层
- c#编写的基于Socket的异步通信系统--SanNiuSignal.DLL已开源
- android样式与主题