]> www.fi.muni.cz Git - bike-lights.git/blobdiff - firmware/tmr.c
tmr.c: combine watchdog IRQ and watchdog reset
[bike-lights.git] / firmware / tmr.c
index 9a0a38b346b0adc00bb88a4d32e6df12fa0c549b..2e61db859d2570b23b00ecd6eb5a460a3138ae16 100644 (file)
@@ -1,42 +1,32 @@
 #include <avr/io.h>
 #include <avr/interrupt.h>
+#include <avr/wdt.h>
 
 #include "lights.h"
 
 volatile uint16_t jiffies;
-#define PATTERN_DIV 5  // clk/10
-static unsigned char pattern_div;
 
 void init_tmr()
 {
-       TCCR0A = _BV(WGM00);
-       TCCR0B = _BV(CS02) | _BV(CS00); // CLK/1024 = 1 kHz
-       OCR0A = 10; // 100 Hz
-       TIMSK |= _BV(OCIE0A);
-
-       jiffies = 0;
-       pattern_div = PATTERN_DIV;
+       wdt_enable(WDTO_60MS);
+       WDTCR |= _BV(WDIE); // interrupt mode, 64 ms
 }
 
 void susp_tmr()
 {
-       TCCR0A = TCCR0B = 0;
-       TIMSK &= ~_BV(OCIE0A);
-       TIFR = 0;
+       wdt_disable();
 }
 
-ISR(TIMER0_COMPA_vect)
-{
+ISR(WDT_vect) {
        ++jiffies;
 
-       pwm_timer();
+       timer_check_buttons();
+       patterns_next_tick();
+       timer_start_slow_adcs();
 
-       if (--pattern_div == 0) {
-               timer_check_buttons();
-               patterns_next_tick();
-               pattern_div = PATTERN_DIV;
-       }
+       if ((jiffies & 0x7FF) == 0)
+               ambient_log_min_max();
 
-       timer_start_adcs();
+       WDTCR |= _BV(WDIE); // avoid WDT reset next time
 }