在s3c2440+wince5.0的环境下,做了挂起唤醒的功能,可是唤醒后,程序跑到OEMPowerOff里并恢复寄存器,重新初始LCD后,LCD重新亮起来后,又慢慢变成白屏,应该是因为没有继续刷屏的原因,是程序跑飞了吗?OEMPowerOff的最后是否要做什么调用操作?
部分代码如下:
VOID OEMPowerOff(void)
{
CPUSaveRegs(CPUBackupRegs);/* Save Current Important CPU Regs... */
CPULCDOff();/* LCD Controller Disable */
ConfigStopGPIO();/* Stop all GPIO */
ConfigMiscReg();/* Set misc register for power off */
CPUPowerOff();//////////////////////////////////////////////////////////////sleep//////awaken
CPULoadRegs(CPUBackupRegs);/* Recover Process, Load CPU Regs*/
/* Interrupt Clear*/
s2440IOP->rEINTPEND = s2440IOP->rEINTPEND;
s2440LCD->rLCDSRCPND = s2440LCD->rLCDSRCPND;
s2440LCD->rLCDINTPND = s2440LCD->rLCDINTPND;
s2440INT->rSUBSRCPND = s2440INT->rSUBSRCPND;
NANDInit();
OEMInitDebugSerial();
RETAILMSG(1,(TEXT("End Poweroff\r\n")));
LCDInit();//执行到这里后屏幕可以亮起来,可是之后就无法在继续刷屏,这里是把reset的初始化操作复制过来再做一遍
RETAILMSG(1,(TEXT("-- Exit OEMPOWER.\r\n")));
s2440IOP->rGPFDAT = (0xA << 4);//根据LED的显示状态表明,程序有跑到这里.是否还要调用什么函数?
}
请大家帮忙看看问题可能会是哪里?
系统已经回到这里就好办了,查一下到底是跑了哪个函数后出了问题
系统Resume的过程基本上是这样的
OEMPowerOff-->Driver Power Handler-->Driver IOCTL
已经能亮,说明LCD 初始化中对于背光(backlight)的控制已经有效果了。
然后用示波器量一下对应的点频(PCLK),行频(HSYNC),场频(VSYNC)是否都正常工作了。
引用: 引用 1 楼 hzdysymbol 的回复:
系统已经回到这里就好办了,查一下到底是跑了哪个函数后出了问题
系统Resume的过程基本上是这样的
OEMPowerOff-->Driver Power Handler-->Driver IOCTL
请问一下,Driver Power Handler-->Driver IOCTL 这个应该要怎么做,OEMPowerOff会跳转到哪个函数里去执行呢
OEMPowerOff后会进到各个驱动的PowerHandler里啊,前面不写得这么清楚了吗?
PowerHandler跑完后会进到PM.dll里面,然后PM里面会调用各个驱动的IOCTL来设置相应的各驱动的电源状态
@linchunfu
你的问题解决了吗?我现在也遇到了同样的问题,不知道怎么解决,希望指教一下,谢谢!
@hzdysymbol
LCD驱动似乎找不到PowerHandler和IOCTL啊
引用: 引用 5 楼 hzdysymbol 的回复:
OEMPowerOff后会进到各个驱动的PowerHandler里啊,前面不写得这么清楚了吗?
PowerHandler跑完后会进到PM.dll里面,然后PM里面会调用各个驱动的IOCTL来设置相应的各驱动的电源状态
哦,这个很强大。学了不少。
其实会调用驱动中的XXX_PowerOn等函数设置电源状态吧。我打印信息会这样的。
请问问题解决了吗?遇到同样问题了,系统唤醒后LCD白屏,无法显示图像。