diff options
Diffstat (limited to 'avr/timer.c')
-rw-r--r-- | avr/timer.c | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/avr/timer.c b/avr/timer.c new file mode 100644 index 0000000..67b4a49 --- /dev/null +++ b/avr/timer.c @@ -0,0 +1,86 @@ +/* + */ + + +#include "common.h" + +#include <avr/interrupt.h> +#include <util/atomic.h> + +//#include <stdio.h> + + +#include "timer.h" + +/* timer interrupt/overflow counter */ +volatile uint32_t timestamp; + + +/*---------------------------------------------------------*/ +/* 1000Hz timer interrupt generated by OC3A */ +/*---------------------------------------------------------*/ + +ISR(TIMER3_COMPA_vect) +{ + static int_fast8_t tick_10ms; + int_fast8_t i; + + + timestamp++; + + i = tick_10ms + 1; + if (i == 10) { + i = 0; + Stat |= S_10MS_TO; + + /* Drive timer procedure of low level disk I/O module */ + //disk_timerproc(); + } + tick_10ms = i; + +} + + + +/*--------------------------------------------------------------------------*/ + +#if 0 + +void do_10ms(void) +{ + if (to_counter) + to_counter--; +} + +#endif + +/*--------------------------------------------------------------------------*/ + + +#if 0 +void timer_setup(void) +{ + + /* Clock */ + CLKPR = _BV(CLKPCE); + CLKPR = 0; + + /* Timer */ + + OCR1A = F_CPU / 1000 - 1; // Timer1: 1000Hz interval (OC1A) + TCCR1B = 0b00001001; + TIMSK1 = _BV(OCIE1A); // Enable TC1.oca interrupt +} +#endif + +uint32_t get_timer(uint32_t base) +{ + uint32_t ret; + + ATOMIC_BLOCK(ATOMIC_FORCEON) + { + ret = timestamp; + } + return ret - base; +} + |