diff options
author | Jakob Odersky <jodersky@gmail.com> | 2014-01-24 20:10:45 +0100 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2014-01-24 20:10:45 +0100 |
commit | 6cdf34b0e87bc915de39a6d5817980a825a720da (patch) | |
tree | 1b8710106c0201ecad5e199099b4f084795b96ea /kernel/time/mcu | |
download | mux-6cdf34b0e87bc915de39a6d5817980a825a720da.tar.gz mux-6cdf34b0e87bc915de39a6d5817980a825a720da.tar.bz2 mux-6cdf34b0e87bc915de39a6d5817980a825a720da.zip |
initial commit
Diffstat (limited to 'kernel/time/mcu')
-rw-r--r-- | kernel/time/mcu/atmega2560/timer.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/kernel/time/mcu/atmega2560/timer.c b/kernel/time/mcu/atmega2560/timer.c new file mode 100644 index 0000000..663df02 --- /dev/null +++ b/kernel/time/mcu/atmega2560/timer.c @@ -0,0 +1,31 @@ +#include <avr/interrupt.h> +#include "sched/sched.h" +#include "time/timer.h" + +void timer_init() { + cli(); + TCCR3A = 0; + TCCR3B = 0; + TCCR3C = 0; + + TCCR3B = (1 << WGM32); // turn on CTC mode: + TCCR3B |= (1 << CS32) | (0 << CS31) | (1 << CS30); // set to 1024 prescaler + OCR3A = 770; + sei(); +} + +void timer_start() { + TIMSK3 |= (1 << OCIE3A); +} + +void timer_stop() { + TIMSK3 &= ~(1 << OCIE3A); +} + +ISR(TIMER3_COMPA_vect, ISR_NAKED) { + SAVE_CONTEXT(); + sched_tick(); + sei(); + RESTORE_CONTEXT(); + asm volatile ("reti"); +} |