为何配置了EINT11仍然无法唤醒WINCE6?

Jamescow 2012-12-04 11:30:54
在POWERBUTTON驱动里设置了EINT11为POWERBUTTON。
开机 后,给EINT11接地信号,机子能进入挂起状态。
查看打印信息提示:
MFC IOCTL POWER SET NEWDX=4
OEMPowerOff
然后再给EINT11接地,没任何反应。无论给哪个EINT都没反应了 。只能关掉电源重启才能重启进入系统。

请问还需要配置什么地方?
...全文
311 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jamescow 2012-12-18
  • 打赏
  • 举报
回复
引用 19 楼 puyoupuyou 的回复:
\SRC\OAL\OALLIB\power.c中的BSPPowerOff和BSPPowerOn这俩函数是怎么设置休眠状态的,他们都是在off.c的OEMPowerOff中被调用的。 BSPPowerOff中需要配置休眠时的唤醒源或其他外设,IO等, BSPPowerOn需要判断唤醒源,中断和IO。 其他流驱动的休眠唤醒需要在XXX_PowerUp和XXX_Power……
照您说的改了,现在能唤醒到下面一行就卡死了 在CHECKSUM GRANTED里的 mcr p15, 0, r2, c1, c0, 0 ; Restore System Control Register (MMU Control) 到这一步再也过不去了。请问是什么问题
Jamescow 2012-12-17
  • 打赏
  • 举报
回复
我这个休眠时并没走到\SRC\OAL\OALLIB\power.c中 通过串口跟踪,它休眠时去到了C:\WINCE600\PLATFORM\SMDK6410\SRC\DRIVERS\MFC\mfc_dd_if_layer\wince\src中的MFCDRIVER.CPP里的MFC_IOControl里 请问怎调回到\SRC\OAL\OALLIB\power.c中?
Jamescow 2012-12-16
  • 打赏
  • 举报
回复
引用 16 楼 lqxandroid2012 的回复:
BTW 点灯其实就是控制一个GPIO 高电平或者低电平。 用万用表,示波器,或者一个小led 提示 设置GPIO高/低电平 然后接着来个 B . 这个汇编死循环就会一直在这里不出来,然后上面的GPIO 电平就不会变了。 是吧。
点灯测试了,不过好像和冷启动一样,它能直接到MAIN() 然后到了 ((PFN_IMAGE_LAUNCH)(LOAD_ADDRESS_PHYSICAL))();这开始,就没动静了。后面的LED也不亮了。 但看它走的流程和正常启动一样,只是到这一步就过不去了。
puyoupuyou90 2012-12-16
  • 打赏
  • 举报
回复
\SRC\OAL\OALLIB\power.c中的BSPPowerOff和BSPPowerOn这俩函数是怎么设置休眠状态的,他们都是在off.c的OEMPowerOff中被调用的。 BSPPowerOff中需要配置休眠时的唤醒源或其他外设,IO等, BSPPowerOn需要判断唤醒源,中断和IO。 其他流驱动的休眠唤醒需要在XXX_PowerUp和XXX_PowerDown中完成。
Jamescow 2012-12-06
  • 打赏
  • 举报
回复
引用 16 楼 lqxandroid2012 的回复:
BTW 点灯其实就是控制一个GPIO 高电平或者低电平。 用万用表,示波器,或者一个小led 提示 设置GPIO高/低电平 然后接着来个 B . 这个汇编死循环就会一直在这里不出来,然后上面的GPIO 电平就不会变了。 是吧。
这个我知道,问题是,还没能到这一步啊大哥。 都还没唤醒,又如何让GPIO高电平或低电平呢?
简单并快乐着 2012-12-06
  • 打赏
  • 举报
回复
BTW 点灯其实就是控制一个GPIO 高电平或者低电平。 用万用表,示波器,或者一个小led 提示 设置GPIO高/低电平 然后接着来个 B . 这个汇编死循环就会一直在这里不出来,然后上面的GPIO 电平就不会变了。 是吧。
简单并快乐着 2012-12-06
  • 打赏
  • 举报
回复
BringUp_WinCE_from_Reset ; Normal Mode Booting 这个就是冷启动了,你多看有跳转的地方啊。一个个查。 你在bootloader最开始的地方点,以前我记得我是这么做的。两年前搞过一下子休眠唤醒的。
Jamescow 2012-12-06
  • 打赏
  • 举报
回复
引用 13 楼 brantyou 的回复:
引用 10 楼 Jamescow 的回复:上面说错了 不知是否设置有问题,我的OFF.C在下面这个目录 C:\WINCE600\PLATFORM\COMMON\SRC\SOC\S3C6410_SEC_V1\OAL\POWER 是否得拷贝这个OFF.C到C:\WINCE600\PLATFORM\SMDK6410\SRC\OAL\里才行? 因为我看C:\WINCE60……
这个目录C:\WINCE600\PLATFORM\COMMON\SRC\SOC\S3C6410_SEC_V1\OAL这一层编译后,在RELEASE目录下没生成任何文件。 它只在C:\WINCE600\PLATFORM\COMMON\lib\ARMV4I\retail目录生成了oal_power_s3c6410.lib文件 会在最后编译时给用上吗?我试了MAKE RUNNING IMAGE或CLEAN SYSGEN也无法让EINT11唤醒,串口也没打印任何信息。 也试了直接把OFF.C拷贝到C:\WINCE600\PLATFORM\SMDK6410\SRC\OAL\OALLIB下,也没用。 我觉得问题会不会是startup.s文件上?按理来说应该最先启动运行这个吧?是否应该在这个文件里配置EINT11? 我看这个文件有3个地方都有: C:\WINCE600\PLATFORM\SMDK6410\SRC\BOOTLOADER\nbootRAM128 C:\WINCE600\PLATFORM\SMDK6410\SRC\BOOTLOADER\nboot_main C:\WINCE600\PLATFORM\SMDK6410\SRC\BOOTLOADER\nbootRAM256 这3个文件大体相同,但只有nboot_main的那个有下面的代码: ;------------------------------------ ; Power Management Routine ; (WakeUp Processing) ;------------------------------------ [ {TRUE} ldr r0, =RST_STAT ldr r1, [r0] and r1, r1, #0x3F cmp r1, #0x8 bne BringUp_WinCE_from_Reset ; Normal Mode Booting ;------------------------------- ; Calculate CheckSum of Sleep Data ldr r3, =IMAGE_SLEEP_DATA_PA_START ; Base of Sleep Data Area ldr r2, =0x0 ; CheckSum is in r2 ldr r0, =(SLEEPDATA_SIZE-1) ; Size of Sleep Data Area (in words) ReCheckSum_Loop ldr r1, [r3], #4 and r1, r1, #0x1 mov r1, r1, LSL #31 orr r1, r1, r1, LSR #1 add r2, r2, r1 ; CheckSum is in r2 subs r0, r0, #1 bne ReCheckSum_Loop ldr r0, =INFORM1 ldr r1, [r0] cmp r1, r2 ; Compare CheckSum Recalculated and Value in DRAM bne CheckSum_Corrupted 不太懂汇编。从英文的意思像是唤醒的流程。如果不是,请问是哪部分设置EINT11?还是其他地方设置的?
一介布衣萧萧 2012-12-06
  • 打赏
  • 举报
回复
引用 10 楼 Jamescow 的回复:
上面说错了 不知是否设置有问题,我的OFF.C在下面这个目录 C:\WINCE600\PLATFORM\COMMON\SRC\SOC\S3C6410_SEC_V1\OAL\POWER 是否得拷贝这个OFF.C到C:\WINCE600\PLATFORM\SMDK6410\SRC\OAL\里才行? 因为我看C:\WINCE600\PLATFORM\SMDK6410\S……
off.c文件就是在那个目录下面,不用拷贝到其他地方的
Jamescow 2012-12-06
  • 打赏
  • 举报
回复
引用 11 楼 lqxandroid2012 的回复:
记得判断是否唤醒有效,要从bootloader开始的,读一个状态寄存器,然后判断是正常启动,还是看门狗热启动,还是唤醒的。 楼主去bootloader点灯,看是否到了bootloader了吧。
机子都没唤醒,如何点灯?如果能唤醒那肯定是到了BOOT LOADER了吧?
简单并快乐着 2012-12-06
  • 打赏
  • 举报
回复
记得判断是否唤醒有效,要从bootloader开始的,读一个状态寄存器,然后判断是正常启动,还是看门狗热启动,还是唤醒的。 楼主去bootloader点灯,看是否到了bootloader了吧。
Jamescow 2012-12-05
  • 打赏
  • 举报
回复
引用 3 楼 jungouhaha 的回复:
看打印应该是进入睡眠状态了,是不是睡眠状态后把EINT11这个GPIO配置成其他的,比如输出口,导致后续不能响应中断进入唤醒状态。可以查看一下
这个口没用过。
一介布衣萧萧 2012-12-05
  • 打赏
  • 举报
回复
引用 3 楼 jungouhaha 的回复:
看打印应该是进入睡眠状态了,是不是睡眠状态后把EINT11这个GPIO配置成其他的,比如输出口,导致后续不能响应中断进入唤醒状态。可以查看一下
这个EINT11你要在休眠的时候配置成外部中断脚,然后配置成唤醒源,使能这个中断,休眠后,触发这个中断就OK了
Jamescow 2012-12-05
  • 打赏
  • 举报
回复
上面说错了 不知是否设置有问题,我的OFF.C在下面这个目录 C:\WINCE600\PLATFORM\COMMON\SRC\SOC\S3C6410_SEC_V1\OAL\POWER 是否得拷贝这个OFF.C到C:\WINCE600\PLATFORM\SMDK6410\SRC\OAL\里才行? 因为我看C:\WINCE600\PLATFORM\SMDK6410\SRC\OAL\里都没这个off.c C:\WINCE600\PLATFORM\SMDK6410\SRC\OAL\OALLIB里有POWER.C
Jamescow 2012-12-05
  • 打赏
  • 举报
回复
引用 8 楼 brantyou 的回复:
引用 7 楼 Jamescow 的回复:引用 5 楼 brantyou 的回复:引用 3 楼 jungouhaha 的回复:看打印应该是进入睡眠状态了,是不是睡眠状态后把EINT11这个GPIO配置成其他的,比如输出口,导致后续不能响应中断进入唤醒状态。可以查看一下 这个EINT11你要在休眠的时候配置成外部中断脚,然后配置成唤醒源,使能这个中断,休眠后,触发这个中……
不知是否设置有问题,我的OFF.C在下面这个目录 C:\WINCE600\PLATFORM\COMMON\SRC\SOC\S3C6410_SEC_V1\OAL\POWER 是否得拷贝这个OFF.C到C:\WINCE600\PLATFORM\SMDK6410\SRC\OAL\POWER里才行? 因为我看C:\WINCE600\PLATFORM\SMDK6410\SRC\OAL\POWER里都没这个off.c
一介布衣萧萧 2012-12-05
  • 打赏
  • 举报
回复
引用 7 楼 Jamescow 的回复:
引用 5 楼 brantyou 的回复:引用 3 楼 jungouhaha 的回复:看打印应该是进入睡眠状态了,是不是睡眠状态后把EINT11这个GPIO配置成其他的,比如输出口,导致后续不能响应中断进入唤醒状态。可以查看一下 这个EINT11你要在休眠的时候配置成外部中断脚,然后配置成唤醒源,使能这个中断,休眠后,触发这个中断就OK了 谢谢前辈指点,有几个疑……
off.c修改之后,编译一下,然后把C:\WINCE600\PLATFORM\SMDK6410\SRC\OAL这个oal也编译一下,才会最终生成对应的lib库文件,这两个都编译之后,生成的NK就可以用了。编译的先后顺序不要搞错了
Jamescow 2012-12-05
  • 打赏
  • 举报
回复
引用 5 楼 brantyou 的回复:
引用 3 楼 jungouhaha 的回复:看打印应该是进入睡眠状态了,是不是睡眠状态后把EINT11这个GPIO配置成其他的,比如输出口,导致后续不能响应中断进入唤醒状态。可以查看一下 这个EINT11你要在休眠的时候配置成外部中断脚,然后配置成唤醒源,使能这个中断,休眠后,触发这个中断就OK了
谢谢前辈指点,有几个疑惑的地方: 1. 上面2楼的我的回复里static void S3C6410_WakeUpSource_Detect(void)里的那段代码是否已经设置了休眠时EINT11中断了?还是说还要其他地方设置? 2. 上面2楼的我的回复里static void S3C6410_WakeUpSource_Configure(void)里的那段代码是否已经设置了唤醒源为EINT11了?还是说还要其他地方设置? 还需要哪里做才可以? 刚接触WINCE6不是很熟悉。看OFF.C里有很多默认代码了。编译后生成了oal_power_s3c6410.lib文件,没DLL文件。是否LIB文件即可?但MAKE RUNNING TIME IMAGE后,烧NK进机子 ,WINDOWS下没看到生成的oal_power_s3c6410.lib。 是否哪还缺什么步骤? 谢谢指教!
jungouhaha 2012-12-05
  • 打赏
  • 举报
回复
引用 4 楼 Jamescow 的回复:
引用 3 楼 jungouhaha 的回复:看打印应该是进入睡眠状态了,是不是睡眠状态后把EINT11这个GPIO配置成其他的,比如输出口,导致后续不能响应中断进入唤醒状态。可以查看一下 这个口没用过。
看代码应该是三星的处理器,这个睡眠唤醒应该比较好做的,仔细查一下睡眠下的GPIO配置吧
一介布衣萧萧 2012-12-04
  • 打赏
  • 举报
回复
无法唤醒??你没有配置成唤醒源吧 在C:\WINCE600\PLATFORM\common\src\soc\S3C6410_SEC_V1\oal\power\off.c中需要把你这个EINT11配置成唤醒源才行
jungouhaha 2012-12-04
  • 打赏
  • 举报
回复
看打印应该是进入睡眠状态了,是不是睡眠状态后把EINT11这个GPIO配置成其他的,比如输出口,导致后续不能响应中断进入唤醒状态。可以查看一下
加载更多回复(1)

19,500

社区成员

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

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