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