www.mikrocontroller.net

Forum: Compiler & IDEs ATMEGA128L USART Interrup Problem


Autor: Skittler Bruce (skittler)
Datum:
Angehängte Dateien:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Skittler Bruce (skittler)
Datum:

Bewertung
0 lesenswert
nicht 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.
:(

Autor: Sepp H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

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

Autor: Skittler Bruce (skittler)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur so nebenbei:

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.

Autor: Skittler Bruce (skittler)
Datum:

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

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.