最近在做2440的项目,拿开发板厂商提供的BSP修改,现在CPU可以正常睡眠,唤醒的时候可以进入系统,进入后大概1秒左右系统就飞了,屏幕花掉,但是在花屏前那段时间是可以执行操作的,触屏,程序都正常
Config.bib里面保留内存地址为:
SLEEP 8c024000 00002000 RESERVED
FW.s里面:
SLEEPDATA_BASE_VIRTUAL EQU 0xAC024000 ; keep in sync w/ config.bib
SLEEPDATA_BASE_PHYSICAL EQU 0x30024000
由于一开始睡眠的时候无法关闭LCD,所以我在power.c的ConfigStopGPIO函数里面把rGPGCON 的配置改为下面的:
s2440IOP->rGPGCON = 0x0 |(1<<8)|(1<<9);
s2440IOP->rGPGUP = 0x0 |(1<<4);
唤醒时,发现在OEMPowerOff中有如下语句:
NANDInit();
OEMInitDebugSerial();
RETAILMSG(1,(TEXT("-- Exit OEMPOWER.\r\n")));
RETAILMSG(1,(TEXT("s2440INT->rSRCPND = 0x%x \r\n"), s2440INT->rSRCPND));
RETAILMSG(1,(TEXT("s2440INT->rINTPND = 0x%x \r\n"), s2440INT->rINTPND));
RETAILMSG(1,(TEXT("s2440INT->rINTMOD = 0x%x \r\n"), s2440INT->rINTMOD)); //<----------到这一句输出不完全
RETAILMSG(1,(TEXT("s2440INT->rINTMSK = 0x%x \r\n"), s2440INT->rINTMSK));
CPUClearCS8900();
唤醒后调试串口输出信息为:
s2440INT->rSRCPND = 0x1
s2440INT->rINTPND = 0x1
s2440INT->rINTMOD
而且如果在power.c中将RETAILMSG()函数注释掉,系统无法进入睡眠状态,这个问题相当怪异,实在想不明白为什么
还有就是CPUClearCS8900()这个函数不知道起的是什么作用,似乎系统运行到这里的时候屏幕也会黑掉,然后就没反应了
不知道有没有人能帮忙解答,谢谢
s2440INT->rINTMOD这种语句是一个函数吗?它里面是有操作的吧。所以你将它注释掉会有问题。sleep回来出现花屏现象应该是你的LCD的时序的问题,你看看回来是你的LCD的时序跟你的DATASHEET有什么出入。。。
感谢楼上...
s2440INT->rINTMOD是2440的一个寄存器来的
LCD时序问题会导致系统跑飞吗?
我去看一下LCD的DATASHEET
还有能是其他地方的问题吗?
我觉得可能是MMU那边保存和恢复不正常...
第一次做WINCE,很多东西完全不了解的
当然,花屏也可能是CPU发过来的数据有问题。查一查吧,我以前遇到的就是时序问题
搞定了...
很古怪的问题
问题出在这里
SLEEPDATA_BASE_VIRTUAL EQU 0xAC024000 ; keep in sync w/ config.bib
SLEEPDATA_BASE_PHYSICAL EQU 0x30024000
改成
SLEEPDATA_BASE_VIRTUAL EQU 0xA0024000 ; keep in sync w/ config.bib
SLEEPDATA_BASE_PHYSICAL EQU 0x30024000
就可以了
很不解Config.bib和ma.a里面定义的地址都是8Cxxxxxx,为什么这里又是A0xxxxxx
太奇怪了...
结贴