#include "main.h" #include "spi.h" uint16_t foo = 0xfefe; uint8_t bar = 0xee; void baz() { } void hardinit() { /* initializes the hardware */ // enable softtimer isr TCCR1A = _BV(WGM10); TCCR1B = _BV(WGM12) | _BV(CS11); // clk/8 prescaler, 4kHz PWM-freq. TIMSK1 |= _BV(TOIE1); spi_init(); 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; } }