41 lines
536 B
C
41 lines
536 B
C
|
#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();
|
||
|
}
|
||
|
}
|
||
|
|