资料介绍
嵌入式系统应用中降低设备功耗以提高续航能力是其设计的热点[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所示。
在睡眠模式下,VDDi、VDDiam、VDDMPLL以及VDDUPLL会被关闭,其由PWREN引脚来控制,如PWREN信号被置位,VDDi和VDDiam则由一个外部变压器供电。当PWREN=0时,VDDi和VDDiam被关闭。
有多种方法可以使系统进入休眠,例如在Windows CE的桌面上,点左下角的开始图标,然后选择 “挂起”;或者,在应用程序或驱动中调用SetSystemPowerState()函数,都可以让系统进入休眠状态。实际上,这两种方法殊途同归,最终都需要通过OEM层OEMPowerOff()函数依次调用BSPPowerOff()函数,以关闭板级的相关电源,保存所有寄存器的值,关闭背光;调用 ConfigStopGPIO()函数,设置各IO休眠后的状态;如果支持KITL,调用OALKitlPowerOff()函数关闭KITL功能;调用OALCPUPoweroff()函数,使得CPU进入休眠模式。OALCPUPoweroff()函数保存当前系统的状态,把CPU上一些寄存器里的数据保存到RAM里去,然后禁止RAM自刷新的功能,加入唤醒中断源,最后使CPU进入休眠模式。当CPU处于Sleep状态时,RAM不会断电,这样RAM中的数据就不会丢失,当CPU被唤醒后使用RAM里的数据恢复系统。
当相应的中断源触发时,CPU就会被唤醒,电流消耗变大了,需要说明的是,此处仅唤醒CPU,之后才唤醒WINCE系统。当系统由SLEEP到NORMAL切换期间需经过一个RESET过程,这个过程称为 Power On Reset 。在S3C2440 CPU中,寄存器GSTATUS2专门用以判断发生Reset原因。Power On Reset后,在之前SLEEP过程中保存下来的RAM中的系统数据是不会丢失的。本文需要设计的唤醒子系统,就是把这些数值恢复到它们休眠前应处的地址。
在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操作系统;
实验结果表明:即按即启,没有延迟,达到了外部中断-按键唤醒系统的理想效果
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所示。
在睡眠模式下,VDDi、VDDiam、VDDMPLL以及VDDUPLL会被关闭,其由PWREN引脚来控制,如PWREN信号被置位,VDDi和VDDiam则由一个外部变压器供电。当PWREN=0时,VDDi和VDDiam被关闭。
有多种方法可以使系统进入休眠,例如在Windows CE的桌面上,点左下角的开始图标,然后选择 “挂起”;或者,在应用程序或驱动中调用SetSystemPowerState()函数,都可以让系统进入休眠状态。实际上,这两种方法殊途同归,最终都需要通过OEM层OEMPowerOff()函数依次调用BSPPowerOff()函数,以关闭板级的相关电源,保存所有寄存器的值,关闭背光;调用 ConfigStopGPIO()函数,设置各IO休眠后的状态;如果支持KITL,调用OALKitlPowerOff()函数关闭KITL功能;调用OALCPUPoweroff()函数,使得CPU进入休眠模式。OALCPUPoweroff()函数保存当前系统的状态,把CPU上一些寄存器里的数据保存到RAM里去,然后禁止RAM自刷新的功能,加入唤醒中断源,最后使CPU进入休眠模式。当CPU处于Sleep状态时,RAM不会断电,这样RAM中的数据就不会丢失,当CPU被唤醒后使用RAM里的数据恢复系统。
当相应的中断源触发时,CPU就会被唤醒,电流消耗变大了,需要说明的是,此处仅唤醒CPU,之后才唤醒WINCE系统。当系统由SLEEP到NORMAL切换期间需经过一个RESET过程,这个过程称为 Power On Reset 。在S3C2440 CPU中,寄存器GSTATUS2专门用以判断发生Reset原因。Power On Reset后,在之前SLEEP过程中保存下来的RAM中的系统数据是不会丢失的。本文需要设计的唤醒子系统,就是把这些数值恢复到它们休眠前应处的地址。
在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操作系统;
实验结果表明:即按即启,没有延迟,达到了外部中断-按键唤醒系统的理想效果
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 基于S3C2440的裂纹实时测量系统的设计
- (1)电源管理-S3C2440芯片电源管理模块解析
- 如何使用ARM9与WindowsCE进行车辆GPS定位信息采集系统的资料说明 10次下载
- s3c2440用户资料手册 27次下载
- 裸机学习s3c2440 29次下载
- s3c2440全套中文手册 61次下载
- S3C2440A全套中文手册 15次下载
- s3c2440芯片中文手册 4次下载
- 基于S3C2440和μC%2fOS的FAT文件系统的设计与实现 5次下载
- 基于ARM处理器S3C2440的VGA显示技术 234次下载
- s3c2440整套中文手册 datasheet
- 基于S3C2440检测系统的设计与应用
- 基于S3C2440的无线物流终端机的设计与应用
- S3C2440应用电路图
- s3c2440 pdf datasheet
- 在飞凌嵌入式T113-i开发板实现休眠及唤醒操作 1094次阅读
- ECU系统休眠后通过诊断报文唤醒ECU且唤醒网络后快发NM报文 4778次阅读
- 基于S3C2440A嵌入式微处理器实现高速接入网络的设计 2491次阅读
- 基于S3C2440A和WinCE 4.2操作系统实现数字寻北仪的应用方案 3162次阅读
- 基于S3C2410处理器对Windows CE 5.0操作系统实现BSP移植 977次阅读
- 飞凌嵌入式FL2440开发板简介 1.1w次阅读
- 友善之臂Mini2451平台介绍 4070次阅读
- 友善之臂Tiny2451规格 2715次阅读
- 友善之臂Tiny2416简介 4699次阅读
- 友善之臂Micro2440简介 5972次阅读
- 基于一种可以用按键进行调节LCD背光亮度的解决方案 7827次阅读
- 基于S3c2440的I2C驱动与测试程序追踪交叉分析 1337次阅读
- 以嵌入式处理器S3C2440为核心的多任务机器人控制系统设计详解 1723次阅读
- 介绍arm9时钟与定时器 8228次阅读
- ARM的发展史以及架构解析 1.5w次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 6基于FPGA的C8051F单片机开发板设计
- 0.70 MB | 2次下载 | 免费
- 751单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21548次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183278次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多