www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik XPS_uart16550 Handshake


Autor: ChrisB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle,

ich versuche gerade den Xilinx XPS_uart16550 mit Handshake in betrieb zu 
nehmen. Ich verwende dazu nicht das von Xilinx vorgegebene 
BoardSupportPackage, da ich der Meinung bin, das BSP von Xilinx bremst 
den Controller komplett aus.
Die Kommunikation ohne Handshake klappt bereits super, jedoch ist mir 
nicht ganz klar, wie ich das mit dem Handshake in den Griff bekomme.

Mal grob zum aktuellen Stand:
Bisher wird die Kommunikation komplett in der ISR des UART's 
vorgenommen. Dazu habe ich einen RX-Rinbuffer und einen TX-Ringbuffer.
Sobald ein RX-Interrupt auslöst wird das zeichen aus dem Uart in den 
RX-Ringbuffer geschrieben, von dort können die Zeichen wie sie gebraucht 
werden rausgeholt werden.
Ich schreibe manuell Zeichen in den TX-Ringbuffer, wenn ich etwas senden 
möchte und gebe danach den TransmittBufferEmpty-Interrupt frei, so dass 
sich die TX-Interruptroutine nach jedem Senden eines Zeichens ein neues 
aus dem TX-Ringbuffer holt, bis der Ringbuffer leer ist. Tritt dies ein, 
wird der TransmittEmptyInterrupt deaktiviert.

Soweit funktioniert das ganze schon ganz gut, jedoch stellt sich mir die 
Frage, wie ich hier noch die Handshake-Leitungen /RTS und /CTS einbaue.
/CTS kann bei jeder Veränderung einen Interrupt auslösen, aber das ganze 
Zusammenspiel ist mir nicht ganz klar.

Meine Überlegung war folgende:
Bevor der TransmittBufferEmpty-Interrupt ein Zeichen raussendet muss in 
überprüft werden, ob das /CTS-Signal(Input) auf '0' liegt, erst dann ist 
die Gegenstelle bereit und das zeichen kann gesendet werden. Was mache 
ich aber, wenn das /CTS-Signal auf '1' liegt? Solange warten, bis der 
/CTS-ÄnderungsInterrupt auslöst und dann das Zeichen senden?
Dies müsste ja eigentlich eine möglichkeit sein (habe diese aber noch 
nicht ausprobiert). Aber was fange ich mit dem /RTS-Signal(Output) an? 
Kann ich dieses nicht einfach immer auf '0' lassen, so dass ich so tue, 
als ob ich immer senden möchte?

Wäre schön, wenn mir das ganze jemand näher erklären könnte.

Vielen Dank!

Lieben Gruß,

ChrisB

Autor: ChrisB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kleiner Nachtrag:

Gibt es beim UART16550 eventuell auch die Möglichkeit, dass das 
Handshaking automatisch vom UART übernommen wird, ohen dass ich mich 
selber in meiner ISR drum kümmern muss?

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.