1 总线框架#
下图是s3c2440的总线框架,其中有AHB(Advanced High performance Bus)高速总线,APB(Advanced Peripheral Bus)外围总线。
不同总线对应不同的时钟。
SOC <-> FCLK
AHB <-> HCLK
APB <-> PCLK
其中:
1.使用AHB总线的有:LCD控制器、usb控制器、中断控制器、内存控制器等…
2.使用APB总线的有:i2c、spi、timer、gpio、adc等…具体上图。
2 时钟框架#
下图表示s3c2440 Soc的时钟框图:
下面从细节上讲解时钟体系:
2.1 如何选择时钟源#
s3c2440时钟源有2个,一个是OSC,一个是外部时钟EXTCLK,上面的时钟框图有标记,当然大家也可以查看手册“Figure 7-1. Clock Generator Block Diagram”。
那么如何选择是OSC还是EXTCLK呢?
打开原理图,OM3,OM2的引脚接地,那么OM[3,2]=00.所以根据手册“Table 7-1. Clock Source Selection at Boot-Up”可知时钟源为OSC晶振。
2.2 如何得到HCLK,PCLK,UCLK#
先了解下PLL, DIV
PLL:用锁相环进行倍频
DIV:用分频器进行分频
如下图:
生成的MPLL(Main PLL)和UPLL(USB PLL),MPLL直接提供给FCLK,通过HDIVN分频给HCLK,通过PDIVN分频给PCLK,再传给下面的各个设备。
osc经过UPLL(USB PLL)得到UCLK。
3 配置时钟控制器#
3.1 s3c2440时钟时序#
下图是2440时钟配置时序:
1.上电后,nRESET复位信号拉低,此时cpu还无法取指令工作。
2.nRESET复位信号结束后变为高电平,此时cpu开始工作。此时cpu主频FCLK=osc。
3.此时可以配置PLL,经过lock time后,FCLK倍频成新的时钟。
3.2 如何配置时钟#
在参考手册的特性里介绍了S3C2440的工作频率,Fclk最高400MHz,Hclk最高136MHz,Pclk最高68MHz。那么 我们干脆配置FCLK:HCLK:PCLK= 400:100:50 (MHz).
3.2.1 配置lock time#
我们取芯片手册上的推荐值。
1 | /* LOCKTIME(0x4C000000) = 0xFFFFFFFF */ |
3.2.2 配置MPLL得到FCLK#
也可参考配置表取值
1 | /* |
注意:如果也要配置了UPLL,那么先配置UPLL,要个7个NOP后才能再配置MPLL.
###3,配置CLKDIVN得到HCLK,PCLK
1 | /* CLKDIVN(0x4C000014) = 0X5, tFCLK:tHCLK:tPCLK = 1:4:8 */ |
注意:如果HDIV设置为非0,CPU的总线模式要进行改变,默认情况下FCLK = HCLK,CPU工作在fast bus mode快速总线模式下,HDIV设置为非0后, FCLK与HCLK不再相等,要将CPU改为asynchronous bus mod异步总线模式.
1 | /* 设置CPU工作于异步模式 */ |
3.2.2 完整汇编代码#
1 | .text |