sgikbd initial commit (based on a500kbd: https://github.com/jtsiomb/a500kbd)
[sgikbd] / fw / src / timer.c
1 #include <avr/io.h>
2 #include <avr/interrupt.h>
3 #include <avr/power.h>
4 #include "timer.h"
5
6 #define PRESCL_256      4
7 /* 256 ticks per interrupt, 256 clock divisor */
8 #define TICKS_PER_SEC   (F_CPU / 256 / 256)
9
10 static volatile unsigned long ticks;
11
12 void init_timer(void)
13 {
14         power_timer0_enable();
15
16         TCCR0A = 0;
17         TCCR0B = PRESCL_256;
18
19         TIMSK0 |= (1 << TOIE0); /* enable ovf intr. */
20 }
21
22 void reset_timer(void)
23 {
24         ticks = 0;
25 }
26
27 unsigned long get_msec(void)
28 {
29         return 1000 * ticks / TICKS_PER_SEC;
30 }
31
32 ISR(TIMER0_OVF_vect)
33 {
34         ++ticks;
35 }