发现BSP的RTC驱动程序存在错误:修改日期只能在1到7之间。例如选择了24日,应用之后,自动又是4日获得了焦点。
原因是OEMSetRealTime函数对RTC的设置不正确,把BCDDATE和BCDDAY倒过来用了。
解决方法:
1 修改PLATFORM/COMMON/SRC/ARM/SAMSUNG/S3C2440A/Rtc/rtc.c的OEMSetRealTime函数:
- OUTPORT32(&pRTCReg->BCDDAY, pTime->wDayOfWeek + 1);
- OUTPORT32(&pRTCReg->BCDDATE, TO_BCD(pTime->wDay));
OEMGetRealTime函数:
- data = INPORT32(&pRTCReg->BCDDATE) & 0x3f;
- pTime->wDay = FROM_BCD(data);
- pTime->wDayOfWeek = (WORD)INPORT32(&pRTCReg->BCDDAY) - 1;
2 修改PLATFORM/SMDK2440A/Src/Bootloader/Eboot/ether.c的OEMGetRealTime函数:
- lpst->wDay = FROM_BCD(s2440RTC->BCDDATE & 0x3f);
- lpst->wDayOfWeek = (s2440RTC->BCDDAY - 1);
另外,由于OEMSetRealTime每次开机都会执行,导致时间每次都回到2003年1月1日,可以设置一个静态变量,取消第一次设置RTC:
- static BOOL bFirstSet = TRUE;
- if (bFirstSet)
- {
- bFirstSet = FALSE;
- return TRUE;
- }