對WinCE5.0的嵌入式設備休眠喚醒功能的研究
出處:微型機與應用 發(fā)布于:2011-09-04 18:50:46
目前嵌入式系統(tǒng)的電源管理技術正由傳統(tǒng)的基于電源管理器件和外設控制為主的靜態(tài)控制方式,轉(zhuǎn)到以操作系統(tǒng)為的動靜態(tài)結(jié)合的綜合控制模式。因為嵌入式設備對能耗越來越敏感,而電源管理技術正是這些產(chǎn)品設計的關鍵所在。為了應對電源管理面臨的挑戰(zhàn),在嵌入式系統(tǒng)開發(fā)在時需要設計多種電源模式,以便在不同工作狀態(tài)時有多種能耗模式可供選擇。休眠和喚醒功能正是目前WINCW系統(tǒng)開發(fā)的研究熱點之一。
嵌入式系統(tǒng)應用中降低設備功耗以提高續(xù)航能力是其設計的熱點[1]。在休眠狀態(tài),系統(tǒng)處于電流消耗狀態(tài),同時仍維持存儲區(qū)中的內(nèi)容,為了減少能量消耗和延長電池壽命,需要讓處理器定期進入或退出休眠模式[2]。Windows CE 作為一個廣泛應用于嵌入式設備上的操作系統(tǒng),提供了完善的電源管理功能。其中,休眠喚醒便是一個重要的功能。本文在結(jié)合S3C2440硬件基礎上分析休眠喚醒過程,分別采用外部中斷喚醒和RTC中斷喚醒兩種方法實現(xiàn)了休眠喚醒,并給出了具體實現(xiàn)代碼。根據(jù)相應喚醒需求,將這兩種方法應用于北京化工大學診斷與自愈工程研究中心的一款基于S3C2440和WindowsCE 5.0的嵌入式智能巡檢分析診斷儀,結(jié)果表明能準確達到實際的設置要求,效果良好。
1 休眠喚醒過程分析
對于電源控制邏輯模塊,S3C2440 有多種電源管理方案以針對須執(zhí)行的任務保持的電源消耗。S3C2440 中的電源管理模塊對應 4 種模式:NORMAL 模式、SLOW 模式、IDLE 模式和SLEEP模式。
在SLEEP模式下,電源管理模塊關閉內(nèi)部電源,因此,CPU 和內(nèi)部邏輯模塊都沒有電源消耗,但除了此模式下的喚醒模塊。激活SLEEP模式需要2個獨立的電源,其中一個為喚醒模塊供電,另一個為包括CPU的其他邏輯模塊供電,并且可以由power on/off控制。在SLEEP模式下,給CUP和內(nèi)部邏輯單元供電的第二個電源被關閉,只有喚醒模塊是工作的。這種狀態(tài)下,可以通過外部中斷EINT[15:0]或定時器的RTC(real time control)中斷將系統(tǒng)從睡眠狀態(tài)中喚醒[3],如圖1所示。

在WinCE系統(tǒng)中支持多種電源狀態(tài):①ON狀態(tài),用戶在主動使用設備。②UserIdle狀態(tài),用戶與設備停止交互,但仍有可能使用設備。③SystemIdle狀態(tài),在經(jīng)過一段時間的UserIdle后進入此狀態(tài),但是驅(qū)動和系統(tǒng)仍然活動。④Suspend狀態(tài),當驅(qū)動程序和系統(tǒng)進程不再與系統(tǒng)交互時進入此狀態(tài)。⑤ColdReboot和Reboot狀態(tài),冷啟動后系統(tǒng)電源狀態(tài)。其中,按功率消耗由小到大可分為睡眠(sleep)、空閑(idle)、運行(Run)等模式。大多時間內(nèi),在運行態(tài)(Run)時設備全部正常工作,而在睡眠與空閑模式時系統(tǒng)則是按照特定的模式進行相應的節(jié)能。
通常,嵌入式系統(tǒng)在大多數(shù)時間都不需要關注WinCE 設備的電源損耗,但是在某些時候要注意這些損耗。因此,的節(jié)能方法是使系統(tǒng)適時的進出休眠狀態(tài)。例如,WinCE系統(tǒng)先檢查任務負載情況,如果沒有需要運行的任務,則一般進入空閑節(jié)能狀態(tài)等待喚醒,在空閑一段時間后再進入深度睡眠,掛起到RAM中或者硬盤上。當WinCE 系統(tǒng)被掛起,為了省電系統(tǒng)需要關閉CPU處理器及大部分設備的供電,然后在需要喚醒時再通過定時器或中斷模塊喚醒。比如用戶按下On/Off按鈕時,或者監(jiān)視用戶活動的定時器超時,或者應用程序API都可以使得嵌入式系統(tǒng)休眠。而當用戶再次按下On/Off或者有其它喚醒中斷發(fā)生時,系統(tǒng)內(nèi)核調(diào)用OEMPowerOff()函數(shù),在系統(tǒng)喚醒后繼續(xù)從OEMPowerOff()被掛起處執(zhí)行。OEMPowerOff函數(shù)能進行CPU寄存器保存、設置及喚醒恢復等功能。系統(tǒng)Idle狀態(tài)和前面說的UserIdle狀態(tài)是不同概念,前者是CPU負荷驅(qū)動,代表系統(tǒng)空閑;后者是用戶活動驅(qū)動,代表用戶空閑。
在Bootloader中實現(xiàn)數(shù)據(jù)恢復的具體步驟如下:
(1)如果有喚醒源被觸發(fā),內(nèi)部的復位信號就會動作。這和外部的 nReset引腳觸發(fā)非常相似。復位持續(xù)時間由內(nèi)部的 16 bit計數(shù)器邏輯決定,通過reset 復位決斷時間可以計算tRST=(65535/XTAL_frequency);
(2)通過檢測GSTATUS2[2],判斷是否是由SLEEP模式喚醒引起的電源開啟;
(3)通過設置 MISCCR[19:17]=000b,釋放 SDRAM 的信號保護;
(4)配置 SDRAM 內(nèi)存控制器;
(5)等待,直到 SDRAM 自刷新被釋放,結(jié)束等待。大部分SDRAM需要等待所有 SDRAM 行的自刷新周期;
(6)GSTATUS[3:4]的信息可用于保存用戶自定義數(shù)據(jù),因為在 GSTATUS[3:4]中的值在睡眠模式下被保留;
(7)對 EINT[3:0],檢查 SRCPND 寄存器;對EINT[15:4],查看 EINTPEND 寄存器而不是SRCPND寄存器。(盡管EINTPEND寄存器的一些位被置位,SRCPND 寄存器不會被置位)。
以上是一個通用的休眠喚醒過程,在實際應用中,可根據(jù)不同情況使用不同的喚醒方式。例如,以休眠模式待機,在需要使用儀器時才喚醒系統(tǒng)的情況下,就需要一個諸如按鍵的外部中斷來喚醒系統(tǒng);而對于僅做一個保存掛起動作的情況,即刻自動喚醒系統(tǒng)則更為便捷。S3C2440就提供了兩種喚醒實現(xiàn)方式:外部中斷實現(xiàn)方式和RTC中斷實現(xiàn)方式。
2 基于外部中斷的休眠喚醒
正如之前提到的,在OALCPUPoweroff里,系統(tǒng)進入休眠前,正確設置外部喚醒中斷,才能夠喚醒CPU。正確設置喚醒中斷源,有3個要點:
(1)把對應的GPIO設置為中斷功能;
(2)明確外部中斷觸發(fā)條件,如將某種喚醒使用的中斷源所對應的IO接到一個按鍵上,需要通過按下按鍵實現(xiàn)喚醒,需要明確當按下這個按鍵時,IO接口上的電平會如何變化;
(3)根據(jù)按鍵按下時IO電平的變化條件設置EXTINTn寄存器。當按下按鍵時,IO口上的電平會發(fā)生從高到低的變化,那么就設置對應的EXTINTn,使得中斷觸發(fā)條件為Falling edge triggered即下降沿觸發(fā)。
通過如下代碼實現(xiàn)了通過按鍵K1、K2的外部中斷喚醒方式:
; 6. Setting Wakeup External Interrupt(EINT0,1,2) Mode
ldr r0, =vGPIOBASE
ldr r1, =0x5566//按鍵K1,K2(EINT0,EINT2)
str r1, [r0, #oGPFCON]
ldr r1, =0x82
str r1, [r0, #oEXTINT0]
此段代碼,首先設置了外部中斷0和外部中斷2的中斷功能,接著設置了中斷的觸發(fā)方式:下降沿觸發(fā)方式。
當Windows CE操作系統(tǒng)在基于S3C2440的智能巡檢分析診斷儀完全啟動后,按下“掛起”鍵,待屏幕顯示消失后,開始實驗。
實驗一:按下按鍵K1,使系統(tǒng)立即重新啟動,重新進入Windows CE操作系統(tǒng);
實驗二:按下按鍵K2,使系統(tǒng)立即重新啟動,重新進入Windows CE操作系統(tǒng);
實驗結(jié)果表明:即按即啟,沒有延遲,達到了外部中斷-按鍵喚醒系統(tǒng)的理想效果。
3 基于RTC中斷的休眠喚醒
S3C2440內(nèi)部RTC模塊結(jié)構(gòu)框圖如圖2所示。RTC模塊的有3種功能:產(chǎn)生時鐘滴答、實時計時和作為系統(tǒng)的觸發(fā)喚醒器[4]。RTC模塊可以在處理器的掉電模式或普通模式在設定時間(由BCD數(shù)據(jù)給出)和當前時間相同時發(fā)生報警。在普通模式下,ALM INT(報警中斷)處于激活狀態(tài)。在掉電模式下, PMWKUP (電源管理喚醒信號)與ALM INT一起處于報警狀態(tài)[5]。

相關的寄存器有RTCCON、RTCALM和ALMSEC等,設置代碼如下:
ldr r0,=vRTCBASE ;;;RTC alarm
ldr r1,=0x01
str r1,[r0,#oRTCCON]
ldr r1,=0x41
str r1,[r0,#oRTCALM]
ldr r1,=0x10 ;;10s喚醒
str r1,[r0,#oALMSEC]
此段代碼,首先設置RTC控制的可用,然后設置RTC報警中斷中,秒中斷可用,因為本文以喚醒時間10 s為例,所以僅用到了秒級中斷,設定喚醒時間10 s。
當Windows CE操作系統(tǒng)在基于S3C2440的智能巡檢分析診斷儀完全啟動后,按下“掛起”鍵,在“掛起”動作的實現(xiàn)代碼中設置串口打印語句,顯示“Start”標志,在系統(tǒng)被喚醒時設置串口打印語句,顯示“End”標志,通過DNW軟件,觀察串口打印信息,記錄“Start”和“End”之間的用時,即為喚醒時間,10次實驗結(jié)果可知平均用時10.04 s,與預計用時10.0 s的相對誤差為0.4%,在工程應用上,基本達到操作要求。
研究過程后期,在確認相應設置正確的前提下,系統(tǒng)仍無法正常喚醒,在重新分析整個流程設計和代碼實現(xiàn)后,發(fā)現(xiàn)在S3C2440的BSP(板級支持包)中存在一個BUG:系統(tǒng)休眠時保存數(shù)據(jù)的虛擬地址設置錯誤,SLEEPDATA_BASE_VIRTUAL設置為0xAC028000,而此處和Bootloader中的SLEEPDATA_BASE_PHYSICAL 都設定為0x30028000。根據(jù)地址映射表里面的設置是:DCD 0x80000000, 0x30000000, 64; 32 MB DRAM BANK 6,因此虛擬地址是0xA0028000。將虛擬地址修改后,即可正常喚醒。
本文通過深入分析休眠喚醒過程,在基于S3C2440和WindowsCE5.0的平臺上分別通過外部中斷喚醒和RTC中斷喚醒兩種方法實現(xiàn)了休眠喚醒。文中所述的原理和方法不僅適用于上述指定的硬件平臺,還適用于其他使用Windows CE嵌入式操作系統(tǒng)的硬件平臺。應用表明,這兩種方法實現(xiàn)了不同情況下的喚醒,達到了理想的效果,該儀器工作穩(wěn)定,性能良好,已進入小規(guī)模量產(chǎn)階段。
版權(quán)與免責聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://hbjingang.com,違反者本網(wǎng)將追究相關法律責任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權(quán)行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責任。
如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關權(quán)利。
- ARM技術架構(gòu)與應用開發(fā)實踐指南2026/1/6 10:40:19
- 嵌入式實時操作系統(tǒng)(RTOS)選型與移植技術指南2025/12/31 10:42:31
- 工業(yè)嵌入式系統(tǒng):通信接口技術選型與抗干擾設計實踐2025/12/15 14:36:53
- 深入解析嵌入式 OPENAMP 框架:開啟異核通信新時代2025/7/22 16:27:29
- 一文快速了解OPENWRT基礎知識2025/7/14 16:59:04









