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
>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.
...d.h., wenn der entsprechende Interrupt_Flag_Enable gesetzt ist, dann "sucht" der Controller einen korrespondierenden Interruptvektor? mfg
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.
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.
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.)
>...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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.