S3C2440时钟分析
S3C2440时钟控制逻辑可以产生FCLK、HCLK、PCLK和UCLK。FCLK为CPU时钟。HCLK为AHB总线外设时钟,包括存储控制器、中断控制器、LCD控制器、DMA控制器等。PCLK为APB总线外设时钟,包括看门狗、IIS、IIC、PWM定时器、MMC接口、ADC、UART、GPIO、RTC和SPI等等。UCLK专用于USB主机或设备接口时钟。
时钟源的选择:
时钟源的选择是通过OM3和OM2管脚控制的,时钟源可以是外部晶振,也可以是外部时钟。
S3C2440有两个锁相环(PLL),一个用于FCLK、HCLK和PCLK的MPLL,另一个专用于UCLK的UPLL。
MPLLCON和UPLLCON寄存器用于设置FCLK和UCLK的时钟频率,那么最后的时钟频率是如何计算的呢,有如下公式:
对于FCLK:
Fout= (2 * m * Fin) / (p * 2S)
m= (MDIV + 8), p = (PDIV + 2), s = SDIV
对于UCLK:
Fout= (m * Fin) / (p * 2S)
m= (MDIV + 8), p = (PDIV + 2), s = SDIV
S3C2440数据手册上也给出了典型值,我们也来验证一下他给的设置是否正确。比如UCLK为48MHz,他给的MDIV为56,PDIV为2,SDIV为2,那么UCLK为多少呢,依照上面给的公式计算得到如下值:(56+8)*12/((2+2)*2²)=48,结果正确。如果我要设置FCLK为400MHz,数据手册上也没有给出参考,唯一接近的是405MHz,没有关系,我们自己来计算,下面给出一组参考值:
MDIV= 92、PDIV= 1、 SDIV= 1,大家依照上面的公司计算一下,看FCLK是否为400MHz。
前面也只是设定了FCLK和UCLK的时钟,还有HCLK和PCLK没有设置,HCLK和PCLK是通过FCLK分频得来的。通过CLKDIVN寄存器来控制。
也就是说还和CAMDIVN寄存器有关。