S3C2440 时钟设置分析(FCLK, HCLK, PCLK)

时间:2020-12-01 20:28:18

  时钟对于一个系统的重要性不言而喻,时钟决定了系统发送数据的快慢,高性能的芯片往往能支持更快速度的时钟,从而提供更好的体验。

S3C2440的输入时钟频率是12MHZ,对于这款芯片,显然速度是不够的,所以就需要进行设置来获取我们想要的频率,S3C2440的芯片手册提供了这样的一个表格供选择

S3C2440 时钟设置分析(FCLK, HCLK, PCLK)

现在我们希望获取的输出频率为400MHZ,那么就需要设置MDIV,PDIV,SDIV这三个数值,只需设置对应的寄存器即可;因为需要的是400MHZ,因此使用的是MPLLCON

S3C2440 时钟设置分析(FCLK, HCLK, PCLK)

代码实现如下:

#define S3C2440_MPLL_400MHZ ((0x5c << 12) | (0x1 << 4) | (0x1))
ldr r0,=0x4c000004
ldr r1,=S3C2440_MPLL_400MHZ
str r1,[r0]

这个获取到了FCLK=400MHZ,还需要获取HCLK=200MHZ, PCLK=100MHZ,PCLK=100MHZ是最终的目的,所以还需要设置CLKDIVN寄存器

S3C2440 时钟设置分析(FCLK, HCLK, PCLK)

实现代码如下:

ldr r0,=0x4c000014
mov r1,#0x03 //FCLK:HCLK:PCLK = 4:2:1, HDIVN=1, PDIVN=1
str r1,[r0]

最后,芯片手册还有个notes,信息如下

S3C2440 时钟设置分析(FCLK, HCLK, PCLK)

当HDIVN不为0的时候,CPU的总线模式必须通过如下的指令切换成异步总线模式

mrc p15,,r0,c1,c0,
orr r0,r0,#R1_nF:OR:R1_iA
mcr p15,,r0,c1,c0,

至此S3C2440的时钟初始化就完成了,因为时钟初始化是在u-boot中进行的,所以使用了汇编进行编码,不过身为一个嵌入式er,这点汇编肯定是小意思啦。