コード例 #1
0
ファイル: time.c プロジェクト: 7134956/NWatch
void time_sleep()
{
//	TCCR2B = _BV(CS22)|_BV(CS20);
//	while(ASSR & (_BV(OCR2BUB)|_BV(TCR2AUB)|_BV(TCR2BUB)));

#if RTC_SRC != RTC_SRC_INTERNAL
	// Turn off square wave
	rtc_sqw(RTC_SQW_OFF);

	alarm_s alarm;

	// Set next alarm
	if(alarm_getNext(&alarm))
	{
		alarm.days = alarm_getNextDay() + 1;
		rtc_setUserAlarmWake(&alarm);
	}
	else
		rtc_setUserAlarmWake(NULL);

	// 
	if(appConfig.volHour)
	{
		alarm.min = 0;
		alarm.hour = 0;
		alarm.days = 0;
		rtc_setSystemAlarmWake(&alarm);
	}
	else // Hour beep volume set to minimum, so don't bother with the system alarm
		rtc_setSystemAlarmWake(NULL);
#endif

	update = false;
}
コード例 #2
0
ファイル: ds3231.c プロジェクト: BenBergman/NWatch
void ds3231_init()
{
	// Set registers

	byte data;

	// Control
	// Enable oscillator
	read(DS3231_ADDR_CTRL, &data, 1);
	CLEAR_BITS(data, DS3231_BIT_EOSC, DS3231_BIT_RS1, DS3231_BIT_RS2);
	write(DS3231_ADDR_CTRL, data);

	// Status
	// Turn off 32KHz output
	// Unset alarm 1 & 2 interrupts
	read(DS3231_ADDR_STATUS, &data, 1);
	CLEAR_BITS(data, DS3231_BIT_EN32KHZ, DS3231_BIT_A2F, DS3231_BIT_A1F);
	write(DS3231_ADDR_STATUS, data);

	// Set 1Hz output
	rtc_sqw(RTC_SQW_ON);
}
コード例 #3
0
ファイル: time.c プロジェクト: 7134956/NWatch
rtcwake_t time_wake()
{
#if RTC_SRC != RTC_SRC_INTERNAL
	getRtcTime();

	// Turn on square wave
	rtc_sqw(RTC_SQW_ON);

//	update = false;

	// Check alarms
	bool userAlarm = rtc_userAlarmState();
	bool systemAlarm = rtc_systemAlarmState();

	if(userAlarm && systemAlarm)
		return RTCWAKE_USER_SYSTEM;
	else if(userAlarm)
		return RTCWAKE_USER;
	else if(systemAlarm)
		return RTCWAKE_SYSTEM;
#endif
	return RTCWAKE_NONE;
}