Die ISR als
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
uint32_t volatile system_timer;
ISR(...,ISR_NAKED)
{
static uint8_t prescaler;
asm volatile (" ... " :: "s" (&prescaler), "s" (&system_timer));
}
und als asm ... ohne Gewähr (den quoten darfst selber
)
Code:
push r24
in r24,__SREG__
push r24
lds r24, %0
subi r24,-1
cpi r24,100
brne 0f
lds r24, %1
subi r24, -1
sts %1, r24
lds r24, %1+1
sbci r24, -1
sts %1+1, r24
lds r24, %1+2
sbci r24, -1
sts %1+2, r24
lds r24, %1+3
sbci r24, -1
sts %1+3, r24
ldi r24,0
0:
sts %0,r24
pop r24
out __SREG__,24
pop r24
reti
Lesezeichen