S3C2440时钟电源管理
时间:11-21
来源:互联网
点击:
S3C2440的时钟可以选用晶振(XTAL),也可以使用外部时钟(EXTCLK),由系统复位时,在复位信号上升沿对引脚OM3、OM2所测的状态来确定。由于我所用的开发板这两个引脚接地,故外部晶振作为主锁相环(MPLL)和usb锁相环(UPLL)的时钟源。
含有两个锁相环MPLL、UPLL产生系统所需要的不同频率的时钟
MPLL:
为CPU产生FCLK时钟
为AHB产生HCLK时钟
为APB产生PCLK时钟
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
- voidChangeClockDivider(inthdivn,intpdivn)
- {
- //hdivn,pdivnFCLK:HCLK:PCLK
- //0,01:1:1
- //0,11:1:2
- //1,01:2:2
- //1,11:2:4
- //2,01:4:4
- //2,11:4:8
- //3,01:3:3
- //3,11:3:6
- rCLKdivN=(hdivn<1)|pdivn;
- if(hdivn==2)
- rCAMdivN=(rCAMdivN&~(3<8))|(1<9);
- if(hdivn==3)
- rCAMdivN=(rCAMdivN&~(3<8))|(1<8);
- }
[cpp]view plaincopy
- //**************************[UPLL]*******************************
- voidChangeUPllValue(intmdiv,intpdiv,intsdiv)//配置UPLLCON寄存器
- {
- rUPLLCON=(mdiv<12)|(pdiv<4)|sdiv;
- }
[cpp]view plaincopy
- voidCalcBusClk(void)//计算总线频率
- {
- U32val;
- U8m,p,s;
- val=rMPLLCON;
- m=(val>>12)&0xff;
- p=(val>>4)&0x3f;
- s=val&3;
- //(m+8)*FIN*2不要超出32位数!
- FCLK=((m+8)*(FIN/100)*2)/((p+2)*(1
- val=rCLKdivN;
- m=(val>>1)&3;//HdivN的值
- p=val&1;//PdivN的值
- val=rCAMdivN;
- s=val>>8;//CAMdivN[8:9],为HdivN分频改变位
- switch(m)//计算HCLK频率
- {
- case0:
- HCLK=FCLK;
- break;
- case1:
- HCLK=FCLK>>1;
- break;
- case2:
- if(s&2)//见CAMdivN寄存器HCLK4_HALF
- HCLK=FCLK>>3;
- else
- HCLK=FCLK>>2;
- break;
- case3:
- if(s&1)//见CAMdivN寄存器HCLK3_HALF
- HCLK=FCLK/6;
- else
- HCLK=FCLK/3;
- break;
- }
- if(p)//计算PCLK频率
- PCLK=HCLK>>1;
- else
- PCLK=HCLK;
- val=rUPLLCON;
- m=(val>>12)&0xff;
- p=(val>>4)&0x3f;
- s=val&3;
- UPLL=((m+8)*FIN)/((p+2)*(1
- UCLK=(rCLKdivN&8)?(UPLL>>1):UPLL;//计算UCLK频率
- }
下图为外部时钟为晶振时的上电复位顺序
S3C2440时钟电源管 相关文章:
- s3c2440时钟与电源管理笔记(11-27)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)