Forum: Mikrocontroller und Digitale Elektronik ISR-Vektor zwingend erforderlich?


von ISR (Gast)


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

von holger (Gast)


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.

von ISR (Gast)


Lesenswert?

...d.h., wenn der entsprechende Interrupt_Flag_Enable gesetzt ist, dann 
"sucht" der Controller einen korrespondierenden Interruptvektor?

mfg

von STK500-Besitzer (Gast)


Lesenswert?

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.

von Hans (Gast)


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.

von Karl H. (kbuchegg)


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

von holger (Gast)


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.

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.