mikrocontroller.net

Forum: Compiler & IDEs Ständiger Uart Complete Interrupt?


Autor: Drago Köhler (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo NG,

folgendes Szenario:
Der ATmega8 soll mit einem Mega64 über den UART kommunizieren. Dabei
soll der Mega8 bei einem empfangenem Byte einen Receive Complete
Interrupt auslösen.

Schon bei dem Testprogramm wird ständig ein Interrupt ausgelöst, obwohl
am UART Eingang nichts angeschlossen ist. Wie kann das sein?

Gruß
Drago

Achso: Compiler ist der IAR.

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstens bist Du mit dem IAR hier im falschen Forum -- schau mal bitte
auf die Überschrift.

Zweitens, lies Dir bitte das Datenblatt durch, wann die
Interruptbedingung für einen Empfangsinterrupt zurückgesetzt wird...

Außerdem: in einer Interruptroutine wartet man nach Möglichkeit nicht
längere Zeit.

Autor: Drago Köhler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es soll ja ein Empfangsinterrupt ausgelöst werden, wenn ein
vollständiges Byte da ist.

Nur Das Problem ist, das es ja gar keinen Anlass gibt einen
Empfangsinterrupt auszulösen, da am UART nix angeschlossen ist...

> Außerdem: in einer Interruptroutine wartet man nach Möglichkeit
> nicht längere Zeit

alles nur für Testzwecke

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Nur Das Problem ist, das es ja gar keinen Anlass gibt einen
> Empfangsinterrupt auszulösen, da am UART nix angeschlossen ist...

Warum hast Du dann einen Interrupthandler und aktivierst den
Interrupt?

Irgendwelcher Schrott wird halt als Zeichen interpretiert (selbst ein
Zeichen mit `framing error' löst ja einen Interrupt aus, nachdem die
entsprechenden Taktzeiten rum sind), und der Fehler in Deiner ISR läßt
diese dann immer wieder aufrufen.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie beim GCC muß man auch beim IAR das UDR lesen, damit das Flag
zurückgesetzt wird.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist gängige Praxis, jedesmal, bevor man einen Interrupt freigibt, das
zugehörige Interrupt-Pending Flag zu löschen.

Damit vermeidet man eventuelle Fehlauslösungen.


Peter

Autor: Drago Köhler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, UDR auslesen fehlt noch. Stimmt. Das erklärt die Dauerschleife.

@Jörg
Du meinst irgend welches Rauschen am offenen RXD Pin (Da soll später
mal der Mega64 dran) kann einen Interrupt auslösen ?

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Irgendein Bit, das als Startbit interpretiert wird, genügt.

Autor: Drago Köhler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke!
Es lag wirklich an dem Schaltungslayout, wodurch sämtlicher Schrott
einen Interrupt auslöste. Wenn der RXD-Pin mit einem Pull-Down
Widerstand gegen Masse gezogen wird, löst sich auch dieses Problem und
es treten keine "zufälligen" Interrupts mehr auf.
Das UDR muß natürlich, im Gegensatz zu meinem Erstposting ausgelesen
werden, um sich nicht in einer Dauerschleife zu verfangen.

Gruß
Drago

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Wenn der RXD-Pin mit einem Pull-Down
Widerstand gegen Masse gezogen wird, löst sich auch dieses Problem und
es treten keine "zufälligen" Interrupts mehr auf."

Das wundert mich ein bißchen: eigentlich sollten hierbei wiederholt
Interrupts ausgelöst werden, um dieses 'BREAK'-Signal anzuzeigen;
frame-error und overrun würde ich auch erwarten.
Ein Pullup wäre die richtige Beschaltung.

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.