die Interrupt Tabelle ist IMHO auch falsch
1 | ;
|
2 | ; Interrupt-Sprungleiste für ATMeag32
|
3 | ;
|
4 | rjmp RESET ; Reset Handler
|
5 | reti ;rjmp EXT_INT0 ; IRQ0 Handler
|
6 | reti ;rjmp EXT_INT1 ; IRQ1 Handler
|
7 | reti ;rjmp EXT_INT2 ; IRQ2 Handler
|
8 | reti ;rjmp TIM2_COMP ; Timer2 Compare Handler
|
9 | rjmp TIM2_OVF ; Timer2 Overflow Handler (8 Bit Zähler)
|
10 | reti ;rjmp TIM1_CAPT ; Timer1 Capture Handler
|
11 | reti ;rjmp TIM1_COMPA ; Timer1 CompareA Handler
|
12 | reti ;rjmp TIM1_COMPB ; Timer1 CompareB Handler
|
13 | reti ;rjmp TIM1_OVF ; Timer1 Overflow Handler (16 Bit Zähler)
|
14 | reti ;rjmp TIM0_COMP ; Timer0 Compare Handler
|
15 | reti ;rjmp TIM0_OVF ; Timer0 Overflow Handler ( 8 Bit Zähler)
|
16 | reti ;rjmp SPI_STC ; SPI Transfer Complete Handler
|
17 | reti ;rjmp USART_RXC ; USART RX Complete Handler
|
18 | reti ;rjmp USART_UDRE ; UDR Empty Handler
|
19 | reti ;rjmp USART_TXC ; USART TX Complete Handler
|
20 | reti ;rjmp ADC ; ADC Conversion Complete Handler
|
21 | reti ;rjmp EE_RDY ; EEPROM Ready Handler
|
22 | reti ;rjmp ANA_COMP ; Analog Comparator Handler
|
23 | reti ;rjmp TWSI ; Two-wire Serial Interface Handler
|
24 | reti ;rjmp SPM_RDY ; Store Program Memory Ready Handler
|
25 | ;
|
auf einem Mega32 liegen die Interrupt Vektoren, nicht wie auf einem
Mega8 auf aufeinanderfolgenden Adressen, sondern auf jeweils geraden
Adressen.
Du kannst dir selbst das Leben um einiges einfacher machen, wenn du dich
nicht auf die implizite Adressvergabe aufgrund der Anzahl der reti
Befehle verlässt, sondern indem du dem Assembler die jeweilige Adresse,
an der der reti zu positionieren ist, explizit mit einem .org angibst.
Dazu hat Atmel jeweils passende Namen in das inc-File eingefügt
1 | ;
|
2 | ; Interrupt-Sprungleiste für ATMeag32
|
3 | ;
|
4 | rjmp RESET ; Reset Handler
|
5 | .org INT0Addr
|
6 | reti ;rjmp EXT_INT0 ; IRQ0 Handler
|
7 | .org INT1Addr
|
8 | reti ;rjmp EXT_INT1 ; IRQ1 Handler
|
9 | .org INT2Addr
|
10 | reti ;rjmp EXT_INT2 ; IRQ2 Handler
|
11 | .org ...
|
Ich weiss jetzt die Namen aller Interrupt Vektoren auch nicht auswenig.
Aber du kannst dir das "m32def.inc" File aufmachen und dort reinschauen.
Die müssen da drinnen alle irgendwo gesammelt vorkommen. Verwende sie in
der angegebenen Art und Weise und du hast weniger Probleme.