全部博文(52)
分类: LINUX
2008-02-01 09:13:35
S
通过MPLL会产生三个部分的时钟频率:FCLK、HCLK、PLCK。FCLK用于CPU核,HCLK用于AHB总线的设备(比如SDRAM),PCLK用于APB总线的设备(比如UART)。从时钟结构图中可以查看到使用不同时钟频率的硬件。
Figure 7-1. Clock Generator Block Diagram
(注:这里要注意从图中看出,Uart使用的是PCLK,后面Uart实验会用到)
下面介绍MPLL的启动流程:
(注:下面内容部分直接摘录自《s
S
请跟随FCLK的图像了解启动过程:
1、上电几毫秒后,晶振输出稳定,FCLK=晶振频率,nRESET信号恢复高电平后,
CPU开始执行指令。
2、我们可以在程序开头启动MPLL,在设置MPLL的几个寄存器后,需要等待一段时间(Lock Time),MPLL的输出才稳定。在这段时间(Lock Time)内,FCLK停振,CPU停止工作。Lock Time的长短由寄存器LOCKTIME设定。
3、Lock Time之后,MPLL输出正常,CPU工作在新的FCLK下。
设置S
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:设为(0x
对于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设为0x
void clock_init(void)
{
/*init clock*/
rLOCKTIME = 0xFFFFFF;
/*设置FCLK:HCLK:PCLK=1:2:4,这样假设处理器主频为
rCLKDIVN = 0x3;
/* 设置时钟频率为
rMPLLCON = 0x
}
|