时钟脉冲信号
按一定的电压幅度,一定的时间间隔连续发出的脉冲信号叫做时钟脉冲信号。用于给处理器和其他硬件提供时钟度量。
时钟脉冲频率
在单位时间内产生的时钟脉冲的个数叫做时间脉冲频率
时钟源分类
1.晶振:又称晶体振荡器,通过石英晶体切割、加电极、通电后会产生固定的机械震荡。优点是结构简单、噪声低,缺点是生产成本高。
2.PLL:锁相环,通过外部晶振和锁相环电路来提高晶振的频率。
时钟体系
1.晶振频率是多少?
2.有多少个PLL?
3.PLL产生出了哪些时钟?(ARM核使用的是哪个时钟)
4.产生出来的时钟用来做什么?
5.在datasheet中的CLOCK & POWER MANAGEMENT中可以相关描述
1.晶振频率是12MHz
2.MPLL,UPLL
3.MPLL产生出来FCLK、HCLK、PCLK;UPLL产生出来UCLK
1.上电之后ARM核按照晶振频率在工作
2.当PLL配置(Locktime)完成是会进入Lock Time,处理器停止工作,然后以新的频率开始工作。
3.时钟初始化软件需要完成的工作:
3.1.配置Lock Time;
3.2.设置分频系数(用于FCLK来配置HCLK和PCLK);
3.3.如果HDIVN不等于0,需要设置CPU从快速模式到异步模式。FCLK是核的频率,HCLK是总线的频率,当核的频率和总线的频率不相等的时候需要设置CPU到异步工作模式。
3.4.配置FCLK
代码编写
1.找到设置lock time的寄存器LOCKTIME(0x4C000000),一般使用默认值,所以不需要去设置
2.设置PLL需要去设置MPLLCON(0x4C000004)中的MDIV=92 PDIV=2 SDIV=1
3.设置分频系数一定要在datasheet中对应的表里面。可以参考uboot中的分频系数来设置FCLK:HCLK:PCLK=1:4:8 HDIVN=2 PDIVN=1。在CLKDIVN(0x4C000014)寄存器中是用来设置HDIVN和PDIVN的
4.设置异步工作模式需要在ARM核手册中找到CP15的R1寄存器的iA和nF位,并设置为1
时钟设置总结(可以参考芯片手册和uboot代码)
0.设置Locktime(默认也可以)
1.设置PLL系数
2.设置选择器
3.设置分频系数
4.设置异步模式
通过查询芯片手册:
Fclk:
Hclk和Pclk:
此外
代码演示:
/* 设置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
*/