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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.