#include "main.h" #include "spi.h" void hardinit() { /* initializes the hardware */ // enable softtimer isr TIMSK1 |= _BV(TOIE1); sei(); } void softinit() { } int __attribute__((noreturn)) main(void) { hardinit(); softinit(); for(;;){ SOFTTIMER(1,500) { // do_stuff(); } } } ISR(TIMER1_OVF_vect,ISR_NOBLOCK){ uint16_t tmp; tmp=timer1_acc; tmp++; /* the ATOMIC is acutally only needed if timer1_acc is never read from an ISR, which * is probably the case. * ATOMIC_FORCEON: the ISR_NOBLOCK sets sei() a few cycles before. */ ATOMIC_BLOCK(ATOMIC_FORCEON){ timer1_acc=tmp; } }