Ständiger Uart Complete Interrupt?

Gast #177157
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.
Angehängte Dateien:
Gast #177158
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.
Gast #177159
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
Gast #177160
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.
Gast #177163
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 ?
Gast #177165
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
Gast #177166
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

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