发博文
D.A.S

http://blog.chinaunix.net/space.php?uid=20643761

人生需要信仰,需要主义,只要认定了那是值得你追求的,何必在意值还是不值。勿以成败论英雄,人生本是过程,结局从来就不是生命的尺度,因为没人知道那“后来的后来”究竟是什么,唯一确定的是“人生固有一死”,浮   
个人资料
  • 博客访问:254022
  • 博文数量:63
  • 博客积分:5016
  • 博客等级:大校
  • 关注人气: 3
  • 注册时间:2008-01-20 11:34:57
订阅我的博客
  • 订阅
  • 订阅到鲜果
  • 订阅到抓虾
  • 订阅到Google
字体大小: 博文
分类: Hardware Related

S3C2410 CPU默认的工作主频为12MHz,使用PLL电路可以产生更高的主频供CPU及外围器件使用。S3C2410有两个PLLMPLLUPLLUPLL专用与USB设备。MPLL用于CPU及其他外围器件。

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

Figure 7-1. Clock Generator Block Diagram

 

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

 

下面介绍MPLL的启动流程:

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

S3c2410 datasheet 224Figure 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设定。

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

 

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

1LOCKTIME:设为0x00ffffff

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

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

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

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

 

3MPLLCON:设为(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 即默认输入的时钟频率12MHzMPLLCON设为0x5c0040,可以计算出FCLK=200MHz,再由CLKDIVN的设置可知:HCLK=100MHzPCLK=50MHz

 

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

void clock_init(void)

{

        /*init clock*/

rLOCKTIME = 0xFFFFFF;

 

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

rCLKDIVN  = 0x3;

 

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

    rMPLLCON = 0x5c0040;

   

}

文件: clock.rar
大小: 0KB
下载: 下载

 

返回ARM9硬件接口学习专题

 

 

[发评论] 评论 重要提示:警惕虚假中奖信息!
  • chinaunix网友 2009-08-31 08:44
    帮助很大~专业啊
亲,您还没有登录,请[登录][注册]后再进行评论