(1)电源模块解析 
       电源管理块通过软件控制系统时钟,以降低S3C2440的功耗。这些方案涉及锁相环、时钟控制逻辑(FCLK、HCLK和PCLK)和唤醒信号。图1显示了S3C2440A的时钟分布。

                           

S3C2440架构版本_电源管理


                                                                图1  S3C2440A的时钟分布

        其中,FCLK由ARM920T使用。

        HCLK用于AHB总线:内存控制器、中断控制器、液晶控制器,DMA和USB主机块。

        PCLK用于APB总线:WDT、IIS、I2C、PWM定时器、MMC接口等外围设备,ADC, UART, GPIO, RTC和SPI。       S3C2440A有四种电源模式(正常、慢速、空闲、睡眠),模式之间不允许自由转换。有关模式之间可用的转换,见图2。

    

                               

S3C2440架构版本_S3C2440_02


                                                                    图2   s3c2440电源模式之间的相互转化                                                                      表1 每个电源模式的电路模块状态      

            

S3C2440架构版本_引脚_03


(2)四种电源模式

         正常模式: 在正常模式下,所有外设和基本块,包括电源管理块、CPU核心、总线控制器、内存控制器、中断控制器、DMA和外部主机都可以完全运行。但是,除了基本模块外,每个外围设备的时钟都可以通过软件选择性地停止,以降低功耗。

         空闲模式:在空闲模式下,除总线控制器、内存控制器、中断控制器和电源管理块外,CPU核心时钟停止。要退出空闲模式,应激活EINT[23:0]、RTC报警中断或其他中断。(EINT在GPIO模块打开之前不可用)。

         慢速模式:在慢模式下,可以通过应用慢时钟和不使用锁相环来降低功耗。FCLK是没有锁相环的输入时钟(XTIpll或EXTCLK)的divide_by_n的频率。分频比由CLKSLOW控制寄存器和CLKDIVN控制寄存器中的SLOW_VAL决定。


                                           表2 CLKSLOW控制寄存器和CLKDIVN控制寄存器中的SLOW_VAL  

S3C2440架构版本_引脚_04


       休眠模式:这个模块断开了内部电源。因此,在这种模式下,除了唤醒逻辑之外,没有由于CPU和内部逻辑而导致的功耗。激活睡眠模式需要两个独立的电源。两个电源中的一个为唤醒逻辑提供电源。另一个提供包括CPU在内的其他内部逻辑电源。在休眠模式下,CPU和内部逻辑的电源将被关闭,保持唤醒逻辑的电源。休眠模式下的唤醒可以通过EINT[15:0]或RTC报警中断来发出。

(3)进入睡眠模式步骤
        1. 设置适合睡眠模式的GPIO配置。
        2. 屏蔽INTMSK寄存器中的所有中断。
        3. 正确配置唤醒源,包括RTC警报。
        4. 将USB设置为挂起模式。(MISCCR[13:12]= 11 b)
        5. 将一些意义值保存到GSTATUS[4:3]寄存器中(唤醒后的执行函数地址,堆栈指针等)这些寄存器在睡眠模式下得到保护。
        6. 配置数据总线上的上拉电阻MISCCR[1:0],D[31:0]。
        7. 通过清除LCDCON1来停止LCD。
        8. 读取rREFRESH和rCLKCON寄存器以填充TLB。
        9. 让SDRAM通过设置REFRESH[22]=1b进入自刷新模式。
       10. 等待SDRAM自动刷新有效。
       11. 设置MISCCR[19:17]=111b,使SDRAM信号(SCLK0、SCLK1、SCKE)在睡眠时受到保护模式,不让SDRAM内的数据被破坏。
       12. 在CLKCON寄存器中设置睡眠模式位。
       注意:当系统从NAND引导启动时,必须将硬件pin配置- EINT[23:21]设置为输入。

(4)退出睡眠模式步骤

       1. 如果发出一个唤醒源中断,将产生内部复位信号(同外部复位信号)。复位持续时间由内部16位计数器逻辑决定,复位时间计算公式为:tRST = (65535 / XTAL_frequency)。

       2. 检查GSTATUS2[2],以确定是否由睡眠模式唤醒。

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

       4. 配置SDRAM内存控制器。

       5. 等待SDRAM自刷新被释放。大多数情况下,SDRAM需要所有SDRAM行的刷新周期。

       6. GSTATUS[3:4]中的信息可以用于用户自己的目的,因为GSTATUS[3:4]中的值在睡眠模式下被保存了下来。

       7. 对于EINT[3:0],检查SRCPND寄存器。

|          对于EINT[15:4],检查EINTPEND而不是SRCPND(虽然设置了一些EINTPEND位,但不会设置SRCPND)。

                                       表3 睡眠模式管脚配置表 (参考作用,用户应该根据实际情况配置) 

S3C2440架构版本_S3C2440架构版本_05

(5)满足从睡眠模式唤醒的条件
    a. 外部中断 EINT[15:0] 产生。
    b. EINTn 引脚必须在GPIO控制寄存器中配置为EINT。
    c. nBATT_FLT引脚必须是高电平。
    注意:刚睡醒后,相应的EINTn引脚将不用于唤醒,这意味着该引脚可以作为正常外部中断请求引脚。

(6)其它
   
(1)如果将CLKCON[2]设置为1,则进入空闲模式,S3C2440A将在一定的延迟之后进入空闲模式(直到电源控制逻辑从CPU接收到ACK信号)。
   (2)锁相环只能在低功耗的慢速模式下关闭。如果锁相环在任何其他模式下被关闭,MCU的操作就不能得到保证。
   (3)建议输出端口处于高电平状态,以减少休眠模式下的电流消耗。