Hallo,
ich habe gerade ein Problem mit dem Einsprung in eine Interruptroutine.
ich habe meinen Interruptvector wie folgt gestezt
1 | .CSEG
|
2 | .ORG 0x0000
|
3 | jmp RESET ; Reset Handler
|
4 | reti; jmp ANA_COMP_0 ; Analog Comparator 0 Handler
|
5 | reti; jmp ANA_COMP_1 ; Analog Comparator 1 Handler
|
6 | reti; jmp ANA_COMP_2 ; Analog Comparator 2 Handler
|
7 | reti; jmp ANA_COMP_3 ; Analog Comparator 3 Handler
|
8 | .....
|
9 |
|
10 | Reset:
|
11 | ldi r16, high(RAMEND)
|
12 | out SPH,r16
|
13 | ldi r16, low(RAMEND)
|
14 | out SPL,r16
|
Im Datenblatt habe ich folgende Adressen gefunden
1 | Address Labels Code Comments
|
2 | 0x000 jmp RESET ; Reset Handler
|
3 | 0x002 jmp ANA_COMP_0 ; Analog Comparator 0 Handler
|
4 | 0x004 jmp ANA_COMP_1 ; Analog Comparator 1 Handler
|
5 | 0x006 jmp ANA_COMP_2 ; Analog Comparator 2 Handler
|
6 | 0x008 jmp ANA_COMP_3 ; Analog Comparator 3 Handler
|
7 | ......
|
im disassembler stimmen diese aber nicht überein
1 | 28: jmp RESET ; Reset Handler
|
2 | +00000000: 940C0022 JMP 0x00000022 Jump
|
3 | 29: reti; jmp ANA_COMP_0 ; Analog Comparator 0 Handler
|
4 | +00000002: 9518 RETI Interrupt return
|
5 | 30: reti; jmp ANA_COMP_1 ; Analog Comparator 1 Handler
|
6 | +00000003: 9518 RETI Interrupt return
|
7 | 31: reti; jmp ANA_COMP_2 ; Analog Comparator 2 Handler
|
8 | +00000004: 9518 RETI Interrupt return
|
9 | 32: reti; jmp ANA_COMP_3 ; Analog Comparator 3 Handler
|
10 | +00000005: 9518 RETI Interrupt return
|
der Abstand 0000, 0002, 0004.... sieht nur noch so aus 0000, 0002, 0003,
0004
Wenn ich ein Interrupt Flag setze lande ich nicht in der
Interruptvectortabelle sondern mitten im Programm.
Womit könnte dieser Versatz zusammenhängen?