summaryrefslogtreecommitdiffstats
path: root/sleep
diff options
context:
space:
mode:
authorSadeep Madurange <sadeep@asciimx.com>2025-04-29 21:49:42 +0800
committerSadeep Madurange <sadeep@asciimx.com>2025-04-29 21:51:30 +0800
commit293a11fa98af0859bcf20543d2a606bc41b9c4bf (patch)
tree5630487a44ec195f48f42f7321d69c2149c90b73 /sleep
parent0398894a39406ead5921df64892e3a1c82cc25b7 (diff)
downloadsmart-home-293a11fa98af0859bcf20543d2a606bc41b9c4bf.tar.gz
Watchdog timer interrupt.
Diffstat (limited to 'sleep')
-rw-r--r--sleep/main.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/sleep/main.c b/sleep/main.c
index 007dc18..ef4e520 100644
--- a/sleep/main.c
+++ b/sleep/main.c
@@ -1,5 +1,6 @@
#include <avr/interrupt.h>
#include <avr/sleep.h>
+#include <avr/wdt.h>
#include <util/delay.h>
#include "uart.h"
@@ -7,6 +8,15 @@
#define LOCK_PIN PD2
#define UNLOCK_PIN PD3
+static inline void init_wdt(void)
+{
+ cli();
+ wdt_reset();
+ WDTCSR |= (1 << WDCE) | ( 1 << WDE);
+ WDTCSR = (1 << WDP2) | (1 << WDP1) | (1 << WDP0);
+ WDTCSR |= (1 << WDIE);
+}
+
static inline void init_btns(void)
{
DDRD &= ~((1 << LOCK_PIN) | (1 << UNLOCK_PIN));
@@ -17,6 +27,7 @@ static inline void init_btns(void)
int main(void)
{
+ init_wdt();
init_btns();
uart_init();
@@ -28,9 +39,11 @@ int main(void)
sleep_enable();
sleep_bod_disable();
sleep_cpu();
+
sleep_disable();
- uart_write_line("It's alive!");
- _delay_ms(1500);
+ _delay_ms(500); /* wait for start-up */
+ uart_write_line("Doing some work...");
+ _delay_ms(500);
}
return 0;
}
@@ -55,3 +68,7 @@ ISR(INT1_vect)
if (is_btn_pressed(PIND, UNLOCK_PIN))
uart_write_line("Unlocked");
}
+
+ISR(WDT_vect)
+{
+}