pentabug/firmware/lib/timer.c

41 lines
536 B
C
Raw Normal View History

2012-10-13 16:30:26 +02:00
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <lib/timer.h>
timer_cb cur_cb;
void start_timer(timer_cb cb) {
cur_cb = cb;
cli();
/* set timer0 to CTC & prescaler 64 → 125kHz increment */
TCCR0A = (1 << WGM01);
TCCR0B = (1 << CS00) | (1 << CS01);
OCR0A = 4; /* TOP */
TCNT0 = 0;
/*enable interrupt */
TIMSK0 |= (1 << OCIE0A);
sei();
}
void stop_timer(void) {
cli();
TIMSK0 = 0;
sei();
cur_cb = NULL;
}
ISR(TIMER0_COMPA_vect,ISR_NOBLOCK) {
if(cur_cb != NULL) {
cur_cb();
}
}