www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik rs232 interrupt senden at90s2313


Autor: M. B. (twin_mbj)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute!
Ich habe das Datenblatt studiert und habe mir Gedanken zu Interrupt 
gesteuerten rs232 Kommunikation wie folgt gemacht:

- udre is set after reset
- udre can only be cleared if udr is written and only then (exept reset)
- udre is set within the transmisson from udr to the shift register.
- udr empty interrupt is executed when udre is high and udr tranmitted 
to the shift register.

Interruptgesteuerte Übertragung kann daher nur mit einem beschreiben von 
UDR erfolgen.

sehe ich das richtig?

Autor: Torsten Landschoff (bluehorn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi MB,

M. B. schrieb:

> - udr empty interrupt is executed when udre is high and udr tranmitted
> to the shift register.
>
> Interruptgesteuerte Übertragung kann daher nur mit einem beschreiben von
> UDR erfolgen.
>
> sehe ich das richtig?

Komische Fragestellung. Überhaupt geht eine Übertragung 
(uC->Gegenstelle) per UART nur durch Schreiben auf UDR (UART Data 
Register).

Wenn man etwas empfangen möchte, muss man das UDR dagegen lesen. Der 
entsprechende Interrupt geht auf Vektor 8 (s. Seite 18 im Datenblatt, 
Interrupt Definition ist "UART, RX complete". Siehe auch Seite 45. 
Zitat:

Bit 7 – RXC: UART Receive Complete<br>
This bit is set (one) when a received character is transferred from the 
Receiver Shift Register to UDR. The bit is set regardless of any 
detected framing errors. When the RXCIE bit in UCR is set, the UART 
Receive Complete interrupt will be executed when  RXC is set (one).

Autor: mb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Korrekt. Wie kommt man in den Interrupt zum ersten Schreiben in UDR?

Autor: Christopher G. (cbg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn UDR leer ist, dann wird sobald der UDRE Interrupt aktiviert wird in 
die entsprechende ISR gesprungen. Globales Interruptflag muss natürlich 
auch gesetzt sein.

Um UART per Interrupts zu realisieren schreibt man also zuerst die zu 
übertragenen Daten in einen Puffer und speichert irgendwie die Anzahl 
der im Puffer befindlichen Bytes. Wenn man dann senden möchte, so 
aktiviert man den UDRE Interrupt und holt in der ISR immer ein Byte aus 
dem Puffer und schickts per UART raus (ins UDR Register schreiben). Die 
UDRE ISR überprüft immer, ob der Puffer noch nicht leer ist bzw ob das 
letzte Byte ausgelesen wurde und deaktiviert dann den UDRE Interrupt.

Hoffe das war verständlich.

Autor: M. B. (twin_mbj)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der aktivierte UDRIE wird nur ausgelöst wenn UDRE high, also muss zuerst 
UDR geschrieben werden. Das hinkt.
Ich hätte gerne: Zeichen zum Senden verfügbar (weil zb RXCIE 
ausgelöst)=> springe in  ISR (uart send, udr empty oder sonstwas).
UDRE ist read only.

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde den Absatz auf Seite 43

> When the UDRIE bit in UCR is set, the UART Transmit Complete interrupt
> to be executed as long as UDRE is set.
> UDRE is cleared by writing UDR. When interrupt-driven data
> transmittal is used, the UART Data Register Empty Interrupt
> routine must write UDR in order to clear UDRE, otherwise a new
> interrupt will occur once the interrupt routine terminates.
> UDRE is set (one) during reset to indicate that the
> transmitter is ready.

so interpretieren, dass der Interrupt sofort ausgelöst wird, sobald du 
ihn mit UDRIE freischaltest. Das Datenregister ist dann noch leer, somit 
ist gemäß dem letzten Satz UDRE gesetzt -> Interrupt

Autor: M. B. (twin_mbj)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau, ich springe in ISR sende ein char, UDRE geht auf low. Und dann 
kann ich keinen UDR empty Interrupt mehr erzeugen.

Autor: Christopher G. (cbg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probiers einfach mal aus und schau was passiert.

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.