Forum: Compiler & IDEs ATMEGA128L USART Interrup Problem


von Skittler B. (skittler)


Angehängte Dateien:

Lesenswert?

Guten Morgen,

hatte jemand von euch schon einmal das Problem das nach einem Interrup 
das Programm wieder von beginn der main() läuft?

Ich benutze einen atmega128L. In der Main passiert nichts aufregendes, 
nur das eine LED blinkt. Ich habe eine RS232 Interrupt gesteuerte 
Empfangsroutine, welche auch sauber aufgerufen wird. Allerdings wird 
beim verlassen dieser Routine die Main wieder von vorne durchlaufen und 
nicht einfach in der while(1) weiter gemacht.
Anbei mal der Code. Ich habe sehr viele RS232 ausgaben hier und da 
eingebaut. Diese sind zum Debuggen gedacht.

Vielleicht hat ja jemand eine Idee was ich nicht beachtet habe.

Danke und Gruß.

von Peter D. (peda)


Lesenswert?

Skittler Bruce wrote:
> hatte jemand von euch schon einmal das Problem das nach einem Interrup
> das Programm wieder von beginn der main() läuft?

Nen Interrupt ohne Handler freigegeben und keinen eigenen BADISR-Handler 
aufgesetzt.


Peter

von Skittler B. (skittler)


Lesenswert?

Hi,
danke für die Antwort, aber wenn du im Source guckst, wirst du sehen das 
ich einen eigenen BADISR Handler habe. In diesem gebe ich auch eine 
ausgabe da ich genau an dieses Problem dachte. Doch der BADISR HAndler 
wird nicht aufgerufen.
:(

von Sepp H. (Gast)


Lesenswert?

Guten Morgen,

was sollen eigentlich die Zugriffe auf das global Interruptflag in der 
ISR?
1
asm ("cli");
2
asm ("nop");

von Skittler B. (skittler)


Lesenswert?

Das ist auch ein versuch das Problem zu lösen.
Doch mit oder ohne diese Zugriffe besteht das selbe Problem.
-Die Fliegen auch wieder raus...

von Peter D. (peda)


Lesenswert?

Skittler Bruce wrote:
> Hi,
> danke für die Antwort, aber wenn du im Source guckst, wirst du sehen das
> ich einen eigenen BADISR Handler habe. In diesem gebe ich auch eine
> ausgabe da ich genau an dieses Problem dachte. Doch der BADISR HAndler
> wird nicht aufgerufen.


Dann die üblichen Pitfalls:
M103-Fuse
Watchdog-Fuse


Peter

von Stefan E. (sternst)


Lesenswert?

Nur so nebenbei:

1
UCSR0A&= 0x7F;    //RXC flag loeschen

1) Das ist ein Read-Only-Flag, das kannst du gar nicht löschen.

2) Solche Flags werden durch Schreiben einer Eins gelöscht. Die obige 
Anweisung löscht daher das TXC-Flag.

von Skittler B. (skittler)


Lesenswert?

Heureka,

danke Peter, es ist das M103-Fuse.
Der Controller war im ATmega103 Compatibility Mode.

Wenigstens kann ich nach den 5 Stunden nun sagen das ich was dazu 
gelernt habe =).

Vielen Dank an alle.

Gruß Skittler

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.