Forum: Mikrocontroller und Digitale Elektronik MSP430 aus Statusregister Hilfe!


von Boris B. (Gast)


Lesenswert?

Hallo Leute,
ich bin Anfänger in der Programmierung und lerne gerade mit MSP430 
launchPad und versuche ich zu verstehen:
weshalb der Wert des Statusregisters des MSP430 bei jedem Sprung in eine 
Interrupt Service Routineauf den Stack gerettet werden  muss, und 
weshalb  dies  nicht  bei  jedem  Sprung  in  ein  Unterprogramm 
notwendig ist.

Herzlichen Dank erst einmal.
Beste Grüße

von leo (Gast)


Lesenswert?

Barel S. schrieb:
> weshalb der Wert des Statusregisters des MSP430 bei jedem Sprung in eine
> Interrupt Service Routineauf den Stack gerettet werden  muss,

Du springst nicht in eine ISR, der Prozessor macht das, und resettet 
dabei das Interrupt Enable Bit (GIE):
https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/368459?Interrupt-Processing-Status-Register-Behavior
GIE spielt bei normalen Funtionsaufrufen keine Rolle.

leo

von Gerald K. (geku)


Lesenswert?

Dadurch werden die im Statusregister befindlichen Flag gesichert und 
nach der Rückkehr aus der Interruptroutine wieder hergestellt.

Beispiel : es könnte sein, dass im unterbrochenen Programm gerade eine 
Addition durchgeführt wird und das Überlaufflag im SR gesetzt wurde. In 
der Interruptroutine wird das Uberlauffag von dieser auch benutzt und 
dabei zurück gesetzt. Wird die Interruptroutine beendet, dann würde ohne 
Restaurierung des SRs die Addition mit einem falschen Übertrag 
fortgesetzt werden. Das gilt ach für die anderen Inhalte des SRs. Das 
"User Manuel" macht schlau.

von Gerald K. (geku)


Lesenswert?

leo schrieb:
> Du springst nicht in eine ISR, der Prozessor macht das, und resettet
> dabei das Interrupt Enable Bit (GIE):

Das wird gemacht um zu verhindern, das Interrupts automatisch durch 
weitere Interrups unterbrochen werden können. Will man das zulassen, 
dann muss man das GIE Flag in der Interruptroutine  setzten.

von Hermann K. (r2d2)


Lesenswert?

Du musst das Statusregister sichern, weil der Interrupt jederzeit im 
normalen Programmablauf stattfinden kann. Dann würden wie Gerald K. 
schon schreibt ggf. die Flags durch die ISR zerstört.

Bei einem normalen Sprung in ein Unterprogramm ist das nicht nötig, da 
der Compiler hier weiß, dass das Statusregister verändert wird und er 
sich demzufolge nach der Rückkehr aus dem Unterprogramm nicht auf 
irgendwelche Flags verlassen darf.

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.