当相应的中断源触发时,CPU就会被唤醒,电流消耗变大了,需要说明的是,此处仅唤醒CPU,之后才唤醒WINCE系统。当系统由SLEEP到NORMAL切换期间需经过一个RESET过程,这个过程称为 Power On Reset 。在S3C2440 CPU中,寄存器GSTATUS2专门用以判断发生Reset原因。Power On Reset后,在之前SLEEP过程中保存下来的RAM中的系统数据是不会丢失的。本文需要设计的唤醒子系统,就是把这些数值恢复到它们休眠前应处的地址。
研究过程后期,在确认相应设置正确的前提下,系统仍无法正常唤醒,在重新分析整个流程设计和代码实现后,发现在S3C2440的官方BSP(板级支持包)中存在一个BUG:系统休眠时保存数据的虚拟地址设置错误,SLEEPDATA_BASE_VIRTUAL设置为0xAC028000,而此处和Bootloader中的SLEEPDATA_BASE_PHYSICAL 都设定为0x30028000。根据地址映射表里面的设置是:DCD 0x80000000, 0x30000000, 64; 32 MB DRAM BANK 6,因此虚拟地址是0xA0028000。将虚拟地址修改后,即可正常唤醒。