// ============================================================================= // 功能:RTC时间注册及初始化 // 参数:time, 时间值 // 返回:true,正常操作,否则出错 // ============================================================================= ptu32_t ModuleInstall_CpuRtc(ptu32_t para) { s64 rtc_time; struct timeval tv; u16 evtt; //初始化硬件 PMC_EnablePeripheral(ID_RTC); pRtcSemp = Lock_SempCreate(1,0,CN_BLOCK_FIFO,"RTC_SEMP"); if(NULL == pRtcSemp) return false; evtt = Djy_EvttRegist(EN_CORRELATIVE,CN_PRIO_REAL,0,0, Rtc_UpdateTime,NULL,800, "RTC Update Event"); if(evtt == CN_EVTT_ID_INVALID) { free(pRtcSemp); return false; } Djy_EventPop(evtt,NULL,0,NULL,0,0); Rtc_GetTime(&rtc_time); tv.tv_sec = rtc_time/1000000;//us ---> s tv.tv_usec = 0; settimeofday(&tv,NULL); //注册RTC时间 if(!Rtc_RegisterDev(NULL,Rtc_SetTime)) return false; return true; }
// ============================================================================= // 功能:初始化RTC模块.若时钟计数器复位过,则设置默认时间,否则读RTC时间,并配置系统 // 时间 // 参数:模块初始化函数没有参数 // 返回:true = 成功初始化,false = 初始化失败 // ============================================================================= ptu32_t RTC_ModuleInit(ptu32_t para) { struct tm DateTime; bool_t RtcIsReset = false; //判断时钟计数器是否被复位,即是否断电池 rRTCCON = 1 ; RtcIsReset = rRTCCON & (1<<3); rRTCCON &= ~1 ; if(RtcIsReset == true) { DateTime.tm_sec = 0; DateTime.tm_min = 0; DateTime.tm_hour = 0; DateTime.tm_mday = 1; DateTime.tm_mon = 1; DateTime.tm_yday = 2000; RTC_TimeUpdate(&DateTime); Tm_SetDateTime(&DateTime); } Rtc_RegisterDev(RTC_TimeGet,RTC_TimeUpdate); return true; }