目前嵌入式系统的电源管理技术正由传统的基于电源管理器件和外设控制为主的静态控制方式,转到以操作系统为的动静态结合的综合控制模式。因为嵌入式设备对能耗越来越敏感,而电源管理技术正是这些产品设计的关键所在。为了应对电源管理面临的挑战,在嵌入式系统开发在时需要设计多种电源模式,以便在不同工作状态时有多种能耗模式可供选择。休眠和唤醒功能正是目前WINCW系统开发的研究热点之一。
嵌入式系统应用中降低设备功耗以提高续航能力是其设计的热点[1]。在休眠状态,系统处于电流消耗状态,同时仍维持存储区中的内容,为了减少能量消耗和延长电池寿命,需要让处理器定期进入或退出休眠模式[2]。Windows CE 作为一个广泛应用于嵌入式设备上的操作系统,提供了完善的电源管理功能。其中,休眠唤醒便是一个重要的功能。本文在结合S3C2440硬件基础上分析休眠唤醒过程,分别采用外部中断唤醒和RTC中断唤醒两种方法实现了休眠唤醒,并给出了具体实现代码。根据相应唤醒需求,将这两种方法应用于北京化工大学诊断与自愈工程研究中心的一款基于S3C2440和WindowsCE 5.0的嵌入式智能巡检分析诊断仪,结果表明能准确达到实际的设置要求,效果良好。
1 休眠唤醒过程分析
对于电源控制逻辑模块,S3C2440 有多种电源管理方案以针对须执行的任务保持的电源消耗。S3C2440 中的电源管理模块对应 4 种模式:NORMAL 模式、SLOW 模式、IDLE 模式和SLEEP模式。
在SLEEP模式下,电源管理模块关闭内部电源,因此,CPU 和内部逻辑模块都没有电源消耗,但除了此模式下的唤醒模块。激活SLEEP模式需要2个独立的电源,其中一个为唤醒模块供电,另一个为包括CPU的其他逻辑模块供电,并且可以由power on/off控制。在SLEEP模式下,给CUP和内部逻辑单元供电的第二个电源被关闭,只有唤醒模块是工作的。这种状态下,可以通过外部中断EINT[15:0]或定时器的RTC(real time control)中断将系统从睡眠状态中唤醒[3],如图1所示。
在WinCE系统中支持多种电源状态:①ON状态,用户在主动使用设备。②UserIdle状态,用户与设备停止交互,但仍有可能使用设备。③SystemIdle状态,在经过一段时间的UserIdle后进入此状态,但是驱动和系统仍然活动。④Suspend状态,当驱动程序和系统进程不再与系统交互时进入此状态。⑤ColdReboot和Reboot状态,冷启动后系统电源状态。其中,按功率消耗由小到大可分为睡眠(sleep)、空闲(idle)、运行(Run)等模式。大多时间内,在运行态(Run)时设备全部正常工作,而在睡眠与空闲模式时系统则是按照特定的模式进行相应的节能。
通常,嵌入式系统在大多数时间都不需要关注WinCE 设备的电源损耗,但是在某些时候要注意这些损耗。因此,的节能方法是使系统适时的进出休眠状态。例如,WinCE系统先检查任务负载情况,如果没有需要运行的任务,则一般进入空闲节能状态等待唤醒,在空闲一段时间后再进入深度睡眠,挂起到RAM中或者硬盘上。当WinCE 系统被挂起,为了省电系统需要关闭CPU处理器及大部分设备的供电,然后在需要唤醒时再通过定时器或中断模块唤醒。比如用户按下On/Off按钮时,或者监视用户活动的定时器超时,或者应用程序API都可以使得嵌入式系统休眠。而当用户再次按下On/Off或者有其它唤醒中断发生时,系统内核调用OEMPowerOff()函数,在系统唤醒后继续从OEMPowerOff()被挂起处执行。OEMPowerOff函数能进行CPU寄存器保存、设置及唤醒恢复等功能。系统Idle状态和前面说的UserIdle状态是不同概念,前者是CPU负荷驱动,代表系统空闲;后者是用户活动驱动,代表用户空闲。
在Bootloader中实现数据恢复的具体步骤如下:
(1)如果有唤醒源被触发,内部的复位信号就会动作。这和外部的 nReset引脚触发非常相似。复位持续时间由内部的 16 bit计数器逻辑决定,通过reset 复位决断时间可以计算tRST=(65535/XTAL_frequency);
(2)通过检测GSTATUS2[2],判断是否是由SLEEP模式唤醒引起的电源开启;
(3)通过设置 MISCCR[19:17]=000b,释放 SDRAM 的信号保护;
(4)配置 SDRAM 内存控制器;
(5)等待,直到 SDRAM 自刷新被释放,结束等待。大部分SDRAM需要等待所有 SDRAM 行的自刷新周期;
(6)GSTATUS[3:4]的信息可用于保存用户自定义数据,因为在 GSTATUS[3:4]中的值在睡眠模式下被保留;
(7)对 EINT[3:0],检查 SRCPND 寄存器;对EINT[15:4],查看 EINTPEND 寄存器而不是SRCPND寄存器。(尽管EINTPEND寄存器的一些位被置位,SRCPND 寄存器不会被置位)。
以上是一个通用的休眠唤醒过程,在实际应用中,可根据不同情况使用不同的唤醒方式。例如,以休眠模式待机,在需要使用仪器时才唤醒系统的情况下,就需要一个诸如按键的外部中断来唤醒系统;而对于仅做一个保存挂起动作的情况,即刻自动唤醒系统则更为便捷。S3C2440就提供了两种唤醒实现方式:外部中断实现方式和RTC中断实现方式。
2 基于外部中断的休眠唤醒
正如之前提到的,在OALCPUPoweroff里,系统进入休眠前,正确设置外部唤醒中断,才能够唤醒CPU。正确设置唤醒中断源,有3个要点:
(1)把对应的GPIO设置为中断功能;
(2)明确外部中断触发条件,如将某种唤醒使用的中断源所对应的IO接到一个按键上,需要通过按下按键实现唤醒,需要明确当按下这个按键时,IO接口上的电平会如何变化;
(3)根据按键按下时IO电平的变化条件设置EXTINTn寄存器。当按下按键时,IO口上的电平会发生从高到低的变化,那么就设置对应的EXTINTn,使得中断触发条件为Falling edge triggered即下降沿触发。
通过如下代码实现了通过按键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的中断功能,接着设置了中断的触发方式:下降沿触发方式。
当Windows CE操作系统在基于S3C2440的智能巡检分析诊断仪完全启动后,按下“挂起”键,待屏幕显示消失后,开始实验。
实验一:按下按键K1,使系统立即重新启动,重新进入Windows CE操作系统;
实验二:按下按键K2,使系统立即重新启动,重新进入Windows CE操作系统;
实验结果表明:即按即启,没有延迟,达到了外部中断-按键唤醒系统的理想效果。
3 基于RTC中断的休眠唤醒
S3C2440内部RTC模块结构框图如图2所示。RTC模块的有3种功能:产生时钟滴答、实时计时和作为系统的触发唤醒器[4]。RTC模块可以在处理器的掉电模式或普通模式在设定时间(由BCD数据给出)和当前时间相同时发生报警。在普通模式下,ALM INT(报警中断)处于激活状态。在掉电模式下, PMWKUP (电源管理唤醒信号)与ALM INT一起处于报警状态[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操作系统在基于S3C2440的智能巡检分析诊断仪完全启动后,按下“挂起”键,在“挂起”动作的实现代码中设置串口打印语句,显示“Start”标志,在系统被唤醒时设置串口打印语句,显示“End”标志,通过DNW软件,观察串口打印信息,记录“Start”和“End”之间的用时,即为唤醒时间,10次实验结果可知平均用时10.04 s,与预计用时10.0 s的相对误差为0.4%,在工程应用上,基本达到操作要求。
研究过程后期,在确认相应设置正确的前提下,系统仍无法正常唤醒,在重新分析整个流程设计和代码实现后,发现在S3C2440的BSP(板级支持包)中存在一个BUG:系统休眠时保存数据的虚拟地址设置错误,SLEEPDATA_BASE_VIRTUAL设置为0xAC028000,而此处和Bootloader中的SLEEPDATA_BASE_PHYSICAL 都设定为0x30028000。根据地址映射表里面的设置是:DCD 0x80000000, 0x30000000, 64; 32 MB DRAM BANK 6,因此虚拟地址是0xA0028000。将虚拟地址修改后,即可正常唤醒。
本文通过深入分析休眠唤醒过程,在基于S3C2440和WindowsCE5.0的平台上分别通过外部中断唤醒和RTC中断唤醒两种方法实现了休眠唤醒。文中所述的原理和方法不仅适用于上述指定的硬件平台,还适用于其他使用Windows CE嵌入式操作系统的硬件平台。应用表明,这两种方法实现了不同情况下的唤醒,达到了理想的效果,该仪器工作稳定,性能良好,已进入小规模量产阶段。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。