ISR-Vektor zwingend erforderlich?

Gast #2759306
Lesenswert?

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
Lesenswert?

>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 #2759419
Lesenswert?

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
Lesenswert?

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
Lesenswert?

>...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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren