FreeCalypso > hg > freecalypso-sw
diff target-utils/pirexplore/rtc.c @ 72:92c1ed6b4b67
pirexplore: RTC read implemented
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Fri, 26 Jul 2013 20:32:43 +0000 |
parents | |
children | c54c6ad1c66f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/target-utils/pirexplore/rtc.c Fri Jul 26 20:32:43 2013 +0000 @@ -0,0 +1,52 @@ +#include "types.h" +#include "rtc.h" + +static void +read_time(tm) + struct rtctime *tm; +{ + tm->year = RTC_REGS.rtc_cur.year; + tm->month = RTC_REGS.rtc_cur.month; + tm->day_of_month = RTC_REGS.rtc_cur.day_of_month; + tm->day_of_week = RTC_REGS.rtc_cur.day_of_week; + tm->hours = RTC_REGS.rtc_cur.hours; + tm->minutes = RTC_REGS.rtc_cur.minutes; + tm->seconds = RTC_REGS.rtc_cur.seconds; +} + +void +cmd_rtc() +{ + u8 ctrl; + struct rtctime time1, time2; + int c; + + ctrl = RTC_REGS.rtc_ctrl_reg; + printf("RTC_CTRL_REG = %02X ", ctrl); + switch (ctrl) { + case 0x00: + printf("(frozen)\n"); + break; + case 0x01: + printf("(running)\n"); + break; + default: + printf("(unexpected)\n"); + return; + } + printf("Reading RTC time"); + for (;;) { + c = serial_in_poll(); + if (c >= 0) { + printf("<INTERRUPT>\n"); + return; + } + read_time(&time1); + read_time(&time2); + if (!bcmp(&time1.minutes, &time2.minutes, 6)) + break; + } + printf("\nDATE %02X-%02X-%02X DOW %02X TIME %02X:%02X:%02X\n", + time2.year, time2.month, time2.day_of_month, time2.day_of_week, + time2.hours, time2.minutes, time2.seconds); +}