基于WinCE5.0的嵌入式設(shè)備休眠喚醒技術(shù)研究
S3C2440內(nèi)部RTC模塊結(jié)構(gòu)框圖如圖2所示。RTC模塊的有3種功能:產(chǎn)生時(shí)鐘滴答、實(shí)時(shí)計(jì)時(shí)和作為系統(tǒng)的觸發(fā)喚醒器[4]。RTC模塊可以在處理器的掉電模式或普通模式在設(shè)定時(shí)間(由BCD數(shù)據(jù)給出)和當(dāng)前時(shí)間相同時(shí)發(fā)生報(bào)警。在普通模式下,ALM INT(報(bào)警中斷)處于激活狀態(tài)。在掉電模式下, PMWKUP (電源管理喚醒信號)與ALM INT一起處于報(bào)警狀態(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報(bào)警中斷中,秒中斷可用,因?yàn)楸疚囊詥拘褧r(shí)間10 s為例,所以僅用到了秒級中斷,最后設(shè)定喚醒時(shí)間10 s。
當(dāng)Windows CE操作系統(tǒng)在基于S3C2440的智能巡檢分析診斷儀完全啟動后,按下“掛起”鍵,在“掛起”動作的實(shí)現(xiàn)代碼中設(shè)置串口打印語句,顯示“Start”標(biāo)志,在系統(tǒng)被喚醒時(shí)設(shè)置串口打印語句,顯示“End”標(biāo)志,通過DNW軟件,觀察串口打印信息,記錄“Start”和“End”之間的用時(shí),即為喚醒時(shí)間,10次實(shí)驗(yàn)結(jié)果可知平均用時(shí)10.04 s,與預(yù)計(jì)用時(shí)10.0 s的相對誤差為0.4%,在工程應(yīng)用上,基本達(dá)到操作要求。
研究過程后期,在確認(rèn)相應(yīng)設(shè)置正確的前提下,系統(tǒng)仍無法正常喚醒,在重新分析整個(gè)流程設(shè)計(jì)和代碼實(shí)現(xiàn)后,發(fā)現(xiàn)在S3C2440的官方BSP(板級支持包)中存在一個(gè)BUG:系統(tǒng)休眠時(shí)保存數(shù)據(jù)的虛擬地址設(shè)置錯(cuò)誤,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中斷喚醒兩種方法實(shí)現(xiàn)了休眠喚醒。文中所述的原理和方法不僅適用于上述指定的硬件平臺,還適用于其他使用Windows CE嵌入式操作系統(tǒng)的硬件平臺。應(yīng)用表明,這兩種方法實(shí)現(xiàn)了不同情況下的喚醒,達(dá)到了理想的效果,該儀器工作穩(wěn)定,性能良好,已進(jìn)入小規(guī)模量產(chǎn)階段。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論