1.时钟结构
主时钟源来自一个外部晶振(XTIpll)或外部时钟(EXTCLK)。时钟发生包含了一个连接到外部晶振的振荡器(震荡放大器),还含有S3C2440A 所必须的两个用于产生高频率时钟的 PLL(锁相环)
2.时钟源选择
3.锁相环PLL
出时钟频率 Mpll 相关参考输入时钟频率 Fin 有如下等式:
Mpll = ( 2 × m × Fin ) / ( p × 2^s )
m = M(分频器 M 的值)+ 8, p = P(分频器 P 的值)+ 2
PLL 和时钟发生器通常使用以下条件:
连接示例:
实际电路:
① 12MHz
②.RTC实时时钟
③
上电复位:
图 7-4 显示了上电复位期间时钟行为顺序。晶振在若干毫秒内开始振荡。当在 OSC(XTIpll)时钟稳定后释放nRESET,PLL 开始按默认 PLL 配置运行。但是通常认为上电复位后的 PLL 是不稳定的,因此在软件重新配置PLLCON 寄存器之前 Fin 代替 Mpll(PLL 输出)直接提供给 FCLK。即使用户不希望在复位后改变 PLLCON 寄存器的默认值,用户还是应该用软件写入相同的值到 PLLCON 寄存器中。
只有置 PLL 为一个新频率后,PLL 会开始锁定连续逼近新频率。可以在锁定时间后立即配置 FCLK 为 PLL 输出(Mpll)。
4.FCLK、 HCLK、 PCLK
- FCLK 是提供给 ARM920T 的时钟。
- HCLK 是提供给用于 ARM920T,存储器控制器,中断控制器,LCD 控制器,DMA 和 USB 主机模块的 AHB总线的时钟。
- PCLK 是提供给用于外设如 WDT,IIS,I2C,PWM 定时器,MMC/SD 接口,ADC,UART,GPIO,RTC 和SPI
的 APB 总线的时钟。
S3C2440A 还支持对 FCLK、HCLK 和 PCLK 之间分频比例的选择。该比例由 CLKDIVN 控制寄存器中的 HDIVN和 PDIVN 所决定。
设置了 PMS 值后,必须接着设置 CLKDIVN 寄存器。设置 CLKDIVN 的值将在 PLL 锁定时间后起效。对于复位和改变电源管理模式该值同样起效。
5. 所涉及到的寄存器:
1、锁定时间计数寄存器(LOCKTIME)
2、PLL控制寄存器(MPLLCON和UPLLCON)
PLL 值选择向导(MPLLCON)
1. Fout = 2 × m × Fin / ( p*2s ),Fvco = 2 × m × Fin / p 此处:m =MDIV+8, p=PDIV+2, s=SDIV
2. 600MHz ≤ FVCO ≤ 1.2GHz
3. 200MHz ≤ FCLKOUT ≤ 600MHz
4. 不要设置 P 或 M 的值为 0,这是因为设置 P=000000,M=00000000 将会引起 PLL 的故障。
5. P 和 M 的合理范围为:1 ≤ P ≤ 62,1 ≤ M ≤ 248
m = MDIV + 8 = 92 + 8 =100,
p = PDIV +2 = 3,
S = SDIV = 1,
3、时钟控制寄存器(CLKCON)
4、时钟分频控制(CLKDIVN)寄存器
5、时钟慢速控制(CLKSLOW)寄存器
6.摄像头时钟分频(CAMDIVN)寄存器
6.时钟设置代码
/*
* 设置locktime寄存器
*/
ldr LOCKTIME_ADDR,=0x4C000000
ldr LOCKTIME_DAT,=0xFFFFFFFF
str LOCKTIME_DAT,[LOCKTIME_ADDR]
/*
* 设置PLLCON中的MPLLCON寄存器
*/
ldr MPLLCON_ADDR,=0x4C000004
ldr MPLLCON_DAT,=((92<<12)|(1<<4)|(1<<0))
str MPLLCON_DAT,[MPLLCON_ADDR]
/*
* 设置CLKCON寄存器
*/
ldr CLKCON_ADDR,=0x4C00000C
ldr CLKCON_DAT,= 0xFFFFF0
str CLKCON_DAT,[CLKCON_ADDR]
/*
* 设置CLKDIVN寄存器
*/
ldrCLKDIVN_ADDR,=0x4C000014
ldr CLKDIVN_DAT,=((2<<1)|(1<<0))
str CLKDIVN_DAT,[CLKDIVN_ADDR]
/*
* 设置CPU工作于异步模式
*/
mrc p15,0,r0,c1,c0,0
orr r0,r0,#0xc0000000
mcr p15,0,r0,c1,c0,0