S3C2440A 中的时钟控制逻辑可以产生必须的时钟信号,包括 CPU 的 FCLK,AHB 总线外设的 HCLK 以及
APB 总线外设的 PCLK。S3C2440A 包含两个锁相环(PLL):一个提供给 FCLK、HCLK 和 PCLK,另一个专用于
USB 模块(48MHz)。
图 7-1 显示了时钟结构的方框图。主时钟源来自一个外部晶振(XTIpll)或外部时钟(EXTCLK)。时钟发生包
含了一个连接到外部晶振的振荡器(震荡放大器),还含有 S3C2440A 所必须的两个用于产生高频率时钟的 PLL(锁
相环)。
时钟源选择
表 7-1 显示了模式控制引脚(OM3 和 OM2)的组合关系的并为 S3C2440A 选择时钟源。nRESET 的上升沿
时参考 OM3 和 OM2 引脚将 OM[3:2]的状态在内部锁定。
表 7-1. 引导启动(Boot-Up)时时钟源的选择
模式 OM[3:2] | MPLL 状态 | UPLL 状态 | 主时钟源 | USB 时钟源 |
00 | 开启 | 开启 | 晶振 | 晶振 |
01 | 开启 | 开启 | 晶振 | 外部时钟 |
10 | 开启 | 开启 | 外部时钟 | 晶振 |
11 | 开启 | 开启 | 外部时钟 | 外部时钟 |
时钟控制逻辑
时钟控制逻辑决定使用的时钟源,即使用 PLL 时钟(Mpll)或直接使用外部时钟(XTIpll 或 EXTCLK)。当配置了PLL 为一个新频率值时,时钟控制逻辑先禁止 FCLK,直至使用 PLL 锁定时间使 PLL 稳定输出。时钟控制逻辑在上电复位时和从掉电模式中唤醒时同样是激活的。
上图显示了上电复位期间时钟行为顺序。晶振在若干毫秒内开始振荡。当在 OSC(XTIpll)时钟稳定后释放nRESET,PLL 开始按默认 PLL 配置运行。但是通常认为上电复位后的 PLL 是不稳定的,因此在软件重新配置PLLCON 寄存器之前 Fin 代替 Mpll(PLL 输出)直接提供给 FCLK。即使用户不希望在复位后改变 PLLCON 寄存器的默认值,用户还是应该用软件写入相同的值到 PLLCON 寄存器中。只有置 PLL 为一个新频率后,PLL 会开始锁定连续逼近新频率。可以在锁定时间后立即配置 FCLK 为 PLL 输出(Mpll)。
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 所决定
1.锁定时间计数寄存器(LOCKTIME )(使用默认值)
寄存器 | 地址 | R/W | 描述 | 复位值 |
LOCKTIME | 0x4C000000 | R/W | PLL 锁定时间计数寄存器 | 0xFFFFFFFF |
2.PLL 控制寄存器(MPLLCON 和 UPLLCON) (用于设置FCLK与Fin的倍数)
寄存器 | 地址 | R/W | 描述 | 复位值 |
MPLLCON | 0x4C000004 | R/W | MPLL 配置寄存器 | 0x00096030 |
UPLLCON | 0x4C000008 | R/W | UPLL 配置寄存器 | 0x0004d030 |
PLLCON | 位 | 描述 | 初始状态 |
MDIV | [19:12] | 主分频器控制 | 0x96 / 0x4d |
PDIV | [9:4] | 预分频器控制 | 0x03 / 0x03 |
SDIV | [1:0] | 后分频器控制 | 0x0 / 0x0 |
Mpll = ( 2 × m × Fin ) / ( p × 2s )
m = ( MDIV + 8 ), p = ( PDIV + 2 ), s = SDIV
3.时钟分频控制(CLKDIVN)寄存器 (用于设置FCLK/HCLK/PCLK三者的比例)
寄存器 | 地址 | R/W | 描述 | 复位值 |
CLKDIVN | 0x4C000014 | R/W | 时钟分频控制寄存器 | 0x00000004 |
CLKDIVN | 位 | 描述 | 初始状态 |
UCLK 选择寄存器(UCLK 必须为 48MHz 给 USB) 0:UCLK = UPLL 时钟 1:UCLK = UPLL 时钟 / 2 当 UPLL 时钟被设置为 48MHz 时,设置为 0 当 UPLL 时钟被设置为 96MHz 时,设置为 1 |
DIVN_UPLL | [3] | 0 |
00:HCLK = FCLK/1 01:HCLK = FCLK/2 10:HCLK = FCLK/4 当 CAMDIVN[9] = 0 时 HCLK = FCLK/8 当 CAMDIVN[9] = 1 时 11:HCLK = FCLK/3 当 CAMDIVN[8] = 0 时 HCLK = FCLK/6 当 CAMDIVN[8] = 1 时 |
HDIVN | [2:1] | 00 |
0:PCLK 是和 HCLK/1 相同的时钟 1:PCLK 是和 HCLK/2 相同的时钟 |
PDIVN | [0] | 0 |