FreeCalypso > hg > freecalypso-tools
diff target-utils/pirexplore/rtc.c @ 0:e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 11 Jun 2016 00:13:35 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/target-utils/pirexplore/rtc.c Sat Jun 11 00:13:35 2016 +0000 @@ -0,0 +1,59 @@ +#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); +} + +void +cmd_rtccomp() +{ + printf("%04X\n", (RTC_REGS.rtc_comp_msb_reg << 8) | + RTC_REGS.rtc_comp_lsb_reg); +}