(1)电源模块解析
电源管理块通过软件控制系统时钟,以降低S3C2440的功耗。这些方案涉及锁相环、时钟控制逻辑(FCLK、HCLK和PCLK)和唤醒信号。图1显示了S3C2440A的时钟分布。
图1 S3C2440A的时钟分布
其中,FCLK由ARM920T使用。
HCLK用于AHB总线:内存控制器、中断控制器、液晶控制器,DMA和USB主机块。
PCLK用于APB总线:WDT、IIS、I2C、PWM定时器、MMC接口等外围设备,ADC, UART, GPIO, RTC和SPI。
S3C2440A有四种电源模式(正常、慢速、空闲、睡眠),模式之间不允许自由转换。有关模式之间可用的转换,见图2。
图2 s3c2440电源模式之间的相互转化
表1 每个电源模式的电路模块状态
(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
休眠模式:这个模块断开了内部电源。因此,在这种模式下,除了唤醒逻辑之外,没有由于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 睡眠模式管脚配置表 (参考作用,用户应该根据实际情况配置)
(5)满足从睡眠模式唤醒的条件
a. 外部中断 EINT[15:0] 产生。
b. EINTn 引脚必须在GPIO控制寄存器中配置为EINT。
c. nBATT_FLT引脚必须是高电平。
注意:刚睡醒后,相应的EINTn引脚将不用于唤醒,这意味着该引脚可以作为正常外部中断请求引脚。
(6)其它
(1)如果将CLKCON[2]设置为1,则进入空闲模式,S3C2440A将在一定的延迟之后进入空闲模式(直到电源控制逻辑从CPU接收到ACK信号)。
(2)锁相环只能在低功耗的慢速模式下关闭。如果锁相环在任何其他模式下被关闭,MCU的操作就不能得到保证。
(3)建议输出端口处于高电平状态,以减少休眠模式下的电流消耗。