GICR Register des ATmega8
Bit 7 bis 6 – Werden später beschrieben
Bit 5 bis 2 – Res: Reservierte Bits
Diese Bits sind reserviert und werden immer als 0 gelesen.
Bit 1 – IVSEL: Interrupt Vektor Select
Wenn das IVSEL-Bit gelöscht ist, liegen alle Interrupt-Vektoren am Anfang des Programmspeichers. Wenn das Bit auf 1 gesetzt wird, liegen alle Interrupt-Vektoren am Anfang des Boot-Sektors. Die aktuelle Adresse des Anfangs des Boot-Sektors wird durch die BOOTSZ Fuses bestimmt. Um unkontrollierte Verschiebungen der Interrupt-Vektoren zu verhindern, ist eine spezielle Sequenz für das Ändern des IVSEL-Bist erforderlich:
1. Schreiben einer 1 in das IVCE-Bit
2. Innerhalb von vier Taktzyklen schreiben des neuen Wertes für das ICSEL-Bit bei gleichzeitigem Löschen des IVCE-Bits.
Die Interrupts werden automatisch gesperrt, während diese Sequenz ausgeführt wird. Die Sperre beginnt mit dem Setzen des IVCE-Bits und sie bleibt so lange erhalten, bis der neue Wert in des ICSEL-Bit geschrieben wurde oder die vier Taktzyklen vorüber sind. Dass I-Bit im Status-Register bleibt von diesen Vorgängen unberührt.
Hinweis:
Wenn die Interrupt-Vektoren im Boot-Sektor liegen und das Boot Lock Bit BLB02 programmiert ist, sind die Interrupts gesperrt, während der Programmteil im Applikations-sektor ausgeführt wird. Umgekehrt gilt, dass, wenn die Interrupt-Vektoren im Applikations-Sektor liegen und das Boot Lock Bit BLBV12 programmiert ist, die Interrupts gesperrt sind, wenn ein Programmteil im Boot-Sektor abgearbeitet wird.
Bit 0 – IVCE: Interrupt Vector Change Enable
Das IVCE Bit muss mit einer 1 beschrieben werden, um das Ändern des IVSEl-Bits freizugeben. Das IVCE-Bit wird durch die Hardware automatisch gelöscht, wenn nach dem Setzen des Bits vier Taktzyklen vergangen sind oder das ICSEL-Bit beschrieben wird. Durch das Setzen des IVCE Bits werden alle Interrupts wie in den Erklärungen zum IVSEL-Bit beschrieben, gesperrt.
Codebeispiel Interrupt Vektoren ändern