您当前的位置:五五电子网电子知识电源动力技术其他电源技术基于Window s CE 操作系统的嵌入式终端背光驱动的电源管理系统设计 正文
基于Window s CE 操作系统的嵌入式终端背光驱动的电源管理系统设计

基于Window s CE 操作系统的嵌入式终端背光驱动的电源管理系统设计

点击数:7628 次   录入时间:03-04 11:40:08   整理:http://www.55dianzi.com   其他电源技术

    W inCE 的两种模型是本机的设备驱动程序和流接口的驱动 程对于通常的嵌入式电子设备, 尤其是不能长久地连接交流电源的嵌入式电子设备, 降低显示设备的耗电一直是电源管理的主要任务。目前, 有许多类型的显示设备, 但现代大多数产品都选用反射式薄膜晶体管 ( TFT ) 显示加背光灯作为显示设备。虽然在光线充足的情况下可以看清屏幕上的内容, 但是考虑到阅读的舒适度, 还是需要把背光灯打开。 基于 W indow s CE 的嵌入式系统终端通 常以电池供电。因此, 背光驱动电源管理的作用显得尤为关键。如何减少目标系统的不必要的耗电, 延长其待机时间, 就成了 W indow s CE 操作系统电源管理设计与开发的一个重要内容。

    本文从WinCE 的流接口设备驱动程序出发, 详细介绍了基于 Window s CE 操作系统电源管理策 略和基本原理, 并且在WinCE 背光驱动中实现了电源管理的设计与开发。

    1 Window CE 驱动程序架构

    目前,WinCE 提供了四种设备模型, 其中两种是专门用于 WinCE 的模型,另外两种模型来自其他操作系统。基于WinCE 的两种模型是本机的设备驱动程序和流接口的驱动程序。两种外部模型用于通用串行总线(USB) 和网络驱动器接口标准(NDIS) 驱动程序。其中流接口驱动程序是为连接到基于WinCE 平台的外围设备而设计的, 这些外围设备包括SD 卡、摄像头、打印机等,其驱动模型如图1 所示。本文基于S3C2440A 的ARM9 开发板上LCD 显示屏的背光控制流接口驱动程序, 详细分析WinCE 下背光驱动的电源管理开发实现流程。

     

<a target=Windows CE 流接口驱动模型" width="600" height="370" onload="return imgzoom(this,600);" onclick="javascript:window.open(this.src);" style="cursor:pointer;"/>

   图1 Window s CE 流接口驱动模型

    从图1 可以看出, 外围设备由设备驱动程序管理, 用户应用程序通过调用文件系统从而实现对外部物理设备的访问, 流接口驱动程序通过把外围设备表示为文件系统的一个特殊文件, 而使得应用程序在使用外围设备时就像打开、关闭一个文件一样简单。

    2 Window CE 电源管理

    2.1 电源管理架构和电源管理器

    电源管理的总体结构如图2 所示。电源管理器直接或者间接地与应用程序和驱动程序交互。电源管理器与驱动程序主要通过驱动程序接口进行交互, 与应用程序通过API 和提醒接口进行交互。其中, 电源管理器专门负责管理设备电源状态, 从而提高操作系统的整体电源效率, 并且与不支持电源管理的驱动程序相兼容。电源管理器在操作系统中的软件实体是动态链接库pm. dll, 它由设备管理器devICe. dll 加载到Windows CE 的内核进程中运行。

     电源管理架构示意图

    图2 电源管理架构示意图

    使用电源管理器, 设备接收作为I/ O 控制代码(IOCT L)形式的电源状态变化的通知。使用IOCT L 管理电源可以区分设备的电源状态与整个操作系统的电源状态。这样, 当操作系统正在运行时, 一些设备可以关闭自己的电源, 而当操作系统挂起时, 另外一些设备可以保持原有状态。

    2.2 Windows CE设备电源状态和系统电源状态

    电源管理器期望所有被管理的设备都支持一个或者多个设备电源状态, 设备必须向电源管理器报告它们的电源消耗特征, 设备电源状态通常需要在性能与电量消耗之间进行折中。

    电源状态包括系统电源状态和设备电源状态。设备管理器在由OEM 定义的系统电源状态的范围内管理设备电源状态, 系统电源状态对设备电源状态施加了一个上界。

    Window s CE 的设备电源状态是操作系统的静态的预定义电源状态。外设的驱动程序从电源管理器处接收改变设备电源状态的请求, 将它转换成外设可以支持的电源状态, 并且负责最后实现在物理外设上的电源状态改变。

    Window s CE 提供5 种预定义的设备电源状态。它们在注册表中也有相对应的键。如果以Dn 代表D0~ D4, 则n 的数字越小的电源状态等级下外设的耗电量越大, 如表1 所列。

    表1 设备电源状态     

设备电源状态

    Window s CE 操作系统的系统电源状态与设备电源状态性质完全不同, 它不是静态定义的, 而是由OEM 用户根据需要自定义。OEM 用户通过配置系统注册表定义系统的电源状态,系统电源状态的名称被定义成注册表项的名字。图3 描述了Window s CE 支持4 种最典型的系统电源状态的转换。



www.55dianzi.com
系统电源状态的转换

   图3 系统电源状态的转换

    3 背光驱动的电源管理

    3.1 LCD 背光的电源管理策略

    背光驱动启动一个监视工作线程, 不停的等待3 个事件:

    3.1.1 BackLightChang eEv ent

    等待注册表中时钟的更新, 在注册表的时钟更新之后总是将背光灯打开。

    dw Resul t = WaitForMul tipleObject s( NUM _EVENT S, & g_evtSignal[ 0] , FALSE, dw Tim eout ) ;

    if ( WAIT _OBJECT_0 = = dw Res ult ) {

    BL_ReadRegist ry( & g_BLInf o) ;

    BL_On( TRUE) ;

    }

    3.1.2 Pow erChangedEv ent

    供电电源发生变化, 例如插入了电源, 监视线程会获得了这个事件。如果使用电源, 可以使用m _ dw ACTimeout 值作为超时值, 否则, 使用m _ dw Batter yT imeout 值作为超时值。

    if ( dw Result = = WAIT_OBJECT _0+ BL_POWERE VT) {

    if ( ISACOn( ) ) {

    dw Timeout = g_BLInf o. m_dw ACTim eout * 1000;

    }

    else {

    dw Timeout = g_BLInf o. m_dw Bat t eryT imeout * 1000;

    }

    }

    3.1.3 Pow erM anag er/ ActivityTimer / UserActivity

    等待用户输入事件,如果用户有按键动作,则无论电源插上与否背光驱动都打开,否则,等待超时事件的发生, 将背光驱动关闭。

    if ( dw Result = = WAIT_OBJECT _0+ 1 | | dwResult = = WAIT _OBJECT _0 + BL_BUT TONEVT )

    {

    if ( IsACOn( ) ) {

    if ( g_BLIn fo. m_bAC Au t o) {

    BL_On( TRUE) ; }

    }

    else {

    if ( g_BLIn fo. m_bBat t eryAut o) {

    BL_On( TRUE) ; }

    }

    }

    else if ( dw Result = = WAIT_T IMEOUT ) {

    BL_On( FALSE) ;

    }

    注册表的超时值决定了背光灯的工作时间。在注册表中进行如下超时值的设置:

    [ H KEY_CURRE NT_USER/ Cont rolPanel / Backlight ]

    "AC Timeout "= dword: 3c / / 十六进制, 十进制为60

    "Bat t eryT imeout "= dw ord: 1e / / 十六进制, 十进制为30



www.55dianzi.com

    3.2 创建支持电源管理的背光驱动

    要想获得电源管理的功能支持, 首先要使电源管理器可以识别背光驱动程序。为此, 背光驱动需要向设备管理器声明一个特殊的代表电源管理的设备类型的GUID.具体操作是在Active 注册表键的IClass 表项中增加一个GUID.在Platform.reg 文件中添加如下:

    "IClass "= "{ A32942B7- 920C- 486b - B0E6 - 92A702A99B35} "; Pow er- manageable generi c

    3.3 在背光驱动中添加对I/O 控制代码( IOCTL) 的支持

    在背光驱动被通知为支持电源管理的驱动后, 只需处理来自电源管理器的DeviceIoControl 调用。电源管理器使用如表2所示的IOCTL 代码与背光灯进行通信。

    表2 电源管理的IOCTL 操作码表2 电源管理的IOCTL 操作码

[1] [2]  下一页


本文关键字:电源  嵌入式  管理系统  操作系统  其他电源技术电源动力技术 - 其他电源技术