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);
+}