Forum: Mikrocontroller und Digitale Elektronik XPS_uart16550 Handshake


von ChrisB (Gast)


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

von ChrisB (Gast)


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?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.