新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于S3C2440和Windows CE5.0的嵌入式设备休眠唤醒技术研究

基于S3C2440和Windows CE5.0的嵌入式设备休眠唤醒技术研究

作者:时间:2010-10-22来源:网络收藏

系统应用中降低功耗以提高续航能力是其设计的热点[1]。在状态,系统处于最低电流消耗状态,同时仍维持存储区中的内容,为了减少能量消耗和延长电池寿命,需要让处理器定期进入或退出模式[2]。 CE 作为一个广泛应用于上的操作系统,提供了完善的电源管理功能。其中,便是一个重要的功能。本文在结合硬件基础上分析休眠过程,分别采用外部中断和RTC中断唤醒两种方法实现了休眠唤醒,并给出了具体实现代码。根据相应唤醒需求,将这两种方法应用于北京化工大学诊断与自愈工程中心的一款基于CE 5.0的智能巡检分析诊断仪,结果表明能准确达到实际的设置要求,效果良好。
1 休眠唤醒过程分析
对于电源控制逻辑模块, 有多种电源管理方案以针对须执行的任务保持最优的电源消耗。S3C2440 中的电源管理模块对应 4 种模式:NORMAL 模式、SLOW 模式、IDLE 模式和SLEEP模式。
  在SLEEP模式下,电源管理模块关闭内部电源,因此,CPU 和内部逻辑模块都没有电源消耗,但除了此模式下的唤醒模块。激活SLEEP模式需要2个独立的电源,其中一个为唤醒模块供电,另一个为包括CPU的其他逻辑模块供电,并且可以由power on/off控制。在SLEEP模式下,给CUP和内部逻辑单元供电的第二个电源被关闭,只有唤醒模块是工作的。这种状态下,可以通过外部中断EINT[15:0]或定时器的RTC(real time control)中断将系统从睡眠状态中唤醒[3],如图1所示。

本文引用地址:http://www.amcfsurvey.com/article/151411.htm

在睡眠模式下,VDDi、VDDiam、VDDMPLL以及VDDUPLL会被关闭,其由PWREN引脚来控制,如PWREN信号被置位,VDDi和VDDiam则由一个外部变压器供电。当PWREN=0时,VDDi和VDDiam被关闭。
 有多种方法可以使系统进入休眠,例如在 CE的桌面上,点左下角的开始图标,然后选择 “挂起”;或者,在应用程序或驱动中调用SetSystemPowerState()函数,都可以让系统进入休眠状态。实际上,这两种方法殊途同归,最终都需要通过OEM层OEMPowerOff()函数依次调用BSPPowerOff()函数,以关闭板级的相关电源,保存所有寄存器的值,关闭背光;调用 ConfigStopGPIO()函数,设置各IO休眠后的状态;如果支持KITL,调用OALKitlPowerOff()函数关闭KITL功能;调用OALCPUPoweroff()函数,使得CPU进入休眠模式。OALCPUPoweroff()函数保存当前系统的状态,把CPU上一些寄存器里的数据保存到RAM里去,然后禁止RAM自刷新的功能,加入唤醒中断源,最后使CPU进入休眠模式。当CPU处于Sleep状态时,RAM不会断电,这样RAM中的数据就不会丢失,当CPU被唤醒后使用RAM里的数据恢复系统。
 当相应的中断源触发时,CPU就会被唤醒,电流消耗变大了,需要说明的是,此处仅唤醒CPU,之后才唤醒WINCE系统。当系统由SLEEP到NORMAL切换期间需经过一个RESET过程,这个过程称为 Power On Reset 。在S3C2440 CPU中,寄存器GSTATUS2专门用以判断发生Reset原因。Power On Reset后,在之前SLEEP过程中保存下来的RAM中的系统数据是不会丢失的。本文需要设计的唤醒子系统,就是把这些数值恢复到它们休眠前应处的地址。
 在Bootloader中实现数据恢复的具体步骤如下:
 (1)如果有唤醒源被触发,内部的复位信号就会动作。这和外部的 nReset引脚触发非常相似。复位持续时间由内部的 16 bit计数器逻辑决定,通过reset 复位决断时间可以计算tRST=(65535/XTAL_frequency);
 (2)通过检测GSTATUS2[2],判断是否是由SLEEP模式唤醒引起的电源开启;
 (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 寄存器不会被置位)。
 以上是一个通用的休眠唤醒过程,在实际应用中,可根据不同情况使用不同的唤醒方式。例如,以休眠模式待机,在需要使用仪器时才唤醒系统的情况下,就需要一个诸如按键的外部中断来唤醒系统;而对于仅做一个保存挂起动作的情况,即刻自动唤醒系统则更为便捷。S3C2440就提供了两种唤醒实现方式:外部中断实现方式和RTC中断实现方式。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭