读书人

S3C2440的芯片每次设置系统时间有关

发布时间: 2013-07-09 09:50:47 作者: rapoo

求助S3C2440的芯片,每次设置系统时间问题
大家好,

小弟遇到了一个搞不懂的问题。向大家请教。
芯片是 S3C2440,wince5.0,每次系统启动好自后,去设置系统时间(OEMSetRealTime),然后系统就会不停的调用OEMGetRealTime,而且速度非常快的调用,还不停下来,造成整个系统都缓慢了。
BOOL
OEMGetRealTime(LPSYSTEMTIME lpst)
{
volatile RTCreg *s2440RTC;

s2440RTC = (RTCreg *)RTC_BASE;
RETAILMSG(1,(TEXT("[KQ_TEST] +OEMGetRealTime \r\n")));

s2440RTC->rRTCCON =0x1;
lpst->wMilliseconds=0;
lpst->wSecond= FROM_BCD(s2440RTC->rBCDSEC&0x7f);
lpst->wMinute= FROM_BCD(s2440RTC->rBCDMIN&0x7f);
lpst->wHour= FROM_BCD(s2440RTC->rBCDHOUR&0x3f);
lpst->wDayOfWeek=(s2440RTC->rBCDDATE-1);
lpst->wDay= FROM_BCD(s2440RTC->rBCDDAY&0x3f);
lpst->wMonth=FROM_BCD(s2440RTC->rBCDMON&0x1f);
//lpst->wYear=(2000+s2440RTC->rBCDYEAR);
lpst->wYear=FROM_BCD(s2440RTC->rBCDYEAR)+2000;
if (lpst->wSecond==0)
{
lpst->wSecond=FROM_BCD(s2440RTC->rBCDSEC&0x7f);
lpst->wMinute=FROM_BCD(s2440RTC->rBCDMIN&0x7f);
lpst->wHour=FROM_BCD(s2440RTC->rBCDHOUR&0x3f);
lpst->wDayOfWeek=(s2440RTC->rBCDDATE-1);
lpst->wDay=FROM_BCD(s2440RTC->rBCDDAY&0x3f);
lpst->wMonth=FROM_BCD(s2440RTC->rBCDMON&0x1f);
lpst->wYear=(2000+s2440RTC->rBCDYEAR);
}
//禁止RTC
s2440RTC->rRTCCON=0;
return TRUE;
}

BOOL
OEMSetRealTime(LPSYSTEMTIME lpst)
{
volatile RTCreg *s2440RTC = (RTCreg *)RTC_BASE;
static int firsttime = 0;
// enable RTC control
RETAILMSG(1,(TEXT("[KQ_TEST] +OEMSetRealTime \r\n")));
s2440RTC->rRTCCON = 0x1;

s2440RTC->rBCDSEC = (unsigned char)TO_BCD(lpst->wSecond );
s2440RTC->rBCDMIN = (unsigned char)TO_BCD(lpst->wMinute );
s2440RTC->rBCDHOUR = (unsigned char)TO_BCD(lpst->wHour );

s2440RTC->rBCDDATE = (unsigned char)(lpst->wDayOfWeek + 1);

s2440RTC->rBCDDAY = (unsigned char)TO_BCD(lpst->wDay );
s2440RTC->rBCDMON = (unsigned char)TO_BCD(lpst->wMonth );
s2440RTC->rBCDYEAR = (unsigned char)TO_BCD((lpst->wYear -2000));

// disable RTC control
s2440RTC->rRTCCON = 0; //&= ~0x1;

return TRUE;
}

大家帮忙看看吧,谢谢了


[解决办法]
if (lpst->wSecond==0)
{
lpst->wSecond=FROM_BCD(s2440RTC->rBCDSEC&0x7f);
lpst->wMinute=FROM_BCD(s2440RTC->rBCDMIN&0x7f);
lpst->wHour=FROM_BCD(s2440RTC->rBCDHOUR&0x3f);
lpst->wDayOfWeek=(s2440RTC->rBCDDATE-1);
lpst->wDay=FROM_BCD(s2440RTC->rBCDDAY&0x3f);
lpst->wMonth=FROM_BCD(s2440RTC->rBCDMON&0x1f);
lpst->wYear=(2000+s2440RTC->rBCDYEAR);
}

lpst->wYear=(2000+s2440RTC->rBCDYEAR);//这里代码有错误
lpst->wYear = 2000 + FROM_BCD(s2440RTC->rBCDYEAR);

另外最好判断一下时间,避免时间跑飞了,wince最多只能表示100年,时间跑飞会导致系统变慢。
[解决办法]

引用:
问题依然没有解决,写进去的,马上去读出来,结果还是不对,或者根本没有写进去。如果外部晶振没有起作用,是不是就是这个现象?怀疑硬件。

RTC的晶振没起来的话一般系统是起不来的

读书人网 >WinCE

热点推荐