wince 电源管理(控制面板)

daigua04 2009-05-24 01:56:58
各位英雄:
小弟在电源管理方面仍然有几个小问题,请教!

1、定制内核时,已经添加了Power Management(FULL)组件,且SYSGEN_PM也设置为1,可是下载后发现控制面板中没有“电源”选项,但是有“display”。不知为何?

2、点击开始菜单中的“挂起”,系统不能进入挂起模式,串口信息显示,OEMPowerOff函数根本没有被调用(该函数的路径位于Src\Common\power\off.c),但是背光驱动的BKL_PowerDown函数肯定被调用了。另外,OEMPowerOff函数会调用BSPPowerOff函数,后者位于Src\Kernel\Oal\power.c文件。

3、将控制面板中display中的关闭背光时间设置为1min,可是背光始终是亮的,不会关闭!背光驱动中实现了IOCTL接口函数,注册表中也将其设定为支持电源管理模式!
...全文
600 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
andyhere 2010-08-24
  • 打赏
  • 举报
回复
哦???
你确定挂起后调用了GwesPowerOffSystem吗?
licsyhzs 2009-07-18
  • 打赏
  • 举报
回复

    2、点击开始菜单中的“挂起”,系统不能进入挂起模式,串口信息显示,OEMPowerOff函数根本没有被调用(该函数的路径位于Src\Common\power\off.c),但是背光驱动的BKL_PowerDown函数肯定被调用了。另外,OEMPowerOff函数会调用BSPPowerOff函数,后者位于Src\Kernel\Oal\power.c文件。

 
楼主,这个问题是怎么解决的? 
daigua04 2009-06-23
  • 打赏
  • 举报
回复
续18楼:

调试发现,XllpPmEnterSleep执行
str r0, [r5, #SleepState_Cp15_ACR_MMU] ; store MMU Control data
后,系统就无法唤醒进入EBOOT。打印信息表明此时r0=0x3a7f,如果屏蔽它或是将r0设置为其他值如0x1234,系统可以唤醒进入EBOOT,但是是当作硬件复位来处理,而不是唤醒复位。
daigua04 2009-06-22
  • 打赏
  • 举报
回复
总结出两个问题(PXA270+WINCE5.0):

1、加上上述将SDRAM置为自刷新的代码,发现挂起后PWR_EN电平依然是高,说明休眠失败;若是将其去掉,PWR_EN电平正常。但是不论是否屏蔽,唤醒后尽管PWR_EN电平变成高,但是系统没有任何反应,没有进入预订的EBOOT中。

2、XllpPmEnterSleep函数中,会保存p15协处理器相关寄存器。若是将这些代码也去掉,同时去掉SDRAM自刷新代码,发现按GPIO0时,系统可以进入EBOOT,不过不是唤醒复位,而是相当于硬件重启复位,系统重新下载NK.BIN,并启动。因此,没有达到休眠的目的。

恳请各位英雄帮忙分析下大概什么问题?会不会是数据保存的地址有问题?
y_man18 2009-06-22
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 daigua04 的回复:]
我在XllpPmEnterSleep 函数末尾去掉置sdram为自刷新的代码:
; Enter SDRAM into self refresh mode
ldr r1, =(0xA4300000) ; Get memory controller base address
ldr r2, [r1, #xlli_MDREFR_offset] ; Get reset state of MDREFR
orr r2, r2, #xlli_MDREFR_SLFRSH ; enable sdram self refresh
str r2, [r1, #xlli_MDREFR_offset] ; write updated MDREFR

测量…
[/Quote]
在进入睡眠的时候肯定是要将SDRAM设置为自刷新的,你的这个问题可能是没有进入到EBOOT。不知道是不是这么回事,呵呵
wangxin_801115 2009-06-22
  • 打赏
  • 举报
回复
关注
daigua04 2009-06-21
  • 打赏
  • 举报
回复
我在XllpPmEnterSleep 函数末尾去掉置sdram为自刷新的代码:
; Enter SDRAM into self refresh mode
ldr r1, =(0xA4300000) ; Get memory controller base address
ldr r2, [r1, #xlli_MDREFR_offset] ; Get reset state of MDREFR
orr r2, r2, #xlli_MDREFR_SLFRSH ; enable sdram self refresh
str r2, [r1, #xlli_MDREFR_offset] ; write updated MDREFR

测量PWR_EN和SYS_EN电平,休眠后PWR_EN为低;点击GPIO0后变成高电平,说明270休眠唤醒正常?但是点击GPIO0后,系统没有任何反应,按道理应该进入EBOOT代码,并判断复位原因...

1、要不要将SDRAM置为自刷新?

2、当PWR_EN电平在休眠和唤醒后正常时,为什么唤醒后没有任何反应!

3、休眠打印信息如下:

-OEMPowerOff In.
-InitSleepParams pSleepData= 0x81d68600.
-InitSleepParams pSlpParams pwrmode= 3.
+BSPPowerOffInit PWER=0x80000001.
-XllpPmEnterSleep Calling ParamSize=36.
-XllpPmSleepCLevelProcessing In (pSleepParam=0x81d68774).
-XllpPmSaveStdRegList In (pDataSaveArea=0x81d68600).
-XllpPmSaveStdRegList End.
-XllpPmSleepCLevelProcessing PSPR=0xa1d68600.
-XllpPmSlee2(后面就没有了,不知道为何?)
daigua04 2009-06-21
  • 打赏
  • 举报
回复
各位英雄,修改后的打印信息输出如下,没有产生异常,系统进入休眠,但是仍然无法唤醒,按GPIO0键,始终没有反应,不能进入EBOOT中。

Display Driver Initialization Complete
OEMIoControl: Unsupported Code 0x10100fc - device 0x0101 func 63
TouchRegistrySet++
Read Calibration :509,526 230,794 232,256 792,259 791,789
GetSystemPowerStstusEx2 failed with error 0x1f.
BKL: Received IOCTL_POWER_SET
OEMIoControl: Unsupported Code 0x10100f4 - device 0x0101 func 61
PAD_PowerDown In
CAN_PowerDown In
HcdPdd_PowerDown: enter.
BKL_PowerDown().
-OEMPowerOff In.
-InitSleepParams pSleepData= 0x81d68600.
-InitSleepParams pSlpParams pwrmode= 3.
+BSPPowerOffInit PWER=0x80000001.
-XllpPmEnterSleep Calling ParamSize=36.
-XllpPmSleepCLevelProcessing In (pSleepParam=0x81d68774).
-XllpPmSaveStdRegList In (pDataSaveArea=0x81d68600).
-XllpPmSaveStdRegList End.
-XllpPmSleepCLevelProcessing PSPR=0xa1d68600.
-XllpPmSleepCLevelProcessing SP=0xffffc798.

我的程序在XllpPmEnterSleep 汇编函数之前设置了唤醒源之类,在XllpPmEnterSleep 中保存了部分寄存器,包括p15寄存器,然后调用XllpPmSleepCLevelProcessing继续保存,再将SDRAM置为自刷新,最后进入休眠模式。
hzdysymbol 2009-06-01
  • 打赏
  • 举报
回复
这跟调没调SetSystemPowerState没有关系,只要系统调到了OEMPowerOff就可以了,CPU休眠的时候会停在这个函数里面
看你的Message觉得应该是在进休眠的时候出错了,或者是进休眠后自动醒来过程中出错了, 跟踪一下应该可以发现什么代码出了问题
这时候按GPIO0键是没有反应了
daigua04 2009-05-26
  • 打赏
  • 举报
回复
总结下,我在PXA270+WINCE5.0上移植电源管理模块!

1、定制内核时添加了PM(FULL)组件,但是控制面板中没有“电源”选项!

2、点击开始菜单中的“挂起”,LCD背光关闭,打印信息如下:

BKL_IOControl IOCTL code = 3280904
BKL: Received IOCTL_POWER_SET
OEMIoControl: Unsupported Code 0x10100f4 - device 0x0101 func 61
BKL_PowerDown().
-OEMPowerOff Begin.
-XllpPmEnterSleep Calling.
-XllpPmSleepCLevelProcessing In.
-XllpPmSaveStdRegList In.
-XllpPmSaveStdRegList End.
-XllpPmSleepCLevelProcessing End.
RaiseException: Thread=83cb9400 Proc=81d66320 'device.exe'
AKY=0000001d PC=03fa71d4(coredll.dll+0x000371d4) RA=8013d8e8(NK.EXE+0x0003d8e8) BVA=00000001 FSR=00000001
Exception 'RaiseException' Thread=83cb9400 AKY=0000001d PC=00000180 BVA=00000001
R0=81d68600 R1=81d680e0 R2=81d680f0 R3=ffffc808
R4=000000fb R5=00000064 R6=ffffc886 R7=ffffc74c
R8=ffffc764 R9=8013d8e8 R10=80106e08 R11=00000000
R12=00000000 SP=00000000 Lr=0000000a Psr=a00000df
Halting system

我设置了GPIO0为唤醒源,但触摸它为低电平时,系统没有任何反应,一直停留在这个状态,不论是触摸屏还是键盘,都没有反应了!

我的coredll.map文件部分如下(0x000371d4附近):

0001:00036058 DPA_Sort 10037058 f coredll_ALL:dynarray.obj
0001:00036098 DSA_Sort 10037098 f coredll_ALL:dynarray.obj
0001:000360e8 xxx_GetSystemPowerState 100370e8 f coredll_ALL:tpm.obj
0001:00036138 xxx_SetSystemPowerState 10037138 f coredll_ALL:tpm.obj
0001:000361e8 xxx_SetPowerRequirement 100371e8 f coredll_ALL:tpm.obj
0001:00036258 xxx_ReleasePowerRequirement 10037258 f coredll_ALL:tpm.obj
0001:00036298 xxx_RequestPowerNotifications 10037298 f coredll_ALL:tpm.obj
0001:000362ec xxx_StopPowerNotifications 100372ec f coredll_ALL:tpm.obj

我的代码中根本没有调用有关SetSystemPowerState函数,烦请各位英雄,帮忙分析下原因!不胜感激!
daigua04 2009-05-26
  • 打赏
  • 举报
回复
看看我11楼的问题啊...
daigua04 2009-05-25
  • 打赏
  • 举报
回复
现在可以运行了,但是还有一个很奇怪的问题,就是我的控制面板中没有“电源”,有“显示”,“鼠标”等。
我定制内核时肯定添加了Power Management(Full)组件,且工程目录下也有pm.dll文件。
会不会还要修改注册表或其他?
hzdysymbol 2009-05-25
  • 打赏
  • 举报
回复
你确定OEMPoweroff没有运行吗?
请在pm.dll中调用OEMPoweroff的地方加打印信息看看
先确认你查看的代码是不是最终编译生成出来的库文件,加的打印信息能否正常打印出来
daigua04 2009-05-25
  • 打赏
  • 举报
回复
PXA270+WINCE5.0,亿道公司的BSP,我自己定制的内核,E:\WINCE500\PBWorkspaces\PDA270\RelDir\XSBase270_ARMV4I_Release目录下有pm.dll。
shuiyan 2009-05-25
  • 打赏
  • 举报
回复
什么平台?什么bsp?有没有可用的标准的镜像?系统有pm.dll吗?
daigua04 2009-05-25
  • 打赏
  • 举报
回复
电源管理组件不就是一个Power Management(Full)吗?还有其它?我添加了,就是没有“电源”,会不会跟注册表也有关系呢?
gooogleman 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 daigua04 的回复:]
开始菜单中,点击“挂起”,调用的就应该是GwesPowerOffSystem,但是我的就没有进入OEMPowerOff函数,控制面板也不正常,唉
[/Quote]

我的会调用的,难道电源管理组件你没有选全?
wangxin_801115 2009-05-25
  • 打赏
  • 举报
回复
哦???
你确定挂起后调用了GwesPowerOffSystem吗?
daigua04 2009-05-24
  • 打赏
  • 举报
回复
开始菜单中,点击“挂起”,调用的就应该是GwesPowerOffSystem,但是我的就没有进入OEMPowerOff函数,控制面板也不正常,唉
wangxin_801115 2009-05-24
  • 打赏
  • 举报
回复
你的挂起是怎么实现的?
可以调用GwesPowerOffSystem()这个函数
系统会自动调用OEMPowerOff
加载更多回复(1)

19,504

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧