コード例 #1
0
ファイル: cpu_peri_rtc.c プロジェクト: djyos/djyos
// =============================================================================
// 功能: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;
}
コード例 #2
0
ファイル: cpu_peri_rtc.c プロジェクト: jiankangshiye/DJYOS
// =============================================================================
// 功能:初始化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;
}