]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - timer.c
added SONY NEWS keyboard NWP-5461 support.
[qmk_firmware.git] / timer.c
diff --git a/timer.c b/timer.c
index 21dda523c16f30f50c3215ecf975ad5d38d5dad6..48a38c9b68211116c75b948c21bd9fe3e444a1cc 100644 (file)
--- a/timer.c
+++ b/timer.c
@@ -1,19 +1,50 @@
+/*
+Copyright 2011 Jun Wako <wakojun@gmail.com>
+
+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 <http://www.gnu.org/licenses/>.
+*/
+
 #include <avr/io.h>
 #include <avr/interrupt.h>
 #include <stdint.h>
 #include "timer.h"
 
+
+// counter resolution 1ms
 volatile uint16_t timer_count = 0;
 
-// Configure timer 0 to generate a timer overflow interrupt every
-// 256*1024 clock cycles, or approx 61 Hz when using 16 MHz clock
-// This demonstrates how to use interrupts to implement a simple
-// inactivity timeout.
 void timer_init(void)
 {
-    TCCR0A = 0x00;
+    // 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;
-    TIMSK0 = (1<<TOIE0);
+#else
+#   error "Timer prescaler value is NOT vaild."
+#endif
+
+    OCR0A = TIMER_RAW_TOP;
+    TIMSK0 = (1<<OCIE0A);
 }
 
 inline
@@ -48,14 +79,11 @@ uint16_t timer_elapsed(uint16_t last)
     t = timer_count;
     SREG = sreg;
 
-    return TIMER_DIFF(t, last);
+    return TIMER_DIFF_MS(t, last);
 }
 
-// This interrupt routine is run approx 61 times per second.
-// A very simple inactivity timeout is implemented, where we
-// will send a space character and print a message to the
-// hid_listen debug message window.
-ISR(TIMER0_OVF_vect)
+// excecuted once per 1ms.(excess for just timer count?)
+ISR(TIMER0_COMPA_vect)
 {
     timer_count++;
 }