ARM9 S3C2440 时钟与电源管理934914325

Clock&power management 模块包含了3部分:Clock控制、USB控制、POWER控制.       

        时钟控制逻辑单元能够产生2440需要的时钟信号,包括CPU使用的主频FCLK,AHB总线设备使用的HCLK,以及APB总线设备使用的PCLK.2440内部有2个PLL(锁相环):一个MPLL对应FCLK,HCLK,PCLK;另外一个UPLL对应的是USB使用(48MHz)。.时钟控制逻辑单元可以在不使用PLL情况下降低时钟CLOCK的频率,并且可以通过软件来驱使时钟和各个模块的连接/切断,这样做可以减少电源消耗。

     [S3C2440 CPU默认的工作主频为12MHz,使用PLL电路可以产生更高的主频供CPU及外围器件使用。S3C2410有两个PLLMPLLUPLLUPLL专用与USB设备。MPLL用于CPU及其他外围器件。通过MPLL会产生三个部分的时钟频率:FCLKHCLKPLCKFCLK用于CPU核,HCLK用于AHB总线的设备(比如SDRAM)PCLK用于APB总线的设备(比如UART)。从时钟结构图中可以查看到使用不同时钟频率的硬件。]

        对于电源控制逻辑单元,2440有许多钟电源管理方法来针对不用任务保持相应的电源消耗。电源管理模块包含了4种方式:NORMAL、SLOW,IDLE,SLEEP。

        NORMAL:这个模块支持CPU时钟以及2440相应的外围设备时钟。这个模式下,电源消耗是最大的。它允许通过软件编程来控制外部设备的操作。例如,如果一个定时器Timer不需要时,那么用户可以通过CLKCON寄存器来关闭时钟和Timer相连,来降低电源消耗。

        SLOW模式:又叫NON-PLL模式,不同于Normal模式,这个模式使用的时一个外部时钟来直接驱动2440的主频FCLK,不通过PLL,在这个模式下,电源的消耗仅仅和外部时钟频率有关,电源同PLL有关的消耗可以忽略。

        IDLE模式:这个模式下CPU的时钟FCLK被关闭,而其他外围设备的时钟还继续工作。因此空闲模式的结果只是能够降低CPU核的电源消耗。注意,任何中断请求都能够将CPU唤醒。

         Sleep模式:这个模式关闭了内部电源。因此CPU&内部的逻辑单元都没有电源消耗,除了工作在这个模式下的一个wake-up逻辑单元。因此sleep模式需要2个独立的电源。一个来支持wake-up模块工作,另外一个支持内部逻辑&CPU的电源,并且这个模块的电源是可控的。所以在Sleep模式,支持内部逻辑&CPU的电源模块是关闭的,而通过EINT[15:0]&RTC中断可以从Sleep模式唤醒。

功能描述

时钟结构

 

图7-1表明了时钟模块结构,主时钟频率直接来自外部时钟(XTIPLL)或者是内部的时钟(EXTCLK).时钟的产生包含了一个晶振运放,将外部的晶振信号放大,还有2个PLL,产生2440各种高频时钟所需。

时钟源的选择

表7-1表明了时钟选择脚位关系(OM2&OM3)以及2440的时钟源,当nRESET的信号从低到高上升沿的时候,2440读取OM2,OM3的脚位信息OM[3:2]状态来选择Main时钟源以及USB时钟源。

注意:

       1、虽然MPLL在reset以后就起来了,但是MPLL输出(Mpll)还不能够作为系统时钟来使用,必需要使用软件写入相应的MPLLCON寄存器命令后才能使用。因此通过合法的指令设置后,时钟将能够直接当能系统时钟来使用。需要注意到,就算是用户不想改变MPLLCON的值,但是还是需要再重新写入一遍一样的值。

        2、OM[1:0]=11的时候,OM[3:2]为test模式。****其实OM[3:2]应该是相当于一个开关逻辑,通过外部硬件脚位设置 , 和CPLD的内部原理相同,与门,非门,与非门等构成.

Phase Locked Loop(PLL)

        MPLL时钟发生器,作为一个集成电路,作用是同步输出信号以及输入信号的频率和相位。

这种应用,包含了图7-2的基本模块:VCO(电压控制振荡器),利用输入的DC电压来产生一个稳定的输出频率(又叫压控振荡器,利用电压使石英振荡),分频器P通过P值来对输入Fin频率来进行分频,分频器M通过鉴相器PFD得到M值来设置VCO的频率输出,分频器S通过Mpll模块的相位检测,电荷泵,环路滤波,输出频率值s来设置VCO的频率。输出时钟频率Mpll相关公式如下:

 

 

Upll时钟发生器的内部也和Mpll类似

Phase Frequency Detector(PFD)   鉴相器

PFD的作用是检测Fref和Fvco的相位差,然后当检测到相位差时就产生一个控制信号到loop Filter和VCO中。

Charge Pump(PUMP) 电荷泵

电荷泵转变PFD的控制信号成一定比例的电压值,通过一个外部的低通滤波器

loop filter 环路滤波器

        PFD输出的控制信号,进入电荷泵时,可能会有大量的纹波(*******本人认为还有谐波分量,辐射以及传导干扰等,VCO需要的是一个非常细致的电压,因此这个模块的设计应该可以看出一个公司的硬件设计功底),因此为了避免VCO过冲,需要低通滤波采样以及滤除器件的高频分量。滤波器采用典型的RC低通滤波。

Voltage Controlled Oscillator (VCO)

        输出电压从环路滤波进入VCO,引起振荡频率的变化,当Fref和Fvco没有差别的时候,电压就保持稳定下来,PFD停止送出控制信号到电荷泵,此时PLL系统时钟稳定。

通用条件和时钟发生器

PLL&时钟发生器需要如下硬件满足:环路滤波电容Cmpll=1.3nF,Cupll= 700pF,外部电容C=15~22pF.

时钟控制逻辑

        时钟控制逻辑决定那个时钟源的使用,mpll还是直接使用外部时钟。当PLL重新配置时钟频率值时候,时钟控制逻辑关闭Fclk直到PLL输出稳定。时钟控制逻辑单元在上电reset和power-down模式wake -up时候激活。

Power-on-Reset

        图7-4(后面的图参照三星的Datesheet)表明了时钟在电源上电reset的时序图。晶振在几毫秒开始振荡,当nReset在晶振时钟稳定后释放,PLL开始参照默认的PLL配置运行。但是,PLL通常在电源启动reset后都不稳定,因此Fin直接代替MPLL作为FCLK,因为此时还没有配置PLLCON.注意,PLLCON值一定要重新写一遍。

******具体的时序见图P213的Figure 7-4,非常详细。

PLL重新启动后,一定要用软件重新写一遍PLLCON的值,可以获得稳定的系统CLOCK。

Change PLL Settings In Normal Operation Mode

在Normal模式下,用户可以通过写P M S三个分频器的值而达到改变频率的目的,在PLL锁存时间,时钟是被切断的。见图7-5在MPLL改变频率的时间,FCLK是没有时钟输出的。

USB时钟控制

USB主接口和USB从接口都需要48Mhz的时钟。在S3C2440A内,USB指明需要PLL(upll)产生48Mhz的时钟给USB

******USB的时钟可以使用CLKSLOW寄存器来对USB的时钟进行开关.

FCLK HCLK 和PCLK

FCLK用于ARM920T

HCLK用于AHB总线(高速)上,例如通过ARM920T,内存控制,中断控制,LCD控制,DMA以及USB主时钟块。

PCLK用于APB总线(低速)上,如看门狗,IIS,I2C,PWM,MMC接口,ADC,UART,GPIO,RTC以及SPI.

2440支持FCLK,HCLK,PCLK分频比转换。转换的比例值由CLKDIVN控制寄存器中的HDIVN,PDIVN确定。

*******见P215的表

在经过P M S 3个值设置获得MPLL后,需要Set CLKDIVN寄存器的值, 因此设置CLKDIVN再经过PLL锁存期后的时钟值就是稳定的值。这个值复位和电源管理模式中都可以用。

*****CLKDIVN的默认设置为1:1:1,在写入CLKDIVN后,改变FCLK:HCLK:PCLK的比例,见P215图7-6所示。

注意

1、CLKDIVN的值需要小心设置,不能超过HCLK,PCLK的极限值。

2、如果HDIVN不为0,根据如下指令,CPU总线模式从Fast Bus Mode 变为Asynchronous(异步总线模式),2440没有同步总线模式)

MMU_setAsyncBusMode

mrc p15,0,r0,c0,0             ******协处理器

orr r0,r0,#R1_nF:OR:R1_iA

mcr P15,0,r0,c1,c0,0

如果HDIVN不为0,且CPU总线模式为Fast Bus mode,CPU的时钟为HCLK.,这种方式可以用在将CPU频率降低,但是却又不改变HCLK和PCLK.

电源管理

2440的电源管理模块通过软件控制系统时钟来降低各个模块的电源消耗。原理通PLL,时钟控制逻辑(FCLK,HCLK,PCLK),以及唤醒信号。如7-7显示了系统时钟的结构图。

2440有4种电源模式,下面描述每个电源管理模式,各个模式并不能自由转换,有条件。查看P218表7-8

*********P218的表7-2指出了各个模式的电源的消耗情况。

NORMAL Mode

在Normal Mode,所有的设备以及基本模块,包括电源管理模块,CPU核心模块,总线控制模块,内存控制模块,中断控制模块,DMA,以及外总。但是除了基本模块,每个设备模块都能通过软件来设置关闭来降低电源消耗。

IDLE Mode

这个模式主要是将CPU核模块关闭了,其他基本模块都是工作的,利用EINT[23:0]或者RTC时钟中断,或者其他的中断可以结束IDLE模式(注意 只有当GPIO模块工作时,EINT才有效)

SLOW 模式(非-PLL模式)

在这个模式下电源消耗可以降低,主要是因为系统时钟降低了并且关闭了PLL模块。FCLK不使用PLL,直接来自输入时钟(包含了外部时钟XTIpll和内部时钟EXTCLK),此模式下的分频滤由CLKSLOW控制寄存器&CLKDIVN控制寄存器的设置决定。

*******见P219的表,CLKSLOW和CLKDIVN寄存器的设置对SLOW模式时钟的影响

在SLOW模式,PLL将被关闭降低PLL的电源消耗。如果要从SLOW模式变成NORMAL模式,PLL需要时间稳定。稳定时间大概在300us左右。

用户可以使用CLKSLOW寄存器中的SLOW模式bit位来改变频率。见P220的图7-9

CLKSLOW寄存器中的SLOW_BIT位可以将SLOW模式切换至NORMAL模式中,系统时钟稳定时间如图7-10

CLKSLOW寄存器中的SLOW_BIT和MPLL_OFF比特位动作,系统时钟稳定时间如如7-13

SLEEP模式

此模式下内部电源关闭,因此,CPU和内部逻辑模块都没有电源消耗,除了唤醒模块。激活SLEEP模式需要2个独立的电源,一个支持唤醒模块,一个带电源开关的支持其他模块,包括CPU.在睡眠模式下,只有唤醒模块是工作的,而唤醒睡眠模式需要依靠EINT[15:0]和定时器中RTC(real time control)中断。

依据以下步骤进入到睡眠模式:(****附三星测试代码中的微量代码说明)

1、设置GPIO,满足SLEEP模式的配置。 ******ConfigSleepGPIO();

2、Mask所有中断.进入INTMSK寄存器设置 ******rINTMSK=BIT_ALLMSK;所有中断屏蔽;

3、设置中断唤醒源包括RTC(EINTMASK寄存器的相应BIt位设置唤醒源,不能mask,因为需要让SRCPN--中断请求和EINTPEND--中断状态位 的相应位使能。)

************rEINTMASK = rEINTMASK&~(1<<11); //SRCPND:EINT8_23 will be set by EINT11 after wake-up.

4、设置USB悬置
          rMISCCR|=(1<<12); //USB port0 = suspend
          rMISCCR|=(1<<13); //USB port1 = suspend

5、GSTATUS[4:3]两个信息寄存器

rGSTATUS3=(U32)StartPointAfterSleepWakeUp;//复位后起始点的地址

6、设置微控制单元寄存器MISCCR[1:0]关闭总线,减少电源消耗,另外内存相关的脚位,如D[31:0]等需要置为高阻或者非活动状态。

********rMISCCR=rMISCCR|(3<<0);

********rMSLCON = (1<<11)|(0<<10)|(0<<9)|(1<<8)|(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0);查看P284寄存器可以看此设置

7、清除LCDCON1.ENVID位来停止LCD。

***************rLCDCON1 =rLCDCON1 & 0x3fffe;

8、读取rREFRESH和rCLKCON寄存器???fill the TLB

9、使能SDRAM进入自刷新模式,相应的寄存器位REFRESH[22]=1b.

10、等待自刷新开始。

11、设置:MISCCR[19:17]=111b使得SDRAM的信号(SCLK0,SCLK1,SCLKE)在睡眠模式期间做保护。

12、进入睡眠模式,可以设置CLKCON的SLEEP的Bit【3】位。

注意:当系统运行在NAND的boot模式启动时,硬件脚设置 EINT[23:21]必须设置为输入脚,作为唤醒Sleep启动时有用。

根据下面过程唤醒SLEEP模式

1、如果有唤醒动作时,内部的复位信号就会动作。这和外部的nReset信号非常相似。reset复位期间由内部的16位计数器逻辑实现,reset复位决断时间可以计算tRST=(65535/XTAL_frequency)

2、核对GSTATUS2[2]来判断是否将由sleep模式唤醒后的电源开启。

3、释放SDRAM的信号保护,通过设置MISCCR[19:17]=000b

4、设置SDRAM内存相关控制

5、等待SDRAM自刷新释放

6、因为使用SLEEP模式下,GSTATUS[3:4]两个寄存器可以保存之前的信息,由用户自由使用

7、EINT[3:0],查看SRCPND寄存器

      而EINT[15:4],查看EINTPEND寄存器来确定。

**********仔细看看P223表,关于GPIO的设置

关于VDDi&VDDiarm的电源控制

在睡眠模式下,VDDi,VDDiarm,VDDMPLL以及VDDUPLL会被关闭,使用PWREN脚来控制

*********在硬件设计中,PWREN用来开关CPU以及内部基本逻辑电路的电源开关,如果是设置为高PWREN=1的时候,那么VDDi以及VDDiarm允许电源输入,当PWREN=0时,关闭,可以采用外部硬件强行设置为一直开状态

   注意

即使VDDi,VDDiarm,VDDMPLL以及VDDUPLL可能被关闭,部分其他电源脚也可供电。

电源的电压如P224页图所示

硬件设计中,在睡眠模式,如果你不使用触摸屏,4个触摸接口必须悬空,不能接地,在睡眠模式下,XP,YP都是高状态。

唤醒中断信号EINT[15:0]

满足下面条件,就可以将Sleep模式唤醒

a、中断脚的电压跳变。

b、设置GPIO相应的带中断功能的脚位为中断功能。

c、nBATT_FLT脚必须为高电平,这个在设置GPIO控制寄存器设置外部中断时候是非常重要的。

     ********此脚一般硬件设计时候,外部接一个10K以上的电阻接VDD3.3

当唤醒后,这些中断就不用来唤醒功能了,也就是说可以当作外部中断请求来响应。

Entering IDLE Mode

如果CLKCON[2]设置为1进入空闲模式,经过一段时间延时2440就进入空闲模式

PLL On/OFF

PLL可以在SLOW模式下被关闭,来降低电源功耗,PLL不能在其他模式下关闭,否则MCU不能保证会不出错

PULL-up Resistors on the Data Bus and SLEEP Mode

在睡眠模式,数据总线(D[31:0 ]or D[15:0])可以选择高阻或者输出低状态

数据总线可以打开pull-up寄存器来设置为高阻状态,主要降低电源消耗,可以由MISCCR控制......这部分上面已经有详细说明,偷懒一下了:)

Output Port State and SLEEp mode

输出口的电流消耗,总的来说输出口置高的时候电流消耗是最小的,但是如果输出要低,那么需要通过设置DSC0,DSC1来设置驱动电流,举例如下:

*******rDSC0 = 0x7fffffff;
******rDSC0 &= ~(1<<31); //enable        调节内部的电阻阻值

******rDSC1 = (3<<28)|(3<<26)|(3<24)|(3<<22)|(3<<20)|(3<<18);

Battery Fault Signal(nBATT_FLT)

nBATT_FLT脚有2个功能,如下

1、当CPU不是在SLEEP模式时候(大多数工作时候),此脚将引起中断请求,通过设置BATT_FUNC(MISCCR[22:20])=10xb;中断为高电平触发。

2、当CPU为SLEEP模式时,设置此脚可以禁止唤醒服务,通过设置BATT_FUNC(MISCCR[22:20])=11xb,因此,任何唤醒中断都被mask,保护系统工作在低电池能力下。

ADC Power Down

ADCCON设置 P417

时钟发生器&电源管理特殊寄存器

LOCK TIME COUNT REGISTER(LOCKTIME) pll lock time count register

分为UPLL的锁存时间和MPLL的锁存时间,两个PLL功能所在

MPLL control Register

Mpll= ( 2* m * Fin)/ (p * 2 s)

m=(MDIV + 8), p = (PDIV +2 ), s =SDIV

UPLL control Register

Upll =( m* Fin) /( p * 2 s)

m=(MDIV + 8), p = (PDIV +2 ), s =SDIV

具体的频率选择计算 见 P228的表格

后面是相关的寄存器的具体设置,从P 228- P 231 CLKCON,CLKSLOW,CLKDIVN,CAMDIVN等

转自:http://hi.baidu.com/whyspai/blog/item/47fba40ec82100e037d122fd.html;在转载的同时对其作了些校验修正工作!

你可能感兴趣的:(ARM)