微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 关于S3C2410时钟

关于S3C2410时钟

时间:11-11 来源:互联网 点击:

生三个部分的时钟频率:FCLK、HCLK、PLCK。FCLK用于CPU核,HCLK用于AHB总线的设备(比如SDRAM),PCLK用于APB总线的设备(比如UART)。从时钟结构图中可以查看到使用不同时钟频率的硬件。

Figure 7-1. Clock Generator Block Diagram

(注:这里要注意从图中看出,Uart使用的是PCLK,后面Uart实验会用到)

下面介绍MPLL的启动流程:

(注:下面内容部分直接摘录自《s3c2410完全开发流程》,Clock部分写了非常好)

S3c2410 datasheet 224页“Figure 7-4. Power-On Reset Sequence”展示了上电后MPLL启动的过程

请跟随FCLK的图像了解启动过程:

1、上电几毫秒后,晶振输出稳定,FCLK=晶振频率,nRESET信号恢复高电平后,

CPU开始执行指令。

2、我们可以在程序开头启动MPLL,在设置MPLL的几个寄存器后,需要等待一段时间(Lock Time),MPLL的输出才稳定。在这段时间(Lock Time)内,FCLK停振,CPU停止工作。Lock Time的长短由寄存器LOCKTIME设定。

3、Lock Time之后,MPLL输出正常,CPU工作在新的FCLK下。

设置S3c2410的时钟频率就是设置MPLL的几个寄存器:

1、LOCKTIME:设为0x00ffffff

前面说过,MPLL启动后需要等待一段时间(Lock Time),使得其输出稳定。位[23:12]用于UPLL,位[11:0]用于MPLL。使用确省值0x00ffffff即可。

2、CLKdivN:用来设置FCLK:HCLK:PCLK的比例关系,默认为1:1:1

这里值设为0x03,即FCLK:HCLK:PCLK=1:2:4

CLKdivN不同的设置及对应的时钟比例关系如下图:

3、MPLLCON:设为(0x5c < 12)|(0x04 < 4)|(0x00),即0x5c0040

对于MPLLCON寄存器,[19:12]为Mdiv,[9:4]为Pdiv,[1:0]为Sdiv。有如下计算公式:

MPLL(FCLK) = (m * Fin)/(p * 2^s)

其中: m = Mdiv + 8, p = Pdiv + 2

Fin 即默认输入的时钟频率12MHz。MPLLCON设为0x5c0040,可以计算出FCLK=200MHz,再由CLKdivN的设置可知:HCLK=100MHz,PCLK=50MHz。

通常我们将如上时钟初始化的过程写成clock_init函数供其他函数调用,代码如下:

void clock_init(void)

{

/*init clock*/

rLOCKTIME = 0xFFFFFF;

/*设置FCLK:HCLK:PCLK=1:2:4,这样假设处理器主频为200M,则HCLK为50M,PCLK为25M。ARM920T内核使用FCLK, 内存控制器,LCD控制器等使用HCLK,看门狗、串口等使用PCLK*/

rCLKdivN = 0x3;

/* 设置时钟频率为202.7M*/

rMPLLCON = 0x5c0040;

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top