/* Copyright 2011 Jun Wako This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include #include #include "timer_avr.h" #include "timer.h" // counter resolution 1ms // NOTE: union { uint32_t timer32; struct { uint16_t dummy; uint16_t timer16; }} volatile uint32_t timer_count = 0; void timer_init(void) { // Timer0 CTC mode TCCR0A = 0x02; #if TIMER_PRESCALER == 1 TCCR0B = 0x01; #elif TIMER_PRESCALER == 8 TCCR0B = 0x02; #elif TIMER_PRESCALER == 64 TCCR0B = 0x03; #elif TIMER_PRESCALER == 256 TCCR0B = 0x04; #elif TIMER_PRESCALER == 1024 TCCR0B = 0x05; #else # error "Timer prescaler value is NOT vaild." #endif OCR0A = TIMER_RAW_TOP; TIMSK0 = (1<