#include #include #include #include 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(); } }