XPS_uart16550 Handshake

Gast #1441962
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
Gast
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.