// ============================================================================= // 功能:从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; }
// ============================================================================= // 功能:获取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; }