关于wince5.0+2440 睡眠唤醒问题

时间:2022-07-15 17:54:45
如题,我的BSP能够睡眠。但是唤醒不了。我想通过rtc唤醒,做了如下设置:
ldr     r0,=vRTCBASE                 ;;;RTC alarm
ldr     r1,=0x41
str     r1,[r0,#oRTCALM]
  
    ldr     r1,=0x10                  ;;10s唤醒
str     r1,[r0,#oALMSEC]  
 led test,led灯由GPF5控制。
在LEAF_ENTRY OALCPUPowerOff 加如下代码

ldr     r7, =vGPIOBASE    ;;;qzw led test
ldr     r8, =0x550a
str     r8, [r7, #oGPFCON] 

ldr     r8,=0x0
    str     r8,[r7,#oGPFDAT]
挂起后就是led不亮,这说明睡眠没进入OALCPUPowerOff,但是为什么还是能正常睡眠?
睡眠时测了功耗。电流140多mA。。。。睡眠状态下不是才5mA,同时测PWR_EN是低电平。这是为何?

24 个解决方案

#1


怎么没人来啊。。。。自己顶下。。。。。

#2


帮顶

#3


三星的芯片RTC不能做唤醒源的。。。。只能通过外部中断

#4


引用 3 楼 seven_zhangxw 的回复:
三星的芯片RTC不能做唤醒源的。。。。只能通过外部中断

怎么会这样啊。手册上怎么还写很多介绍怎么用的。。。。。。为什么不能用RTC唤醒

#5


http://groups.google.com/group/gooogleman/web/windows-ce-2440?hl=zh-CN
看看这个,

#6


别听他瞎说.
是中断就可以唤醒(注意优先级).

睡眠的时候140毫安,我对你的睡眠质量持保留态度.

#7


引用 5 楼 gooogleman 的回复:
http://groups.google.com/group/gooogleman/web/windows-ce-2440?hl=zh-CN
看看这个,

gooogleman,看到网上你的一篇“ 关于2440 休眠唤醒的实现疑惑”http://topic.csdn.net/u/20090330/13/34EC9ED9-660A-412E-932B-ABF789E9A26B.html
我的bootloader也是用ADS的,可以实现唤醒的吗?怎么修改?

#8


引用 6 楼 gelu1040 的回复:
别听他瞎说.
是中断就可以唤醒(注意优先级).

睡眠的时候140毫安,我对你的睡眠质量持保留态度.

还有哪些外设电源还没关掉吗?RTC的中断是最低级吧。。。

#9


2440的RTC是可以用作sleep wake-up。

你怎么确定你有进入sleep?PWR_EN有拉低吗?如果外部设备不是很耗电的话,CPU sleep才几个mA而已。

#10


引用 9 楼 skynet000 的回复:
2440的RTC是可以用作sleep wake-up。

你怎么确定你有进入sleep?PWR_EN有拉低吗?如果外部设备不是很耗电的话,CPU sleep才几个mA而已。

PWR_EN已经是低电平。外设没有啥东西。就只几个usb口和串口。这是何故?

#11


引用 10 楼 wen_hua 的回复:
引用 9 楼 skynet000 的回复:
2440的RTC是可以用作sleep wake-up。

你怎么确定你有进入sleep?PWR_EN有拉低吗?如果外部设备不是很耗电的话,CPU sleep才几个mA而已。

PWR_EN已经是低电平。外设没有啥东西。就只几个usb口和串口。这是何故?


你的PWR_EN是CPU自己拉低的吗?还是你用外部GPIO强制拉低的啊。
请问有进入OEMPowerOff的OALCPUPowerOff();这句??在它前面打印有一下看看。

#12


引用 11 楼 skynet000 的回复:
引用 10 楼 wen_hua 的回复:
引用 9 楼 skynet000 的回复:
2440的RTC是可以用作sleep wake-up。

你怎么确定你有进入sleep?PWR_EN有拉低吗?如果外部设备不是很耗电的话,CPU sleep才几个mA而已。

PWR_EN已经是低电平。外设没有啥东西。就只几个usb口和串口。这是何故?


你的PWR_EN是CPU自己拉低的吗?还是你用外部GPIO强制拉低的啊。
请问有进入OEMPowerOff的OALCPUPowerOff();这句??在它前面打印有一下看看。

pwr_en是cpu自己拉低。进入有到OALCPUPowerOff();

#13


贴出我ADS的bootloader的wakeup代码:
WAKEUP_SLEEP
;Release SCLKn after wake-up from the SLEEP mode.
ldr r1,=MISCCR
ldr r0,[r1]
bic r0,r0,#(7<<17)  ;SCLK0:0->SCLK, SCLK1:0->SCLK, SCKE:0->=SCKE.
str r0,[r1]

;Set memory control registers
  ldr r0,=SMRDATA ;be careful!, hzh
ldr r1,=BWSCON ;BWSCON Address
add r2, r0, #52 ;End address of SMRDATA
0
ldr r3, [r0], #4
str r3, [r1], #4
cmp r2, r0
bne %B0

mov r1,#256
0 subs r1,r1,#1 ;1) wait until the SelfRefresh is released.
bne %B0

ldr r1,=GSTATUS3  ;GSTATUS3 has the start address just after SLEEP wake-up
ldr r0,[r1]

mov pc,r0

#14


PWR_EN有拉低,那应该是进入sleep了。但是你的电流这么大,是不是哪里短路了。或者是CPU已经wake-up了。只是卡在启动的地方了??
你有没有试过其他唤醒方式??可以先试试以前有效的代码。看看进入sleep会不会有这么大的电流。

要从sleep唤醒,要注意在进入power off的sleep之前要把相应的RTC的中断打开、唤醒源打开。然后就是要保证main 电压正确。

#15


引用 14 楼 skynet000 的回复:
PWR_EN有拉低,那应该是进入sleep了。但是你的电流这么大,是不是哪里短路了。或者是CPU已经wake-up了。只是卡在启动的地方了??
你有没有试过其他唤醒方式??可以先试试以前有效的代码。看看进入sleep会不会有这么大的电流。

要从sleep唤醒,要注意在进入power off的sleep之前要把相应的RTC的中断打开、唤醒源打开。然后就是要保证main 电压正确。

我这边的代码跟网上的差不多。就是不知道哪有问题。skynet000兄能否提供点相关代码。。。

#16


继续顶上去。。。忙活了几天终于有点效果。。现在可以唤醒。不过还是有问题我,唤醒后屏幕出现一小行白屏,USB没电源。刚唤醒屏幕没触摸。过10s左右屏幕变暗。有触摸。
出现这种情况是睡眠先没做好保存吗?还是唤醒后有些要相应设置下。比如初始化。。。具体要设置哪些呢?求解。。。。。。

#17


唤醒后是不是要重新加载驱动。。。。具体流程是怎么样的,网上看了很多好像没那么详细。。。。

#18


mark

#19


继续求解。。。。。。。

#20


电源管理每个驱动都应该有相应的管理程序。比如流驱动的poweron()!

#21


VOID BSPPowerOn()
{
    volatile S3C2440A_IOPORT_REG *pIOPort = (S3C2440A_IOPORT_REG*)OALPAtoVA(S3C2440A_BASE_REG_PA_IOPORT, FALSE);
    volatile S3C2440A_LCD_REG *pLCD = (S3C2440A_LCD_REG*)OALPAtoVA(S3C2440A_BASE_REG_PA_LCD, FALSE);

OEMInitDebugSerial();

InitTimer();
//lqm@ucdragon.net 2007-06-25
//    pIOPort->EXTINT0 = 0x22222222;    // EINT[7:0]
//    pIOPort->EXTINT1 = 0x22222222;    // EINT[15:8]
//    pIOPort->EXTINT2 = 0x22222222;    // EINT[23:16]

pIOPort->GSTATUS2 = pIOPort->GSTATUS2;

    pIOPort->MISCCR &= ~(1<<12); //USB port0 = normal mode
    pIOPort->MISCCR &= ~(1<<13); //USB port1 = normal mode

    /* LCD Controller Enable               */
    SETPORT32(&pIOPort->GPGDAT, 1 << 4);


}
这是我BSPPowerOn里面的代码。感觉好少。。。问下这有没有问题?

#22


终于有点进展了。。。解决了一段白屏问题。可是出现了唤醒后USB口没有供电,是哪些寄存器没恢复吗?

#23


支持一下,应该是微软没有提供完整解决方案。

#24


引用 23 楼 evccode 的回复:
支持一下,应该是微软没有提供完整解决方案。

 没错。我用的是三星的2440BSP,里面的代码只是针对开发板做的。但是要真正的做到全部唤醒还要做些什么?CSDN的高手们好像都贼忙啊。。。。苦苦等待中。。。。。。。。。

#1


怎么没人来啊。。。。自己顶下。。。。。

#2


帮顶

#3


三星的芯片RTC不能做唤醒源的。。。。只能通过外部中断

#4


引用 3 楼 seven_zhangxw 的回复:
三星的芯片RTC不能做唤醒源的。。。。只能通过外部中断

怎么会这样啊。手册上怎么还写很多介绍怎么用的。。。。。。为什么不能用RTC唤醒

#5


http://groups.google.com/group/gooogleman/web/windows-ce-2440?hl=zh-CN
看看这个,

#6


别听他瞎说.
是中断就可以唤醒(注意优先级).

睡眠的时候140毫安,我对你的睡眠质量持保留态度.

#7


引用 5 楼 gooogleman 的回复:
http://groups.google.com/group/gooogleman/web/windows-ce-2440?hl=zh-CN
看看这个,

gooogleman,看到网上你的一篇“ 关于2440 休眠唤醒的实现疑惑”http://topic.csdn.net/u/20090330/13/34EC9ED9-660A-412E-932B-ABF789E9A26B.html
我的bootloader也是用ADS的,可以实现唤醒的吗?怎么修改?

#8


引用 6 楼 gelu1040 的回复:
别听他瞎说.
是中断就可以唤醒(注意优先级).

睡眠的时候140毫安,我对你的睡眠质量持保留态度.

还有哪些外设电源还没关掉吗?RTC的中断是最低级吧。。。

#9


2440的RTC是可以用作sleep wake-up。

你怎么确定你有进入sleep?PWR_EN有拉低吗?如果外部设备不是很耗电的话,CPU sleep才几个mA而已。

#10


引用 9 楼 skynet000 的回复:
2440的RTC是可以用作sleep wake-up。

你怎么确定你有进入sleep?PWR_EN有拉低吗?如果外部设备不是很耗电的话,CPU sleep才几个mA而已。

PWR_EN已经是低电平。外设没有啥东西。就只几个usb口和串口。这是何故?

#11


引用 10 楼 wen_hua 的回复:
引用 9 楼 skynet000 的回复:
2440的RTC是可以用作sleep wake-up。

你怎么确定你有进入sleep?PWR_EN有拉低吗?如果外部设备不是很耗电的话,CPU sleep才几个mA而已。

PWR_EN已经是低电平。外设没有啥东西。就只几个usb口和串口。这是何故?


你的PWR_EN是CPU自己拉低的吗?还是你用外部GPIO强制拉低的啊。
请问有进入OEMPowerOff的OALCPUPowerOff();这句??在它前面打印有一下看看。

#12


引用 11 楼 skynet000 的回复:
引用 10 楼 wen_hua 的回复:
引用 9 楼 skynet000 的回复:
2440的RTC是可以用作sleep wake-up。

你怎么确定你有进入sleep?PWR_EN有拉低吗?如果外部设备不是很耗电的话,CPU sleep才几个mA而已。

PWR_EN已经是低电平。外设没有啥东西。就只几个usb口和串口。这是何故?


你的PWR_EN是CPU自己拉低的吗?还是你用外部GPIO强制拉低的啊。
请问有进入OEMPowerOff的OALCPUPowerOff();这句??在它前面打印有一下看看。

pwr_en是cpu自己拉低。进入有到OALCPUPowerOff();

#13


贴出我ADS的bootloader的wakeup代码:
WAKEUP_SLEEP
;Release SCLKn after wake-up from the SLEEP mode.
ldr r1,=MISCCR
ldr r0,[r1]
bic r0,r0,#(7<<17)  ;SCLK0:0->SCLK, SCLK1:0->SCLK, SCKE:0->=SCKE.
str r0,[r1]

;Set memory control registers
  ldr r0,=SMRDATA ;be careful!, hzh
ldr r1,=BWSCON ;BWSCON Address
add r2, r0, #52 ;End address of SMRDATA
0
ldr r3, [r0], #4
str r3, [r1], #4
cmp r2, r0
bne %B0

mov r1,#256
0 subs r1,r1,#1 ;1) wait until the SelfRefresh is released.
bne %B0

ldr r1,=GSTATUS3  ;GSTATUS3 has the start address just after SLEEP wake-up
ldr r0,[r1]

mov pc,r0

#14


PWR_EN有拉低,那应该是进入sleep了。但是你的电流这么大,是不是哪里短路了。或者是CPU已经wake-up了。只是卡在启动的地方了??
你有没有试过其他唤醒方式??可以先试试以前有效的代码。看看进入sleep会不会有这么大的电流。

要从sleep唤醒,要注意在进入power off的sleep之前要把相应的RTC的中断打开、唤醒源打开。然后就是要保证main 电压正确。

#15


引用 14 楼 skynet000 的回复:
PWR_EN有拉低,那应该是进入sleep了。但是你的电流这么大,是不是哪里短路了。或者是CPU已经wake-up了。只是卡在启动的地方了??
你有没有试过其他唤醒方式??可以先试试以前有效的代码。看看进入sleep会不会有这么大的电流。

要从sleep唤醒,要注意在进入power off的sleep之前要把相应的RTC的中断打开、唤醒源打开。然后就是要保证main 电压正确。

我这边的代码跟网上的差不多。就是不知道哪有问题。skynet000兄能否提供点相关代码。。。

#16


继续顶上去。。。忙活了几天终于有点效果。。现在可以唤醒。不过还是有问题我,唤醒后屏幕出现一小行白屏,USB没电源。刚唤醒屏幕没触摸。过10s左右屏幕变暗。有触摸。
出现这种情况是睡眠先没做好保存吗?还是唤醒后有些要相应设置下。比如初始化。。。具体要设置哪些呢?求解。。。。。。

#17


唤醒后是不是要重新加载驱动。。。。具体流程是怎么样的,网上看了很多好像没那么详细。。。。

#18


mark

#19


继续求解。。。。。。。

#20


电源管理每个驱动都应该有相应的管理程序。比如流驱动的poweron()!

#21


VOID BSPPowerOn()
{
    volatile S3C2440A_IOPORT_REG *pIOPort = (S3C2440A_IOPORT_REG*)OALPAtoVA(S3C2440A_BASE_REG_PA_IOPORT, FALSE);
    volatile S3C2440A_LCD_REG *pLCD = (S3C2440A_LCD_REG*)OALPAtoVA(S3C2440A_BASE_REG_PA_LCD, FALSE);

OEMInitDebugSerial();

InitTimer();
//lqm@ucdragon.net 2007-06-25
//    pIOPort->EXTINT0 = 0x22222222;    // EINT[7:0]
//    pIOPort->EXTINT1 = 0x22222222;    // EINT[15:8]
//    pIOPort->EXTINT2 = 0x22222222;    // EINT[23:16]

pIOPort->GSTATUS2 = pIOPort->GSTATUS2;

    pIOPort->MISCCR &= ~(1<<12); //USB port0 = normal mode
    pIOPort->MISCCR &= ~(1<<13); //USB port1 = normal mode

    /* LCD Controller Enable               */
    SETPORT32(&pIOPort->GPGDAT, 1 << 4);


}
这是我BSPPowerOn里面的代码。感觉好少。。。问下这有没有问题?

#22


终于有点进展了。。。解决了一段白屏问题。可是出现了唤醒后USB口没有供电,是哪些寄存器没恢复吗?

#23


支持一下,应该是微软没有提供完整解决方案。

#24


引用 23 楼 evccode 的回复:
支持一下,应该是微软没有提供完整解决方案。

 没错。我用的是三星的2440BSP,里面的代码只是针对开发板做的。但是要真正的做到全部唤醒还要做些什么?CSDN的高手们好像都贼忙啊。。。。苦苦等待中。。。。。。。。。