ISR-Vektor zwingend erforderlich?

Gast #2759306
hallo,

mal (wieder) eine dumme Frage.

Ist es zwingend erforderlich, dass der ISR-Vektor vorhanden ist, wenn 
man mit dem entsprechenden Interruptflag arbeiten möchte?`

Konkret geht es um das Senden mit der UART-Schnittstelle.

Der (typische) Aufbau einer Senderoutine ist ja in etwa so

>while(!(TX-Flag-gesetzt);
>Schiebe_Byte_in_TX_Buffer();

Ist es nun zwingend erforderlich, den ISR-Vektor vorhanden zu haben, 
wenn man mit diesem Konstrukt arbeitet oder geht es auch ohne?

prinzipiell verharrt der Programmcounter doch sowieso dort, wo er gerade 
steht, so dass ein Hin- und Herspringen in eine (leere) ISR doch 
irgendwie sinnfrei wäre...

mfg

PS.: Handelt sich um den MSP430 und die IAR emb. Workbench
Gast #2759315
>Ist es nun zwingend erforderlich, den ISR-Vektor vorhanden zu haben,
>wenn man mit diesem Konstrukt arbeitet oder geht es auch ohne?

Es ist oft möglich das Interrupt Flag für Polling zu benutzen.
Man sollte dann aber auf keinen Fall den Interrupt einschalten.
Gast #2759418
ISR schrieb:
> ...d.h., wenn der entsprechende Interrupt_Flag_Enable gesetzt ist, dann
> "sucht" der Controller einen korrespondierenden Interruptvektor?

Jepp.
Das Flag selbst wird gesetzt, sobald das zugehörige Ereignis eintritt.
Gast #2759419
Du brauchst den ISR-Vektor nicht zu setzen, nein! Vorausgesetzt, du 
enablest für das IFG auch NICHT die Interrupts. Das IFG kannst du 
einfach pollen, ohne eine ISR. Das ändert seinen Status auch so, 
"Interrupts enabled" hin oder her, nur das im letzteren Fall eben in die 
ISR verzweigt.

Was du aber nicht machen solltest, ist die Interrupts aktivieren und 
keinen Vektor dazu zu haben, das kann in die Hose gehen.
#2759421
ISR schrieb:
> ...d.h., wenn der entsprechende Interrupt_Flag_Enable gesetzt ist, dann
> "sucht" der Controller einen korrespondierenden Interruptvektor?

Wie das beim MSP ist, weiß ich nicht auswendig.
Wird aber auch nicht anders sein als beim AVR

Der sucht gar nichts. Kommt der Interrupt und ist dieser auch 
freigegeben dann springt er eine bestimmte Adresse an und holt sich den 
Befehl der dort steht. Was immer der auch sein mag.
Nicht vergessen: Auf dieser Ebene, auf der wir hier programmieren, hat 
das Teil keine 'Intelligenz' mehr. Das sind alles starre Abläufe, die 
immer gleich laufen und die so primitiv ablaufen, wie du dir das nur 
vorstellen kannst.
Dein Compiler kann eine gewisse 'Intelligenz' mitbringen, in dem er an 
die bewusste Adresse einen Return plaziert, so dass es de facto aus MSP 
Sicht eine sinnvolle ISR gibt. Das macht aber der Compiler. Dem µC ist 
das piepschnurzegal.

(Beim Win-AVR wird an die bewussten Interrupt Vektoren ein Sprung zu 
einer Routine eingebaut, die den µC mehr oder weniger resettet, so dass 
das Programm wieder von vorne wegläuft. D.h. hier ist es gar keine gute 
Idee einen Interrupt freizugeben und KEINE ISR dafür zu haben.)
Gast #2759422
>...d.h., wenn der entsprechende Interrupt_Flag_Enable gesetzt ist, dann
>"sucht" der Controller einen korrespondierenden Interruptvektor?

Nö, der sucht nicht danach. Der springt an den Interruptvektor
der ihm irgendwie vorgegeben wurde. Wenn an diesem Vektor
keine vernünftige Interruptroutine vorhanden ist springt er in die
Pampa und läuft evtl. im Speicher mit unvorhersehbaren Folgen Amok.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.