Dieser Abschnitt beschreibt die Behandlung der Interrupts des ATmega8.
Interruptadressen des ATmega8
Hinweise:
(1) Wenn die BOOTRST Fuse programmiert ist, dann springt der Baustein an die Reset-Adresse im Boot-Sektor
(2) Wenn das IVSEL-Bit im GICR-Register gesetzt ist, werden alle Interrupt-Vektoren an den Beginn des Boot-Sektors verschoben. Die Einsprungadresse der Interrupts ergibt sich dann aus der angegebenen Adresse plus der Startadresse des Boot-Sektors.
Die nachfolgende Tabelle zeigt die Lage der Interrupt und des Reset-Vektors bei den verschiedenen Kombinationen der BOOTRST- und IVSEL-Einstellungen. Wenn ein Programm nie Interrupts freigibt, so werden die Interrupt-Vektoren nicht benötigt, und das Hauptprogramm kann ab der Reset-Adresse liegen. Das gilt auch für den Fall, in dem der Reset-Vektor im Applikation-Sektor und die Interrupt-Vektoren im Boot-Sektor liegen bzw. umgekehrt.
Interrupt und Reset-Vektor des ATmega8
Typischerweise sieht es in einem Programm wie folgt aus:
Interrupt Beispiel Code 1
Wenn die BOOTRST Fuse unprogrammiert ist, die Größe des Boot-Sektors 2 k Byte beträgt und das IVSEL-Bit im GICR-Register gesetzt wird, bevor irgendein Interrupt freigegeben wird, dann sieht ein typisches Programm etwa so aus.
Interrupt Beispiel Code 2
Wenn die BOOTRST Fuse programmiert ist und der Boot-Sektor eine Größe von 2 k Bytes hat, dann sieht eine Programm typischerweise so aus:
Interrupt Beispiel Code 3
Wenn die BOOTRST Fuse programmiert ist, die Größe des Boot-Sektors 2 k Byte beträgt und das IVSEL-Bit im GICR-Register gesetzt wird, bevor irgendein Interrupt freigegeben wird, dann sieht ein typisches Programm etwa so aus.
Interrupt Beispiel Code 4