s3c2440如何设置fclk

2023-04-07 17:30   247   0  

  1设置LockTIme变频锁定时间


  2设置FCLK与晶振输入频率(Fin)的倍数


  3设置FCLK,HCLK,PCLK三者之间的比例




  LockTIme 变频锁定时间由LOCKTIME寄存器(见下表)来设置,由于变频后开发板所有依赖时钟工作的硬件都需要一小段调整时间,该时间计数通过设置 LOCKTIME寄存器[31:16]来设置UPLL(USB时钟锁相环)调整时间,通过设置LOCKTIME寄存器 [15:0]设置MPLL调整时间,这两个调整时间数值一般用其默认值即可。




  表2-8变频锁定时间寄存器(LOCKTIME)


  s3c2440如何设置fclk


  FCLK与Fin的倍数通过MPLLCON寄存器设置,三者之前有以下关系:


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


  其中:m = MDIV + 8, p = PDIV + 2, s = SDIV


  当设置完MPLL之后,就会自动进入LockTime变频锁定期间,LockTime之后,MPLL输出稳定时钟频率。


  表2-9 MPLL配置寄存器(MPLLCON)


  s3c2440如何设置fclk


  通过上述算法比较难以找到合适的PLL值,下表给出了官方推荐的一些MPLL参考设置:


  表2-10 官方推荐MPLL


  s3c2440如何设置fclk


  MPLL(FCLK) = (2*(MDIV+8) * Fin) / ((PDIV+2) * 2^(SDIV))。


  确定时钟频率最关键的代码:


  ChangeMPllValue((mpll_val》》12)&0xff, (mpll_val》》4)&0x3f, mpll_val&3);


  上面调函数实现了MDIV=92 PDIV=1 SDIV=1从而计算MPLL和UPLL的值。


  m=(MDIV+8)=100, p=(PDIV+2)=3,s=SDIV=1.


  ChangeClockDivider(key, 12);


  再找出函数的原型分析下,


  //*************************[ MPLL ]*******************************


  下面这个函数就是确定MPLLCON寄存器的值也就是确定MDIV、PDIV、SDIV的值。


  void ChangeMPllValue(int mdiv,int pdiv,int sdiv)


  {


  rMPLLCON = (mdiv《《12) | (pdiv《《4) | sdiv;


  }


  上面已经计算出来m=(MDIV+8)=100, p=(PDIV+2)=3,s=SDIV=1.


  m p s 的值,从而可以得出 MPLL=(2*100*12)/(3*1)=400MHZ


  m=77+8=85,p=5,s=0


  UPLL=(85*12)/(5*1)=97/5=


  FCLK=400MHZ


  又因为FCLK:HCLK:PCLK的分频比为1:4:8,从而得到HCLK的值为100MHZ,PCLK的值为50MHZ。




登录icspec成功后,会自动跳转查看全文
博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。