《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于S3C2440和Windows CE5.0的嵌入式設(shè)備休眠喚醒技術(shù)研究
基于S3C2440和Windows CE5.0的嵌入式設(shè)備休眠喚醒技術(shù)研究
來源:微型機與應(yīng)用2010年第16期
王延慧, 江志農(nóng)
(北京化工大學(xué) 診斷與自愈工程研究中心,,北京 100029)
摘要: 就休眠喚醒技術(shù)實現(xiàn)過程中的難點進行了深入研究,,并針對S3C2440開發(fā)板提出了兩種可行的低功耗休眠模式喚醒實現(xiàn)方法:外部中斷喚醒和RTC中斷喚醒,。將這兩種方法應(yīng)用于一款基于S3C2440和WindowsCE 5.0的嵌入式智能巡檢分析診斷儀,儀器運行穩(wěn)定,、效果理想,。
Abstract:
Key words :

摘  要:休眠喚醒技術(shù)實現(xiàn)過程中的難點進行了深入研究,并針對S3C2440開發(fā)板提出了兩種可行的低功耗休眠模式喚醒實現(xiàn)方法:外部中斷喚醒和RTC中斷喚醒,。將這兩種方法應(yīng)用于一款基于S3C2440和WindowsCE 5.0的嵌入式智能巡檢分析診斷儀,,儀器運行穩(wěn)定、效果理想,。
關(guān)鍵詞: 嵌入式,; 休眠喚醒; S3C2440,; Windows CE

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

    在睡眠模式下,VDDi,、VDDiam,、VDDMPLL以及VDDUPLL會被關(guān)閉,其由PWREN引腳來控制,如PWREN信號被置位,,VDDi和VDDiam則由一個外部變壓器供電,。當(dāng)PWREN=0時,VDDi和VDDiam被關(guān)閉,。
 有多種方法可以使系統(tǒng)進入休眠,,例如在Windows CE的桌面上,點左下角的開始圖標(biāo),,然后選擇 “掛起”,;或者,在應(yīng)用程序或驅(qū)動中調(diào)用SetSystemPowerState()函數(shù),,都可以讓系統(tǒng)進入休眠狀態(tài),。實際上,這兩種方法殊途同歸,,最終都需要通過OEM層OEMPowerOff()函數(shù)依次調(diào)用BSPPowerOff()函數(shù),,以關(guān)閉板級的相關(guān)電源,保存所有寄存器的值,,關(guān)閉背光,;調(diào)用 ConfigStopGPIO()函數(shù),設(shè)置各IO休眠后的狀態(tài),;如果支持KITL,,調(diào)用OALKitlPowerOff()函數(shù)關(guān)閉KITL功能;調(diào)用OALCPUPoweroff()函數(shù),使得CPU進入休眠模式,。OALCPUPoweroff()函數(shù)保存當(dāng)前系統(tǒng)的狀態(tài),,把CPU上一些寄存器里的數(shù)據(jù)保存到RAM里去,然后禁止RAM自刷新的功能,,加入喚醒中斷源,,最后使CPU進入休眠模式。當(dāng)CPU處于Sleep狀態(tài)時,,RAM不會斷電,,這樣RAM中的數(shù)據(jù)就不會丟失,當(dāng)CPU被喚醒后使用RAM里的數(shù)據(jù)恢復(fù)系統(tǒng),。
 當(dāng)相應(yīng)的中斷源觸發(fā)時,,CPU就會被喚醒,電流消耗變大了,,需要說明的是,,此處僅喚醒CPU,之后才喚醒WINCE系統(tǒng),。當(dāng)系統(tǒng)由SLEEP到NORMAL切換期間需經(jīng)過一個RESET過程,這個過程稱為 Power On Reset ,。在S3C2440 CPU中,寄存器GSTATUS2專門用以判斷發(fā)生Reset原因。Power On Reset后,,在之前SLEEP過程中保存下來的RAM中的系統(tǒng)數(shù)據(jù)是不會丟失的,。本文需要設(shè)計的喚醒子系統(tǒng),就是把這些數(shù)值恢復(fù)到它們休眠前應(yīng)處的地址,。
 在Bootloader中實現(xiàn)數(shù)據(jù)恢復(fù)的具體步驟如下:
 (1)如果有喚醒源被觸發(fā),,內(nèi)部的復(fù)位信號就會動作。這和外部的 nReset引腳觸發(fā)非常相似,。復(fù)位持續(xù)時間由內(nèi)部的 16 bit計數(shù)器邏輯決定,通過reset 復(fù)位決斷時間可以計算tRST=(65535/XTAL_frequency),;
 (2)通過檢測GSTATUS2[2],,判斷是否是由SLEEP模式喚醒引起的電源開啟;
 (3)通過設(shè)置 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 寄存器不會被置位),。
 以上是一個通用的休眠喚醒過程,在實際應(yīng)用中,,可根據(jù)不同情況使用不同的喚醒方式,。例如,以休眠模式待機,在需要使用儀器時才喚醒系統(tǒng)的情況下,,就需要一個諸如按鍵的外部中斷來喚醒系統(tǒng),;而對于僅做一個保存掛起動作的情況,即刻自動喚醒系統(tǒng)則更為便捷,。S3C2440就提供了兩種喚醒實現(xiàn)方式:外部中斷實現(xiàn)方式和RTC中斷實現(xiàn)方式,。
2  基于外部中斷的休眠喚醒
 正如之前提到的,在OALCPUPoweroff里,,系統(tǒng)進入休眠前,,正確設(shè)置外部喚醒中斷,才能夠喚醒CPU,。正確設(shè)置喚醒中斷源,,有3個要點:
 (1)把對應(yīng)的GPIO設(shè)置為中斷功能;
 (2)明確外部中斷觸發(fā)條件,,如將某種喚醒使用的中斷源所對應(yīng)的IO接到一個按鍵上,,需要通過按下按鍵實現(xiàn)喚醒,需要明確當(dāng)按下這個按鍵時,,IO接口上的電平會如何變化,;
  (3)根據(jù)按鍵按下時IO電平的變化條件設(shè)置EXTINTn寄存器。當(dāng)按下按鍵時,,IO口上的電平會發(fā)生從高到低的變化,,那么就設(shè)置對應(yīng)的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]
 此段代碼,,首先設(shè)置了外部中斷0和外部中斷2的中斷功能,,接著設(shè)置了中斷的觸發(fā)方式:下降沿觸發(fā)方式。
 當(dāng)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模塊可以在處理器的掉電模式或普通模式在設(shè)定時間(由BCD數(shù)據(jù)給出)和當(dāng)前時間相同時發(fā)生報警,。在普通模式下,ALM INT(報警中斷)處于激活狀態(tài),。在掉電模式下, PMWKUP (電源管理喚醒信號)與ALM INT一起處于報警狀態(tài)[5]。

   相關(guān)的寄存器有RTCCON,、RTCALM和ALMSEC等,,設(shè)置代碼如下:
   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]
 此段代碼,首先設(shè)置RTC控制的可用,然后設(shè)置RTC報警中斷中,,秒中斷可用,因為本文以喚醒時間10 s為例,,所以僅用到了秒級中斷,最后設(shè)定喚醒時間10 s,。
   當(dāng)Windows CE操作系統(tǒng)在基于S3C2440的智能巡檢分析診斷儀完全啟動后,,按下“掛起”鍵,在“掛起”動作的實現(xiàn)代碼中設(shè)置串口打印語句,,顯示“Start”標(biāo)志,,在系統(tǒng)被喚醒時設(shè)置串口打印語句,顯示“End”標(biāo)志,,通過DNW軟件,,觀察串口打印信息,記錄“Start”和“End”之間的用時,,即為喚醒時間,10次實驗結(jié)果可知平均用時10.04 s,與預(yù)計用時10.0 s的相對誤差為0.4%,,在工程應(yīng)用上,,基本達到操作要求。
    研究過程后期,,在確認相應(yīng)設(shè)置正確的前提下,,系統(tǒng)仍無法正常喚醒,,在重新分析整個流程設(shè)計和代碼實現(xiàn)后,發(fā)現(xiàn)在S3C2440的官方BSP(板級支持包)中存在一個BUG:系統(tǒng)休眠時保存數(shù)據(jù)的虛擬地址設(shè)置錯誤,,SLEEPDATA_BASE_VIRTUAL設(shè)置為0xAC028000,,而此處和Bootloader中的SLEEPDATA_BASE_PHYSICAL 都設(shè)定為0x30028000。根據(jù)地址映射表里面的設(shè)置是:DCD 0x80000000, 0x30000000, 64; 32 MB DRAM BANK 6,,因此虛擬地址是0xA0028000,。將虛擬地址修改后,即可正常喚醒,。
    本文通過深入分析休眠喚醒過程,,在基于S3C2440和WindowsCE5.0的平臺上分別通過外部中斷喚醒和RTC中斷喚醒兩種方法實現(xiàn)了休眠喚醒。文中所述的原理和方法不僅適用于上述指定的硬件平臺,,還適用于其他使用Windows CE嵌入式操作系統(tǒng)的硬件平臺,。應(yīng)用表明,這兩種方法實現(xiàn)了不同情況下的喚醒,,達到了理想的效果,,該儀器工作穩(wěn)定,性能良好,,已進入小規(guī)模量產(chǎn)階段,。
參考文獻
[1]  張煒,韓進.低功耗嵌入式系統(tǒng)的分析與應(yīng)用[J].計算機系統(tǒng)應(yīng)用,2009(11):109:113.
[2]  KATZ D,,GENTILE R. 低功耗嵌入式實現(xiàn)的方方面面[J]. 電子產(chǎn)品世界,,2009(1):63-66.
[3]  Samsung Electronics,Samsung 2440A datasheet,,2004.
[4]  田澤.嵌入式開發(fā)與應(yīng)用[M]. 北京:北京航空航天大學(xué)出版社,2004:22-24.
[5]  田澤,,曹慶年,劉天時,,等. 嵌入式處理器S3C2440  Windows CE的RTC模塊驅(qū)動設(shè)計與實現(xiàn)[J]. 計算機應(yīng)用與軟件,,2007(3):31-33.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。