Speicherverlust bei Interrupt

Gast #1418779
Lesenswert?

Hallo,

ich habe einen Interrupt-gesteuerten Timer gebastelt, der mir sec, min, 
hour über usart ausgeben soll. funktioniert auch soweit.

jetzt habe ich zusätzlich einen Externen Interrupt eingebaut, der es mir 
erlaubt die Zeit nur auf Tastendruck über die serielle schnittstelle 
auszugeben. Dabei rufe ich meine "usart_tx"-funktion in der ISR() des 
externen Inetrrupts auf.

Das Problem ist:
nach jedem Externen Interrupt, beginnt der Timer wieder von vorne. 
sprich die werte (sec, min, h) werden zurückgesetzt.

woran liegt das, muss ich die Timer-Variablen irgendwo sichern/kopieren, 
bevor ich sie an die Uart-Ausgabe übergebe? habe sie als "volatile 
unsigned int" deklariert.

Danke im Voraus
Gast #1418800
Lesenswert?

Hallo Thom,

beim Eintritt in die Interruptroutine solltes du die Register, die du 
veränderst mit PUSH auf dem Stack sichern. Und am Ende mit POP in 
umgekehrter Reihenfolge wieder herstellen (FILO).

Gruß
Stefan
Gast #1418851
Lesenswert?

"Wenn ich bei meinem Auto zuviel Gas gebe, klapperts vorne links. Was 
ist da nicht in Ordnung?"

Das kann ungefähr 328 verschiedene Gründe haben. Ohne Source darfst Du 
mehr als irgendwelche Ins-Blaue-Vermutungen nicht erwarten.
Gast #1419539
Lesenswert?

den hab ich noch wegen der auskommentierten pwm-ausgabe aktiviert. das 
problem bleibt aber bestehen, auch wenn ich den timer1 compare-match 
interrupt nicht aktiviere.
du meinst doch das setzen des OCIE1A-Bits, oder? (TIMSK =(1<<OCIE1A)
#1419589
Lesenswert?

Du hast auch noch den Transmit Complete Interrupt enabled ohne einen 
Handler dafür zu haben.

Wenn dein µC resettet, dann hat das meistens 2 Ursachen
* ein Hardwareproblem, welches die Versorgungsspannnug versaut
* irgendein Interrupt, für den es keinen Handler gibt ist eingeschaltet.
  Sowas findet man, indem man alle Konfigurationen durchgeht und
  nachsieht welche Bits in die Konfig-Register geschrieben werden.
  Und zwar ausnahmslos alle!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren