9758|20

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

wince 电源管理(控制面板) [复制链接]

各位英雄:
     小弟在电源管理方面仍然有几个小问题,请教!

     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接口函数,注册表中也将其设定为支持电源管理模式!

最新回复

? ? 2、点击开始菜单中的“挂起”,系统不能进入挂起模式,串口信息显示,OEMPowerOff函数根本没有被调用(该函数的路径位于Src\Common\power\off.c),但是背光驱动的BKL_PowerDown函数肯定被调用了。另外,OEMPowerOff函数会调用BSPPowerOff函数,后者位于Src\Kernel\Oal\power.c文件。 ? 楼主,这个问题是怎么解决的??  详情 回复 发表于 2009-7-18 15:57
点赞 关注

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
自己支持一下...
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你的挂起是怎么实现的?
可以调用GwesPowerOffSystem()这个函数
系统会自动调用OEMPowerOff
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 
开始菜单中,点击“挂起”,调用的就应该是GwesPowerOffSystem,但是我的就没有进入OEMPowerOff函数,控制面板也不正常,唉
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

5
 
哦???
你确定挂起后调用了GwesPowerOffSystem吗?
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 3 楼 daigua04 的回复:
开始菜单中,点击“挂起”,调用的就应该是GwesPowerOffSystem,但是我的就没有进入OEMPowerOff函数,控制面板也不正常,唉


我的会调用的,难道电源管理组件你没有选全?
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
电源管理组件不就是一个Power Management(Full)吗?还有其它?我添加了,就是没有“电源”,会不会跟注册表也有关系呢?
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

8
 
什么平台?什么bsp?有没有可用的标准的镜像?系统有pm.dll吗?
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

9
 
PXA270+WINCE5.0,亿道公司的BSP,我自己定制的内核,E:\WINCE500\PBWorkspaces\PDA270\RelDir\XSBase270_ARMV4I_Release目录下有pm.dll。
 
 
 

回复

95

帖子

0

TA的资源

一粒金砂(初级)

10
 
你确定OEMPoweroff没有运行吗?
请在pm.dll中调用OEMPoweroff的地方加打印信息看看
先确认你查看的代码是不是最终编译生成出来的库文件,加的打印信息能否正常打印出来
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

11
 
现在可以运行了,但是还有一个很奇怪的问题,就是我的控制面板中没有“电源”,有“显示”,“鼠标”等。
我定制内核时肯定添加了Power Management(Full)组件,且工程目录下也有pm.dll文件。
会不会还要修改注册表或其他?
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

12
 
总结下,我在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函数,烦请各位英雄,帮忙分析下原因!不胜感激!
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

13
 
看看我11楼的问题啊...
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

14
 
这跟调没调SetSystemPowerState没有关系,只要系统调到了OEMPowerOff就可以了,CPU休眠的时候会停在这个函数里面
看你的Message觉得应该是在进休眠的时候出错了,或者是进休眠后自动醒来过程中出错了, 跟踪一下应该可以发现什么代码出了问题
这时候按GPIO0键是没有反应了
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

15
 
各位英雄,修改后的打印信息输出如下,没有产生异常,系统进入休眠,但是仍然无法唤醒,按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置为自刷新,最后进入休眠模式。
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(中级)

16
 
我在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?(后面就没有了,不知道为何?)
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

17
 
关注
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

18
 
引用 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

测量…

在进入睡眠的时候肯定是要将SDRAM设置为自刷新的,你的这个问题可能是没有进入到EBOOT。不知道是不是这么回事,呵呵
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

19
 
总结出两个问题(PXA270+WINCE5.0):

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

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

恳请各位英雄帮忙分析下大概什么问题?会不会是数据保存的地址有问题?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

20
 
续18楼:

调试发现,XllpPmEnterSleep执行
str     r0, [r5, #SleepState_Cp15_ACR_MMU]  ; store MMU Control data
后,系统就无法唤醒进入EBOOT。打印信息表明此时r0=0x3a7f,如果屏蔽它或是将r0设置为其他值如0x1234,系统可以唤醒进入EBOOT,但是是当作硬件复位来处理,而不是唤醒复位。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表