www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie kann ich das SREG auf den Stack kopieren?


Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

mal ne allgemeine Frage zum AVR Controller:

Wenn ein Timer Interrupt aufgerufen wird, so wird das Prog an der
aktuellen Stelle unterbrochen und die Interrupt Service Routine
aufgerufen. Gibt es eine Möglichkeit Das SREG auf den Stack zu legen
und danach wieder zu holen?
Beim Z80 Habe ich immer PUSH AF und POP AF werwendet.
Oder ist es bessser in der Interrupt Routine nur irgend ein Flag zu
setzten und es dann Später im Programm abzuarbeiten? Dann hätte man
aber gleich auf das ganze Interrupt Zeug verzichten können und die
Flags in eine Schleife abfragen.

Viele Grüße
Horst

Autor: Dirk B (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So mach ich das beim Atmega 128 bei einer Interruptroutine in
Assembler:


SREG    = 0x3F

.macro  PUSHSREG
                in      r16,SREG
                push  r16
.endm

.macro  POPSREG
                pop    r16
                out    SREG,r16
.endm

Autor: dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vergiss aber nicht, r16 davor zu PUSHen und danach wieder (blödes Wort)
zu POPen, sonst bringt das mit SREG auch nicht allzu viel, weil man ja
r16 oft für was andres noch verwendet.

dave

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok alles klar - dankeschön!

Muß mich noch dran gewöhnen, das bei dem Ding alles mit IN/OUT Befehlen
funzt.

Grüße Horst

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei kleineren oder zeitkritischen Projekten kann es auch sinnvoll sein,
ein Register exclusiv für das SREG zu nutzen. Das erspart die
Stackzugriffe, die bei einigen Tinys mangels SRAM sowiso nicht möglich
sind. Es bleibt also bei einem IN srkopie,sreg und einem
OUT sreg,srkopie und kostet zwar ein Register Exclusiv, aber nur 2
Takte...

Guten Rutsch...
...HanneS...

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
richtig, und dafür kann man prima eins der sonst eher weniger
verwendeten unteren Register nehmen.
Und solange man keine verschachtelten Ints benutz, reicht ein Register,
um das sreg in allen ISRs zu sichern.

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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