1.先谈一下 s3c2440 时钟系统。一般来说,MCU 的主时钟源主要
是外部晶振或外部时钟,而用的最多的是外部晶振。在正确情况下,
系统内所使用的时钟都是外部时钟源经过一定的处理得到的。由于
外部时钟源的频率一般不能满足系统所需要的高频条件,所以往往
需要 PLL(锁相环)进行倍频处理。在 s3c2440 中,有 2 个不同的
PLL,一个是 MPLL,另一个是 UPLL。UPLL 是给 USB 提供
48MHz。在这里,我们主要介绍 MPLL。外部时钟源经过 MPLL 处
理后能够得到三个不同的系统时钟:FCLK、HCLK 和 PCLK。FCLK
是主频时钟,用于 ARM920T 内核;HCLK 用于 AHB 总线设备,如
ARM920T,内存控制,中断控制,LCD 控制,DMA 以及 USB 主
模块;PCLK 用于 APB 总线设备,如外围设备的看门狗,
IIS,I2C,PWM,MMC 接口,ADC,UART,GPIO,RTC 以及
SPI。这三个系统时钟(FCLK、HCLK 和 PCLK)是有一定的比例关
系,这种关系是通过寄存器 CLKDIVN 中的 HDIVN 位和 PDIVN 位
来控制的,因此我们只要知道了 FCLK,再通过这两位的控制,就
能确定 HCLK 和 PCLK。而 FCLK 是如何得到的呢?它是通过输入时
钟(即外部时钟源)的频率,经过一个计算公式(具体公式请查阅
数据手册)得到的,这个计算公式还需要三个参数
(MDIV、PDIV、SDIV),而这三个参数是经过寄存器 MPLLCON
配置得到的。最后,我们用最清晰的线路来绘制一下时钟的产生过
程:外部时钟源→通过寄存器 MPLLCON 得到 FCLK→再通过寄存
器 CLKDIVN 得到 HCLK 和 PCLK。这个配置过程在启动文件中就已