Windows Mobile电源管理分析与实现
(6)配置PWER,PRER或PFER寄存器,以使能特定的唤醒源,这里设置RTC、来电RING中断和电源键的唤醒;
(7)保存当前处理器模式的状态寄存器,保存MMU寄存器,保存Restlme的返回地址XllpRes-umePhase3,回写Cache,配置CP14寄存器CR7,让处理器进入sleep模式。到此,PXA270进入sleep模式,系统处于Suspend电源状态。
2.1.3 Resume流程
总的说来,Resume流程与Suspend是相反的,处理器初始化之后,会载入Suspend之前保存在SDRAM中的各种状态参数,恢复之前状态,其流程简要介绍如下:
(1)当已使能的唤醒事件发生时。处理器会从BootLoader启动,进行基本的硬件初始化之后。会判断是Reset,还是sleep Resume,如果是后者,则会跳转到Xllp_ResumePhase2A;
(2)在Xllp_ResumePhase2A中首先会将保存在PSPR中的参数取出,检查无错误后,重新配置好MMU,载入处理器状态寄存器和堆栈,跳转至XllpRe-sumePhase3;
(3)在XllpResumePhase3载入所在环境的处理器状态寄存器,接着逐级返回至OEMPowerOff函数,在OEMPowerOff函数中会获得唤醒源,然后退出;
(4)此时系统由Power Manager置于Resuming状态,Power Manager 根据唤醒源判断是否将系统置于ON,还是继续Suspend。
此时,系统状态已经恢复至睡眠之前,结束了Re-sume流程,完成对系统的唤醒。
2.2 设备驱动电源管理的实现
除了对处理器的电源管理,Power Manager还有一个主要工作就是平台上设备的电源管理。对于只有ON和OFF两种电源状态的设备,Power Manager通过DeviceIOControl在Suspend和Resuming时分别调用各设备驱动中实现的PowerUp和PowerDown函数,以开启和关闭设备。在该平台上大多数设备都属于这种管理方式,包括LCD,Aladio Codec等,这些工作主要是在Wince流驱动的IOControl中执行一些开启或者关闭处理器I/O电源的操作。
对于GSM和蓝牙等较复杂的设备,需要能及时唤醒,如在系统Suspend来电时,GSM模块需快速唤醒并做出响应,因此这些设备也支持sleep等模式。在进入Suspend会相应调用这些设备驱动的sleep函数,进入设备的省电模式,而在Resuming时也会调用对应的退出sleep的函数,以实现快速唤醒。
2.3 应用程序电源管理的实现
在此以自己编写的基于DirectDraw的照相程序为例来说明应用程序中电源管理的实现。
首先,在开启照相程序时,预览一段时间没有操作后,不希望按照定时器的值进入Suspend,此时需定时修改SuspendTimeout,以阻止系统进入睡眠状态。具体做法是:启动一个30 s的定时器,每30 s调用一次SystemIdleTimerReset函数。另外,由于该照相程序是Overlay显示效果,在进入拍照程序后,如果按下电源键进入Suspend状态,再唤醒时系统仍处于拍照程序,但是由于PXA270的LCDController没有再次创建Overlay层,因此程序不能显示图像。从使用者的角度考虑,在系统Reume之后照相程序应能恢复正常。做法如下:在程序中创建一个线程,用CreateMsgQueue创建一个消息队列,调用RequestPowerNotifications申请获得电源管理消息,然后调用WaitForSingleOb-ject等待通知,当收到Suspend的消息时,对程序窗口发送重新初始化Overlay的消息,在Resume后,程序会马上执行重新初始化的流程,照相程序恢复正常。本文引用地址:https://www.eepw.com.cn/article/181137.htm
3 数据分析
对系统运行时几个典型电源状态的电流值做了测量,数据如表1所示。
4 结 语
对于1 200 mA/h的电池,该智能手机平台能达到160 h左右的理论待机时间,以及3 h左右的通话时间。另外,睡眠及唤醒的响应时间也在1 s左右,表明Power Manager达到了提高电池电源使用效率的目标,基本满足实际应用的需求。
评论