1)FLCK、HCLK和PCLK的关系
S3C2440A 中包含三个时钟信号,FCLK、HCLK 、PCLK。
两个锁相环(PLL):一提供给FCLK、HCLK 和PCLK,另一个专用于USB 模块(48MHz)。
FCLK:用于CPU核
HCLK:用于高速外设总线(如SDRAM、中断、LCD、DMA、USB)
PLCK:用于低速外设总线(如UART、IIS、I2C、PWM、MMC、ADC、GPIO、RTC、SPI、WATCHDOG)
UPLL:用于USB设备
S3C2440A 还支持对FCLK、HCLK 和PCLK 之间分频比例的选择。该比例由CLKDIVN 控制寄存器中的HDIVN和 PDIVN 所决定。
这三个时钟通常设置为1:4:8,1:3:6的分频关系,也就说如果主频FLCK是400MHz,按照1:4:8的设置,那么HLCK是100MHz,PLCK是50MHz
寄存器CLKDIVN表明并设置了这三个时钟的关系
输入时钟FIN与主频FCLK的关系:
现代的CPU基本上都使用了比主频低的多的时钟输入,在CPU内部使用锁相环进行倍频。对于S3C2440,常用的输入时钟FIN有两种:12MHz和16.9344MHz,那么CPU是如何将FIN倍频为FCLK的呢?
S3C2440使用了三个倍频因子MDIV、PDIV和SDIV来设置将FIN倍频为MPLL,也就是FCLK
寄存器MPLLCON就是用来设置倍频因子的
例如,假设输入时钟FIN=16.9344M,MDIV=110, PDIV=3, SDIV=1,
利用上面的公式,FCLK=2*16.9344*(110+8)/((2+3)*2)=399.65
3)关于USB时钟
S3C2440有两个锁相环,一个主锁相环MPLL提供给FCLK的,另外一个UPLL是提供给USB时钟(48MHz)的,与MPLL一样,UPLL的产生也是通过UPLLCON寄存器设置分频因子得到,计算公式稍有不同:
UPLL=(m*FIN)/(p*2^s) where m=(MDIV+8), p=(PDIV+2), s=SDIV,同样,可以通过查表得到一个合适的值。
最后值得一提的是,在CLKDIVN的第三位DIVN_UPLL用来设置USB时钟UCLK和UPLL的关系,如果UPLL已经是48Mhz了,那么这一位应该设置为0,表示1:1的关系,否则是1:2的关系
4)最后,给出我的TQ2440开发板的时钟设置
FIN=16.9344
MDIV:110 HDIV:3 SDIV:1,比例为1:4:8
CLKDIVN: 5
因此,FCLK=399.65MHZ HCLK=99.91MHZ PCLK=49.95MHZ