对WinCE5.0的嵌入式设备休眠唤醒功能的分析_第1页
对WinCE5.0的嵌入式设备休眠唤醒功能的分析_第2页
对WinCE5.0的嵌入式设备休眠唤醒功能的分析_第3页
对WinCE5.0的嵌入式设备休眠唤醒功能的分析_第4页
对WinCE5.0的嵌入式设备休眠唤醒功能的分析_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、【Word版本下载可任意编辑】 对WinCE5.0的嵌入式设备休眠唤醒功能的分析 通常,嵌入式系统在大多数时间都不需要关注WinCE 设备的电源损耗,但是在某些时候要注意这些损耗。因此,的节能方法是使系统适时的进出休眠状态。例如,WinCE系统先检查任务负载情况,如果没有需要运行的任务,则一般进入空闲节能状态等待唤醒,在空闲一段时间后再进入深度睡眠,挂起到RAM中或者硬盘上。当WinCE 系统被挂起,为了省电系统需要关闭CPU处理器及大部分设备的供电,然后在需要唤醒时再通过定时器或中断模块唤醒。比方用户按下On/Off按钮时,或者监视用户活动的定时器超时,或者应用程序API都可以使得嵌入式系统

2、休眠。而当用户再次按下On/Off或者有其它唤醒中断发生时,系统内核调用OEMPowerOff()函数,在系统唤醒后继续从OEMPowerOff()被挂起处执行。OEMPowerOff函数能开展CPU存放器保存、设置及唤醒恢复等功能。系统Idle状态和前面说的UserIdle状态是不同概念,前者是CPU负荷驱动,代表系统空闲;后者是用户活动驱动,代表用户空闲。 在Bootloader中实现数据恢复的具体步骤如下: (1)如果有唤醒源被触发,内部的复位信号就会动作。这和外部的 nReset引脚触发非常相似。复位持续时间由内部的 16 bit计数器逻辑决定,通过reset 复位决断时间可以计算tR

3、ST=(65535/XTAL_frequency); (2)通过检测GSTATUS2,判断是否是由SLEEP模式唤醒引起的电源开启; (3)通过设置 MISCCR=000b,释放 SDRAM 的信号保护; (4)配置 SDRAM 内存控制器; (5)等待,直到 SDRAM 自刷新被释放,结束等待。大部分SDRAM需要等待所有 SDRAM 行的自刷新周期; (6)GSTATUS的信息可用于保存用户自定义数据,因为在 GSTATUS中的值在睡眠模式下被保存; (7)对 EINT,检查 SRCPND 存放器;对EINT,查看 EINTPEND 存放器而不是SRCPND存放器。(尽管EINTPEND存

4、放器的一些位被置位,SRCPND 存放器不会被置位)。 以上是一个通用的休眠唤醒过程,在实际应用中,可根据不同情况使用不同的唤醒方式。例如,以休眠模式待机,在需要使用仪器时才唤醒系统的情况下,就需要一个诸如按键的外部中断来唤醒系统;而对于仅做一个保存挂起动作的情况,即刻自动唤醒系统则更为便捷。S3C2440就提供了两种唤醒实现方式:外部中断实现方式和RTC中断实现方式。 2 基于外部中断的休眠唤醒 正如之前提到的,在OALCPUPoweroff里,系统进入休眠前,正确设置外部唤醒中断,才能够唤醒CPU。正确设置唤醒中断源,有3个要点: (1)把对应的GPIO设置为中断功能; (2)明确外部中断

5、触发条件,如将某种唤醒使用的中断源所对应的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, =0 x5

6、566/按键K1,K2(EINT0,EINT2) str r1, ldr r1, =0 x82 str r1, 此段代码,首先设置了外部中断0和外部中断2的中断功能,接着设置了中断的触发方式:下降沿触发方式。 当Windows CE操作系统在基于S3C2440的智能巡检分析诊断仪完全启动后,按下“挂起”键,待屏幕显示消失后,开始实验。 实验一:按下按键K1,使系统立即重新启动,重新进入Windows CE操作系统; 实验二:按下按键K2,使系统立即重新启动,重新进入Windows CE操作系统; 实验结果说明:即按即启,没有延迟,到达了外部中断-按键唤醒系统的理想效果。 3 基于RTC中断的休

7、眠唤醒 S3C2440内部RTC模块构造框图如图2所示。RTC模块的有3种功能:产生时钟滴答、实时计时和作为系统的触发唤醒器。RTC模块可以在处理器的掉电模式或普通模式在设定时间(由BCD数据给出)和当前时间相同时发生报警。在普通模式下,ALM INT(报警中断)处于激活状态。在掉电模式下, PMWKUP (电源管理唤醒信号)与ALM INT一起处于报警状态。 相关的存放器有RTCCON、RTCALM和ALMSEC等,设置代码如下: ldr r0,=vRTCBASE ;RTC alarm ldr r1,=0 x01 str r1, ldr r1,=0 x41 str r1, ldr r1,=0

8、 x10 ;10s唤醒 str r1, 此段代码,首先设置RTC控制的可用,然后设置RTC报警中断中,秒中断可用,因为本文以唤醒时间10 s为例,所以仅用到了秒级中断,设定唤醒时间10 s。 当Windows CE操作系统在基于S3C2440的智能巡检分析诊断仪完全启动后,按下“挂起”键,在“挂起”动作的实现代码中设置串口打印语句,显示“Start”标志,在系统被唤醒时设置串口打印语句,显示“End”标志,通过DNW软件,观察串口打印信息,记录“Start”和“End”之间的用时,即为唤醒时间,10次实验结果可知平均用时10.04 s,与预计用时10.0 s的相对误差为0.4%,在工程应用上,

9、基本到达操作要求。 研究过程后期,在确认相应设置正确的前提下,系统仍无法正常唤醒,在重新分析整个流程设计和代码实现后,发现在S3C2440的BSP(板级支持包)中存在一个BUG:系统休眠时保存数据的虚拟地址设置错误,SLEEPDATA_BASE_VIRTUAL设置为0 xAC028000,而此处和Bootloader中的SLEEPDATA_BASE_PHYSICAL 都设定为0 x30028000。根据地址映射表里面的设置是:DCD 0 x80000000, 0 x30000000, 64; 32 MB DRAM BANK 6,因此虚拟地址是0 xA0028000。将虚拟地址修改后,即可正常唤醒。 本文通过深入分析休眠唤醒过程,在基于S3C2440和WindowsCE5.0的平台

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论