예제 #1
0
파일: cpu_peri_rtc.c 프로젝트: djyos/djyos
// =============================================================================
// 功能:从RTC设备中读取RTC时间,单位微秒,取从1970年1月1日0:0:0到现在的时间差
// 参数:time, 时间值,需把日历时间转换成1970年1月1日0:0:0到现在的时间差
// 返回:true,正常操作,否则出错
// =============================================================================
bool_t Rtc_GetTime(s64 *time)
{
    struct tm dtm;
    u32 rtc_timr,rtc_calr;
    u32 year,month,date,hour,min,sec;

    rtc_timr = RTC->RTC_TIMR;
    rtc_calr = RTC->RTC_CALR;

    year = (rtc_calr & RTC_CALR_YEAR_Msk) >> RTC_CALR_YEAR_Pos;
    month = (rtc_calr & RTC_CALR_MONTH_Msk) >> RTC_CALR_MONTH_Pos;
    date = (rtc_calr & RTC_CALR_DATE_Msk) >> RTC_CALR_DATE_Pos;

    hour = (rtc_timr & RTC_TIMR_HOUR_Msk) >> RTC_TIMR_HOUR_Pos;
    min = (rtc_timr & RTC_TIMR_MIN_Msk) >> RTC_TIMR_MIN_Pos;
    sec = (rtc_timr & RTC_TIMR_SEC_Msk) >> RTC_TIMR_SEC_Pos;

    dtm.tm_year = BcdToHex(year) + 2000;
    dtm.tm_mon  = BcdToHex(month);
    dtm.tm_mday = BcdToHex(date);
    dtm.tm_hour = BcdToHex(hour);
    dtm.tm_min  = BcdToHex(min);
    dtm.tm_sec  = BcdToHex(sec);

    *time = 1000000 * Tm_MkTime(&dtm);
    return true;
}
예제 #2
0
// =============================================================================
// 功能:获取RTC时钟,读取RTC模块的时间,由于时钟模块的年存储的最大值为99,因此需将读
//       到的年份加基数年2000,如,读RTC模块的rBCDYEAR为14,则为2014年
// 参数:dtm,更新时间
// 返回:true
// =============================================================================
bool_t RTC_TimeGet(s64 *time)
{
    struct tm dtm;

    rRTCCON = 1 ;       //RTC read and write enable
    dtm.tm_year = BcdToHex(rBCDYEAR) + 2000;
    dtm.tm_mon  = BcdToHex(rBCDMON);
    dtm.tm_mday = BcdToHex(rBCDDATE);
    dtm.tm_hour = BcdToHex(rBCDHOUR);
    dtm.tm_min  = BcdToHex(rBCDMIN);
    dtm.tm_sec  = BcdToHex(rBCDSEC);
    rRTCCON &= ~1 ;     //RTC read and write disable

    *time = 1000000 * Tm_MkTime(&dtm);
    return true;
}