rendered paste body .include "m128def.inc"
.org $0000
rjmp RESET
.org INT0addr
rjmp INTv
.org INT1addr
rjmp INTv
.org INT2addr
rjmp INTv
.org $0046
RESET:
; inicijaliziramo stack
ldi r16, LOW(RAMEND)
out SPL, r16
ldi r16, HIGH(RAMEND)
out SPH, r16
; omogucimo interrupt
sei
MAIN:
rjmp MAIN
; INTx vektor - odredi koju rutinu pozvati
INTv:
in r0, GICR
; prebaci u r16 da mozemo koristit cpi
mov r16, r0
cpi r16, 1 ; int0?
breq INT0POZIV
cpi r16, 2 ; int1?
breq INT1POZIV
cpi r16, 4 ; int2?
breq INT2POZIV
rjmp INTvKRAJ
INT0POZIV:
; da li se obraduje visi prioritet?
mov r16, r15
cpi r16, 2
brge INTvKRAJ
ldi r16, 1
mov r15, r16
sei
rcall INT00
rjmp INTvKRAJ
INT1POZIV:
; da li se obraduje visi prioritet?
mov r16, r15
cpi r16, 3
brge INTvKRAJ
ldi r16, 2
mov r15, r16
sei
rcall INT01
rjmp INTvKRAJ
INT2POZIV:
ldi r16, 3
mov r15, r16
sei
rcall INT02
INTvKRAJ:
reti
INT00:
nop
nop
nop
nop
nop
inc r10
clr r15
ret
INT01:
nop
nop
nop
nop
nop
inc r11
clr r15
ret
INT02:
nop
nop
nop
nop
nop
inc r12
clr r15
ret