修改RTC驱动程序

来源:互联网 发布:淘宝卖家问大家功能 编辑:程序博客网 时间:2024/06/08 12:11

发现BSP的RTC驱动程序存在错误:修改日期只能在1到7之间。例如选择了24日,应用之后,自动又是4日获得了焦点。

原因是OEMSetRealTime函数对RTC的设置不正确,把BCDDATE和BCDDAY倒过来用了。

 

解决方法:

1 修改PLATFORM/COMMON/SRC/ARM/SAMSUNG/S3C2440A/Rtc/rtc.c的OEMSetRealTime函数:

  1. OUTPORT32(&pRTCReg->BCDDAY,  pTime->wDayOfWeek + 1);
  2. OUTPORT32(&pRTCReg->BCDDATE, TO_BCD(pTime->wDay));

OEMGetRealTime函数:

  1. data = INPORT32(&pRTCReg->BCDDATE) & 0x3f;
  2. pTime->wDay = FROM_BCD(data);
  3. pTime->wDayOfWeek = (WORD)INPORT32(&pRTCReg->BCDDAY) - 1;

2 修改PLATFORM/SMDK2440A/Src/Bootloader/Eboot/ether.c的OEMGetRealTime函数:

  1. lpst->wDay          = FROM_BCD(s2440RTC->BCDDATE  & 0x3f);
  2. lpst->wDayOfWeek    = (s2440RTC->BCDDAY - 1);

另外,由于OEMSetRealTime每次开机都会执行,导致时间每次都回到2003年1月1日,可以设置一个静态变量,取消第一次设置RTC:

  1.  static BOOL bFirstSet = TRUE;
  2.  if (bFirstSet)
  3.  {
  4.       bFirstSet = FALSE;
  5.       return TRUE;
  6.  }