Forum: Mikrocontroller und Digitale Elektronik MSP430 aus Statusregister Hilfe!


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Boris B. (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.