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后,程序會馬上執行重新初始化的流程,照相程序恢復正常。本文引用地址:http://www.104case.com/article/181137.htm
3 數據分析
對系統運行時幾個典型電源狀態的電流值做了測量,數據如表1所示。
4 結 語
對于1 200 mA/h的電池,該智能手機平臺能達到160 h左右的理論待機時間,以及3 h左右的通話時間。另外,睡眠及喚醒的響應時間也在1 s左右,表明Power Manager達到了提高電池電源使用效率的目標,基本滿足實際應用的需求。
評論