]> www.fi.muni.cz Git - bike-lights.git/blobdiff - firmware/tmr.c
Watchdog-based timing
[bike-lights.git] / firmware / tmr.c
index d53981a6b8d1dccfcc1655993d2568988559ee87..d1f1b2300bfe7e05233481948947fea330130b77 100644 (file)
@@ -1,44 +1,29 @@
 #include <avr/io.h>
 #include <avr/interrupt.h>
+#include <avr/wdt.h>
 
 #include "lights.h"
 
 volatile uint16_t jiffies;
-#define PATTERN_DIV 10 // clk/10
-static unsigned char pattern_div;
 
 void init_tmr()
 {
-       TCCR0A = _BV(WGM00);
-       TCCR0B = _BV(CS02) | _BV(CS00); // CLK/1024 = 1 kHz
-       OCR0A = 5; // 200 Hz
-       TIMSK |= _BV(OCIE0A);
-
-       jiffies = 0;
-       pattern_div = PATTERN_DIV;
+       WDTCR = _BV(WDIE) | _BV(WDP1); // 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();
-
-       if (--pattern_div == 0) {
-               timer_check_buttons();
-               patterns_next_tick();
-               timer_start_slow_adcs();
-               pattern_div = PATTERN_DIV;
-       }
+       timer_check_buttons();
+       patterns_next_tick();
+       timer_start_slow_adcs();
 
-       if ((jiffies & 0x7FFF) == 0)
+       if ((jiffies & 0x7FF) == 0)
                ambient_log_min_max();
 }