你好,游客 登录 注册 搜索
背景:
阅读新闻

S3C2440 MPLL & UPLL

[日期:2014-10-06] 来源:Linux社区  作者:Linux [字体: ]

S3C2440有两个PLL(phase locked loop)一个是MPLL,一个是UPLL。MPLL用于CPU及其他外围器件,UPLL用于USB。用于产生FCLK, HCLK, PCLK三种频率,这三种频率分别有不同的用途:
FCLK是CPU提供的时钟信号。
HCLK是为AHB总线提供的时钟信号, Advanced High-performance Bus,主要用于高速外设,比如内存控制器,中断控制器,LCD控制器, DMA 等。

从S3C2440的DataSheet里可以看到,S3C2440最大支持400MHz的主频,但是这并不意味着一定工作在400MHz下面,可以通过设定MPLL, UPLL寄存器来设定CPU的工作频率。 尽管在CPU上电(power-on)或者复位(reset)后,MPLL就开始进入工作状态,但是此时MPLL的输出(Mpll)并不作为系统的时钟,而是直接使用外部信号EXTCLK或者外部时钟晶振作为系统时钟。直到软件初始化MPLL寄存器(rMPLLCON),写入了有效的值过后,系统才开始使用MPLL的输出(Mpll)作为系统时钟。虽然很多时候我们不必重新设置MPLL寄存器(rMPLLCON)新的值,但是为了使系统使用其输出作为时钟信号,在软件初始化系统部分,还是要向rMPLLCON写入一个有效的旧的值。这样子才使系统处于正确的工作状态。

关于MPLL的计算方法

1. U32 mpll_val=0;

      mpll_val = (92<<12)|(1<<4)|(1);
      算得mpll_val的二进制:0101 1100 0000 0001 0001
      注意:(92<<12)中的92为十进制数,转换为二进制为0x5C。

2. ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);

    代入1算得:ChangeMPllValue(0x5C,1,1);

3. 找到ChangeMPllValue子函数
      void ChangeMPllValue(int mdiv,int pdiv,int sdiv)
            {
                    rMPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;
              }

4. 调用子函数,得到rMPLLCON二进制为:0101 1100 0000 0001 0001

5. 根据S3C2440A官方datasheet:
    PLLCON          Bit                        Deion
        MDIV        [19:12]          Main divider control
        PDIV          [9:4]              Pre-divider control
        SDIV          [1;0]              Post divider control

      以及MPLL Control Register
            Mpll=(2*m*Fin)/(p*2s)
          m=(MDIV+8)  p=(PDIV+2)  s=SDIV
  因rMPLLCON二进制为:0101 1100 0000 0001 0001,所以
m=(MDIV+8)=([19:12]+8)=92+8=100
p=(PDIV+2)=([9:4]+2)=1+2=3
s=SDIV=[1:0]=1
  Mpll=(2*m*Fin)/(p*2s)=(2*100*12)/(3*2)=400M

PCLK是为APB总线提供的时钟信号,Advanced Peripherals Bus,主要用于低速外设,比如看门狗,UART控制器, IIS, I2C, SDI/MMC, GPIO,RTC and SPI等。

---------------------------------分割线---------------------------------

S3C2440上RTC时钟驱动开发实例分析 http://www.linuxidc.com/Linux/2013-06/86042.htm

S3C2440的UART功能测试 http://www.linuxidc.com/Linux/2013-05/85158.htm

S3C2440 地址分配硬件连接及其启动原理分析 http://www.linuxidc.com/Linux/2013-04/83218.htm

S3C2440时钟设置 http://www.linuxidc.com/Linux/2013-03/81245.htm

linux-2.6.14移植到S3C2440 http://www.linuxidc.com/Linux/2012-12/77125.htm

S3C2440开发板LED驱动——ioremap 映射 http://www.linuxidc.com/Linux/2012-12/76084.htm

---------------------------------分割线---------------------------------

本文永久更新链接地址http://www.linuxidc.com/Linux/2014-10/107653.htm

linux
相关资讯       S3C2440 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款