예제 #1
0
파일: mc146818.c 프로젝트: BarclayII/AIMv6
void rtc_settimereg(unsigned char r, unsigned char v)
{
	unsigned char ctlb = rtc_readreg(DS_REG_CTLB);
	rtc_writereg(DS_REG_CTLB, ctlb | DS_CTLB_SET);
	rtc_writereg(r, byte_to_bcd(v));
	rtc_writereg(DS_REG_CTLB, ctlb & ~DS_CTLB_SET);
}
예제 #2
0
파일: rtc.c 프로젝트: lacombar/netbsd-alc
static int
rtc_gettime_ymdhms(todr_chip_handle_t handle, struct clock_ymdhms *dt)
{
	struct rtc_softc *sc;
	int i, year;
	bool read_okay;
	uint8_t rtc_registers[NUM_RTC_REGS];

	sc = handle->cookie;

	/* read rtc registers */
	read_okay = false;
	while (!read_okay) {
		read_okay = true;
		for (i = 0; i < NUM_RTC_REGS; i++)
			rtc_registers[i] = rtc_readreg(sc, i);
		for (i = 0; i < NUM_RTC_REGS; i++)
			if (rtc_registers[i] != rtc_readreg(sc, i))
				read_okay = false;
	}

#define	rtc_to_decimal(a,b) 	(rtc_registers[a] * 10 + rtc_registers[b])

	dt->dt_sec  = rtc_to_decimal(1, 0);
	dt->dt_min  = rtc_to_decimal(3, 2);
	dt->dt_hour = (rtc_registers[5] & RTC_REG5_HOUR) * 10 +
	    rtc_registers[4];
	dt->dt_day  = rtc_to_decimal(8, 7);
	dt->dt_mon  = rtc_to_decimal(10, 9);

	year = rtc_to_decimal(12, 11) + RTC_BASE_YEAR;
	if (year < POSIX_BASE_YEAR)
		year += 100;
	dt->dt_year = year;

#undef	rtc_to_decimal

	return 0;
}
예제 #3
0
파일: mc146818.c 프로젝트: BarclayII/AIMv6
unsigned char rtc_gettimereg(unsigned char r)
{
	return bcd_to_byte(rtc_readreg(r));
}