中国自动化学会专家咨询工作委员会指定宣传媒体
免费注册 登录 广告服务 | 客服中心
您现在所在的是:

嵌入式系统

抖音 德嘉 泓格论坛 FLIR红外热像论坛
工控论坛首页 嵌入式系统 → 浏览主题: Colibri模块在WINCE5.0/6.0环境下的挂起与唤醒
发表新帖 回复该主题
回帖:0个,阅读:825 [上一页] [1] [下一页]
* 帖子主题:

Colibri模块在WINCE5.0/6.0环境下的挂起与唤醒

分享到
785
ToradexAG
文章数:64
年度积分:50
历史总积分:785
注册时间:2008/11/25
发站内信
发表于:2010/5/13 17:50:35
#0楼
一、为什么要进入suspend mode.
   为了使嵌入式系统尽可能的省电,特别是对于电池供电设备,将能够提供比较长的工作时间。举一个例子,colibri全系列模块在挂起状态下的功耗是3.3v@2ma。
二、wince如何进入挂起模式(suspend mode)与唤醒
通常有3种方法,
1)  点击wince的开始—挂起
2)  使用电源计划,设定挂起的时间
3)  使用api函数
举例:
#include pm.h
setsystempowerstate( null, power_state_suspend, 0 );

 
三、wince 挂起与唤醒时,发生了什么?
一旦操作系统被要求挂起,它就启动了关闭该设备的子系统进程。
1)  首先,系统任务栏(task bar)得到通知,该系统即将中止。这是唯一得到提示的应用程序。这是意味着你的应用程序不能得到通知。
2)  应用程序消息队列关闭。这意味着应用程序将无法接收到任何消息。
3)  系统通知设备驱动的电源管理部分将硬件的电源转换到挂起状态,大部分的硬件将被关闭,系统只保留极少数的硬件电源。
4)  内核停止线程调度,只有挂起线程保留运行。
5)  内核通过设备驱动管理程序再次确认设备是否关闭电源。
6)  该内核将系统处于待唤醒状态,有一些唤醒源可以激活系统, 例如特定的gpio、触摸屏或以太网、实时时钟的一个计划中的事件。
7)  内核将ram置于低功耗状态,保持里面的数据,
8)  最后,内核处于一个低功率状态的cpu

使用唤醒源来唤醒系统:
1)    这其实是一个cpu reset事件,bootloader 引导程序来运行。将转到程序最初进入挂起前的状态。
2)    内核将ram上电以便能够使用。
3)    内核开始控制设备驱动,使设备上电。
4)    内核开始运行线程了。
5)    消息队列开始运行。
6)    一个消息被广播到运行的应用程序中,使程序知道内核已经脱离暂停。

图

四、colibri计算机模块进入suspend和wakeup的具体设置
1)  wakeup 源,以下均可以设置为唤醒源
[URL=http://wiki.toradex.com/index.php/touch_screen]
touch screen
[/URL]
触摸屏
internal
[URL=http://wiki.toradex.com/index.php/rtc]
rtc
[/URL]
内部时钟
sodimm pin 43 rising and falling edge
sodimm pin 63 rising and falling edge (ps2 mouse)ps2鼠标
sodimm pin 69 rising and falling edge (ps2 keyboard) ps2键盘
   colibri pxa 270 [/b]
gpio:
    以下每一个:      0-15, 16-17, 34, 35, 39, 83, 90, 91, 93-102, 116
    两者之一:  31 or 113
    仅其中的一个:  38 or 36 or 40 or 53
   colibri pxa 320 [/b]
sodimm:
   以下每一个:
019,021,023,025,027,029,030,031,032,033,034,035,036,037,038,043,045,049,051,053,054,
055,057,061,063,065,066,069,073,075,077,081,085,086,088,090,092,093,095,096,100,101,
102,103,104,106,107,118,120,122,124,127,129,131,134,135,136,137,138,140,142,144,146,
150,152,154,156,158,160,162,164,166,168,170,172,174,176,180,190,192,194,196

  043: this pin is always sensitive on both edges!
  064,099,133: these pins could be used as wakeup under special circumstances but we
            advise to not use them!
extconn扩展接口:
 以下每一个:
 01,02,03,05,06,07,08,09,10,11,12,13,14,15,16,17,18
 colibri pxa 300/310 [/b]
sodimm:
 pxa 300/10以下每一个:
019,021,023,025,027,028,029,030,031,032,033,034,035,036,037,038,045,047,049,050,051,
052,053,054,055,057,059,061,063,064,065,066,069,074,081,085,086,088,090,092,093,095,
099,100,102,104,105,106,107,118,120,122,124,127,129,131,133,135,136,137,138,140,142,
144,146,152,154,156,158,160,174,176,184,190,192,194,196

  043: this pin is always sensitive on both edges!
   050,064,066,074,099,133: these pins could be used as wakeup under special
                        circumstances but we advise to not use them!

 仅 pxa300 :
  004,006,014,016,018,020,073,075,077,150,162,164,166,168,170,172,180

 仅 pxa310 :
 178: this pin could be used as wakeup under special circumstances but we advise
    to not use it!
extconn扩展接口:
pxa300/310以下每一个:
01,02,03,05,06,07,08,09,10,11,12,13,14,15,16,17,18

仅 pxa310 :
04: this pin could be used as wakeup under special circumstances but we advise
   to not use it!


2)  注册表设置
[/b]
sodmimm [/b]管脚作为唤醒源[/b]
语法:          sodimm+pin+edge+[edge]
触发沿:                         r: raising edge, f: falling edge
举例:
[hklm\system\pm\suspend]
wakeupsources = sodimm69r,sodimm30rf
[/b]
extension connector 扩展接口(x3)
[/b]作为唤醒源: [/b][/b]
语法:          extconn+pin+edge+[edge]
触发沿:                         r: raising edge, f: falling edge
举例:
[hklm\system\pm\suspend]
wakeupsources = extconn2r
[/b]
gpio (pxa270 only) [/b]作为唤醒源[/b][/b]
语法:          gpio+pin+edge+[edge]
触发沿:                         r: raising edge, f: falling edge
举例:
[hklm\system\pm\suspend]
wakeupsources = gpio0rf,gpio14rf
其它唤醒源 [/b][/b]
rtc: 内部时钟.
handle hnotif;
 ce_user_notification un={0};
 systemtime st={2010,4,3,21, 6,23,0,0}; //year,month,dayofweek,day, hour,minute,second,millisecond
                                        //wake the system on april 21, 2010, 06:23:00

 hnotif = cesetusernotification(null, l, &st, &un);
touch:
touch screen
. in this case the system will wake up if you touch the display.
example:
[hklm\system\pm\suspend]
wakeupsources = rtc,touch

----------------------------------------------
此篇文章从博客转发
原文地址: Http://blog.gkong.com/more.asp?id=115688&Name=toradexag
韬睿(上海)计算机科技有限公司
Toradex (China) Ltd.
WANG LI
工控学堂推荐视频:

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

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

46.8003