您现在所在的是:

微软嵌入式

回帖:0个,阅读:588 [上一页] [1] [下一页]
458
emtronix2010
文章数:91
年度积分:50
历史总积分:458
注册时间:2010/4/2
发站内信
发表于:2010/5/14 9:13:35
#0楼
9160L是一款与英创主力产品EM9160功能完全兼容,同时具有低功耗操作能力的高性能ARM9嵌入式主板产品。EM9160L主要应用是作为以电池供电、无人值守的野外工作环境为特色的设备主控单元。作为通常的通讯控制功能,EM9160L与EM9160的使用是完全一样的,客户针对EM9160开发的应用程序可不加修改的应用于EM9160L上。本文主要介绍EM9160L低功耗功能方面的相关应用。

     相对EM9160,EM9160L采用了三个方面的措施来改进其功耗指标:(1)采用高效的Step-Down DC-DC电源代替普通的线性稳压电源;(2)采用具有低电压内核的CPU单元;(3)对外部接口单元添加电源管理功能。这三种措施使EM9160L的功耗指标得到大幅度提高,具体功耗测试结果如下表所示:  


测试条件
EM9160
EM9160L

平均功耗
235mA / 5V
120mA / 5V

峰值功耗
320mA / 5V
160mA / 5V

空闲待机功耗
-
50mA / 5V


     作为野外监测应用,一般并不需要设备每时每刻都处于运行状态,而是全速工作一段时间后,设备转入空闲一段时间,然后再进入工作状态,即设备实际处于“工作-空闲”的周期模式中。在实际应用中,设备空闲的时间通常远长于设备工作的时间,如每分钟工作10秒、空闲50秒。正因为如此,才要求设备在空闲状态的功耗尽可能低,以延长电池的使用寿命,降低设备的维护费用。

     尽管WinCE操作系统对设备驱动提供了一套电源管理的机制,但这套机制的应用主要是基于带有标准Windows图形界面的环境,而EM9160L则是不带Windows图形接口的系统,因此CE的这套机制还不能非常方便地满足EM9160L在实际应用的需求。针对实际应用的特点,我们为 EM9160L应用程序专门提供了两个系统功能调用:

     //
     // 设置用户空闲标志:进入空闲待机状态
     //
     BOOL SetUserIdleFlag()
     {
           DWORD   dwUserIdleFlag;
           DWORD   dwInBufSize;
           DWORD   dwReturnBytes;
           BOOL   bRet;

           dwUserIdleFlag = 1;
           dwInBufSize = sizeof(dwUserIdleFlag);

           bRet = KernelIoControl(IOCTL_EM9X60_USER_IDLE_WRITE,
                                                (LPVOID)&dwUserIdleFlag,
                                                dwInBufSize,
                                                NULL,
                                                0,
                                                &dwReturnBytes);

           return bRet;
     }

     //
     // 清用户空闲标志:退出空闲待机状态
     //
     BOOL ClearUserIdleFlag()
     {
           DWORD   dwUserIdleFlag;
           DWORD   dwInBufSize;
           DWORD   dwReturnBytes;
           BOOL   bRet;

           dwUserIdleFlag = 0;
           dwInBufSize = sizeof(dwUserIdleFlag);

           bRet = KernelIoControl(IOCTL_EM9X60_USER_IDLE_WRITE,
                                                (LPVOID)&dwUserIdleFlag,
                                                dwInBufSize,
                                                NULL,
                                                0,
                                                &dwReturnBytes);

           return bRet;
     }

     应用程序可通过调用上述两个API实现进入或退出用户空闲状态,进入空闲状态后,用户程序可设定一定数量的Sleep(1000)循环,来确定系统处于空闲状态的时间。注意在空闲状态中,EM9160L的以太网接口被关闭。典型的进入空闲状态的应用程序流程如下:

     BOOL dEventFlag = FALSE;  //外部中断事件标志
     ….

     //关闭在空闲状态中不再使用的通讯接口,如串口等
     ….
     //进入空闲状态
     SetUserIdleFlag();

     //设置正常空闲状态50秒,每秒进行一次异常检查
     for (i1 = 0; i1 < 50; i1++)
     {
           Sleep(1000);    //也可用WaitForSingleObject阻塞等待外部事件
           if(dEventFlag)  
           break;
     }
     //退出空闲状态
     ClearUserIdleFlag();
     //打开应用所需的通讯接口,如串口等
     ….

     上述流程还支持空闲状态的中途退出,这是因为系统在空闲状态下仍然可以正常响应外部硬件中断。一种典型的空闲状态中途退出应用是保持EM9160L的IRQ1中断线程,把GPRS模块的振铃信号RI#作为IRQ1中断输入信号。这样应用控制中心可在任意时间,通过拨号来唤醒基于EM9160L的野外设备,使其立即进入工作状态。

     由于以太网接口单元通常都是嵌入式系统功耗最大的单元之一,因此在EM9160L的空闲状态中,其以太网接口单元被强制关闭。所以EM9160L不支持应用程序通过以太网中途退出空闲状态。当系统中空闲状态退出后,以太网需要4 – 6秒才能恢复支持工作状态,这包括了网络协商时间。

     在进入空闲状态前关闭不需要的通讯端口,应不仅仅理解为关闭通讯端口,实际上任何耗电的单元,应用程序都应当把它们设置在省电的状态。如正常运行时常亮的LED,应设置成关闭或闪烁状态。

     注意:50mA的空闲电流,是在EM9160L不带任何负载的情况下,进入空闲状态后测试的。

[查看全文]

[关于英创]

[更多文章]

[技术论坛]

[本文PDF格式下载]


关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

46.8003