新闻中心

EEPW首页>嵌入式系统>设计应用> S3C2440时钟电源管理

S3C2440时钟电源管理

作者: 时间:2016-11-21 来源:网络 收藏
S3C2440时钟可以选用晶振(XTAL),也可以使用外部时钟(EXTCLK),由系统复位时,在复位信号上升沿对引脚OM3、OM2所测的状态来确定。由于我所用的开发板这两个引脚接地,故外部晶振作为主锁相环(MPLL)和usb锁相环(UPLL)的时钟源。

含有两个锁相环MPLL、UPLL产生系统所需要的不同频率的时钟
MPLL:
为CPU产生FCLK时钟
为AHB产生HCLK时钟
为APB产生PCLK时钟

本文引用地址://m.amcfsurvey.com/article/201611/319196.htm

UPLL:
为usb(Host and Device)产生UCLK(48M)


FCLK,HCLK和 PCLK
FCLK是提供给ARM920T 的时钟。
HCLK 是提供给用于 ARM920T,存储器控制器,中断控制器,LCD 控制器,DMA 和 USB 主机模块的 AHB
总线的时钟。
PCLK 是提供给用于外设如WDT,IIS,I2C,PWM 定时器,MMC/SD 接口,ADC,UART,GPIO,RTC 和
SPI的APB 总线的时钟。


下图为PLL(锁相环)方框图

设置FCLK要用到PLL控制寄存器MPLLCON

例如:如果外部晶振Fin为12MHZ,设置FCLK为400MHZ,

由公式Fout = 2 × m × Fin / ( p*2^s) 此处:m =MDIV+8, p=PDIV+2, s=SDIV

可知rMPLLCON=((92<<12)|(1<<4)|1) 其中(MDIV=92, PDIV=1,SDIV=1)。

下面的这个函数是配置FCLK HCLK PCLK的比例的函数,用到时钟分频寄存器CLKDIVN

  1. voidChangeClockDivider(inthdivn,intpdivn)
  2. {
  3. //hdivn,pdivnFCLK:HCLK:PCLK
  4. //0,01:1:1
  5. //0,11:1:2
  6. //1,01:2:2
  7. //1,11:2:4
  8. //2,01:4:4
  9. //2,11:4:8
  10. //3,01:3:3
  11. //3,11:3:6
  12. rCLKDIVN=(hdivn<<1)|pdivn;
  13. if(hdivn==2)
  14. rCAMDIVN=(rCAMDIVN&~(3<<8))|(1<<9);
  15. if(hdivn==3)
  16. rCAMDIVN=(rCAMDIVN&~(3<<8))|(1<<8);
  17. }


[cpp]view plaincopy
  1. //**************************[UPLL]*******************************
  2. voidChangeUPllValue(intmdiv,intpdiv,intsdiv)//配置UPLLCON寄存器
  3. {
  4. rUPLLCON=(mdiv<<12)|(pdiv<<4)|sdiv;
  5. }
[cpp]view plaincopy
  1. voidCalcBusClk(void)//计算总线频率
  2. {
  3. U32val;
  4. U8m,p,s;
  5. val=rMPLLCON;
  6. m=(val>>12)&0xff;
  7. p=(val>>4)&0x3f;
  8. s=val&3;
  9. //(m+8)*FIN*2不要超出32位数!
  10. FCLK=((m+8)*(FIN/100)*2)/((p+2)*(1<
  11. val=rCLKDIVN;
  12. m=(val>>1)&3;//HDIVN的值
  13. p=val&1;//PDIVN的值
  14. val=rCAMDIVN;
  15. s=val>>8;//CAMDIVN[8:9],为HDIVN分频改变位
  16. switch(m)//计算HCLK频率
  17. {
  18. case0:
  19. HCLK=FCLK;
  20. break;
  21. case1:
  22. HCLK=FCLK>>1;
  23. break;
  24. case2:
  25. if(s&2)//见CAMDIVN寄存器HCLK4_HALF
  26. HCLK=FCLK>>3;
  27. else
  28. HCLK=FCLK>>2;
  29. break;
  30. case3:
  31. if(s&1)//见CAMDIVN寄存器HCLK3_HALF
  32. HCLK=FCLK/6;
  33. else
  34. HCLK=FCLK/3;
  35. break;
  36. }
  37. if(p)//计算PCLK频率
  38. PCLK=HCLK>>1;
  39. else
  40. PCLK=HCLK;
  41. val=rUPLLCON;
  42. m=(val>>12)&0xff;
  43. p=(val>>4)&0x3f;
  44. s=val&3;
  45. UPLL=((m+8)*FIN)/((p+2)*(1<
  46. UCLK=(rCLKDIVN&8)?(UPLL>>1):UPLL;//计算UCLK频率
  47. }

下图为外部时钟为晶振时的上电复位顺序




评论


技术专区

关闭