Forum: Mikrocontroller und Digitale Elektronik Priorisierung der Interrupts änderbar?


von Matthias K. (john_connor)


Lesenswert?

Hallo,
kann die Priorität von Interrupts bei Atmel Mikrocontrollern geändert 
werden?
Im AVR-Tutorial dieser Webseite (welches sich auf den ATmega8 bezieht) 
steht :
„Wenn ein Interrupt auftritt, dann springt die Programmausführung an 
eine bestimmte Stelle im Programmspeicher. Diese Stellen sind festgelegt 
und können nicht geändert werden:“
Zumindest die Änderung der Priorisierung der Interrupts eines ATmega8 
Mikrocontrollers ist also NICHT möglich.
Im Datenblatt des ATmega128 habe ich nun einen interessanten Abschnitt 
gefunden:

The most typical and general program setup for the Reset and Interrupt 
Vector Addresses in ATmega128 is:

Address LabelsCode Comments
$0000 jmp RESET ; Reset Handler
$0002 jmp EXT_INT0 ; IRQ0 Handler
$0004 jmp EXT_INT1 ; IRQ1 Handler



Die Formulierung deutet für mich daraufhin dass die Adressen (und damit 
die Priorität der Interrupts?!) vertauscht werden können.

Meine Frage: Ist die Änderung der Priorisierung der Interrupts zumindest 
für den ATmega128 möglich?

von Karl H. (kbuchegg)


Lesenswert?

Matthias Klatt schrieb:

> Meine Frage: Ist die Änderung der Priorisierung der Interrupts zumindest
> für den ATmega128 möglich?

Nein.
Die Adressen liegen fest und können nicht geändert werden.

Der Grund, warum man das Ganze ganz gerne mit Adressen schreibt
1
Address LabelsCode Comments
2
$0000 jmp RESET ; Reset Handler
3
$0002 jmp EXT_INT0 ; IRQ0 Handler
4
$0004 jmp EXT_INT1 ; IRQ1 Handler

besteht darin, dass man dann leicht Änderungen im Code machen kann, ohne 
groß aufpassen zu müssen. Gesetz den Fall du brauchst den IRQ0 nicht, 
dann löscht du einfach die Zeile raus
1
Address LabelsCode Comments
2
$0000 jmp RESET ; Reset Handler
3
$0004 jmp EXT_INT1 ; IRQ1 Handler

und alles stimmt trotzdem wieder

von Uwe .. (uwegw)


Lesenswert?

Nein. Die Formulierung bezieht sich darauf, dass sich bei der Verwendung 
eines Bootloaders die Adressen aller Interruptvektoren um die Größe des 
Bootloader-Bereiches verschieben. Die Reihenfolge bleibt also gleich.

von Oliver (Gast)


Lesenswert?

>Meine Frage: Ist die Änderung der Priorisierung der Interrupts zumindest
>für den ATmega128 möglich?

Kurz und knapp : Nein.

Die Adressen, die im Falle eines Interrups angesprungen werden, sind 
fest verdrahtet und lassen sich nicht ändern.

Der Satz:
>The most typical and general program setup The most typical and general >program 
setup ...

bezieht sich wohl eher darauf, daß man an diese Speicherstellen auch was 
ganz anderes schreiben kann, wenn man genau weiß, was man tut.
Wobei die "Priorisierung" beim AVR sowieso nur dann zum Tragen kommt, 
wenn mehrere Interrupts gleichzeitig anstehen. Dann wird zuerst der mit 
der höchsten Priorität ausgeführt. Ansonsten gilt: first come, first 
serve.

Oliver

von Matthias K. (john_connor)


Lesenswert?

An alle:
Vielen Dank für die schnellen und verständlichen Antworten!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.