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
怎么会这样啊。手册上怎么还写很多介绍怎么用的。。。。。。为什么不能用RTC唤醒
#5
http://groups.google.com/group/gooogleman/web/windows-ce-2440?hl=zh-CN
看看这个,
看看这个,
#6
别听他瞎说.
是中断就可以唤醒(注意优先级).
睡眠的时候140毫安,我对你的睡眠质量持保留态度.
是中断就可以唤醒(注意优先级).
睡眠的时候140毫安,我对你的睡眠质量持保留态度.
#7
gooogleman,看到网上你的一篇“ 关于2440 休眠唤醒的实现疑惑”http://topic.csdn.net/u/20090330/13/34EC9ED9-660A-412E-932B-ABF789E9A26B.html
我的bootloader也是用ADS的,可以实现唤醒的吗?怎么修改?
#8
还有哪些外设电源还没关掉吗?RTC的中断是最低级吧。。。
#9
2440的RTC是可以用作sleep wake-up。
你怎么确定你有进入sleep?PWR_EN有拉低吗?如果外部设备不是很耗电的话,CPU sleep才几个mA而已。
你怎么确定你有进入sleep?PWR_EN有拉低吗?如果外部设备不是很耗电的话,CPU sleep才几个mA而已。
#10
PWR_EN已经是低电平。外设没有啥东西。就只几个usb口和串口。这是何故?
#11
你的PWR_EN是CPU自己拉低的吗?还是你用外部GPIO强制拉低的啊。
请问有进入OEMPowerOff的OALCPUPowerOff();这句??在它前面打印有一下看看。
#12
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
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 电压正确。
你有没有试过其他唤醒方式??可以先试试以前有效的代码。看看进入sleep会不会有这么大的电流。
要从sleep唤醒,要注意在进入power off的sleep之前要把相应的RTC的中断打开、唤醒源打开。然后就是要保证main 电压正确。
#15
我这边的代码跟网上的差不多。就是不知道哪有问题。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里面的代码。感觉好少。。。问下这有没有问题?
{
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
没错。我用的是三星的2440BSP,里面的代码只是针对开发板做的。但是要真正的做到全部唤醒还要做些什么?CSDN的高手们好像都贼忙啊。。。。苦苦等待中。。。。。。。。。
#1
怎么没人来啊。。。。自己顶下。。。。。
#2
帮顶
#3
三星的芯片RTC不能做唤醒源的。。。。只能通过外部中断
#4
怎么会这样啊。手册上怎么还写很多介绍怎么用的。。。。。。为什么不能用RTC唤醒
#5
http://groups.google.com/group/gooogleman/web/windows-ce-2440?hl=zh-CN
看看这个,
看看这个,
#6
别听他瞎说.
是中断就可以唤醒(注意优先级).
睡眠的时候140毫安,我对你的睡眠质量持保留态度.
是中断就可以唤醒(注意优先级).
睡眠的时候140毫安,我对你的睡眠质量持保留态度.
#7
gooogleman,看到网上你的一篇“ 关于2440 休眠唤醒的实现疑惑”http://topic.csdn.net/u/20090330/13/34EC9ED9-660A-412E-932B-ABF789E9A26B.html
我的bootloader也是用ADS的,可以实现唤醒的吗?怎么修改?
#8
还有哪些外设电源还没关掉吗?RTC的中断是最低级吧。。。
#9
2440的RTC是可以用作sleep wake-up。
你怎么确定你有进入sleep?PWR_EN有拉低吗?如果外部设备不是很耗电的话,CPU sleep才几个mA而已。
你怎么确定你有进入sleep?PWR_EN有拉低吗?如果外部设备不是很耗电的话,CPU sleep才几个mA而已。
#10
PWR_EN已经是低电平。外设没有啥东西。就只几个usb口和串口。这是何故?
#11
你的PWR_EN是CPU自己拉低的吗?还是你用外部GPIO强制拉低的啊。
请问有进入OEMPowerOff的OALCPUPowerOff();这句??在它前面打印有一下看看。
#12
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
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 电压正确。
你有没有试过其他唤醒方式??可以先试试以前有效的代码。看看进入sleep会不会有这么大的电流。
要从sleep唤醒,要注意在进入power off的sleep之前要把相应的RTC的中断打开、唤醒源打开。然后就是要保证main 电压正确。
#15
我这边的代码跟网上的差不多。就是不知道哪有问题。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里面的代码。感觉好少。。。问下这有没有问题?
{
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
没错。我用的是三星的2440BSP,里面的代码只是针对开发板做的。但是要真正的做到全部唤醒还要做些什么?CSDN的高手们好像都贼忙啊。。。。苦苦等待中。。。。。。。。。