atxmega usart rs485: Anzeige Senden beendet

OP #1981155
Lesenswert?

Hallo,
ich habe mit einem atxmega128A1 usart eine RS485 Schnittstelle 
realisiert.
Zur Umschaltung Senden / Empfangen wird für den Bustreiber das RTS 
Signal benötigt. Ich setze RTS auf High (senden) wenn das erste Byte in 
den USART Buffer geschrieben wird. Beim erfolgten Senden des letzten 
Bytes soll RTS wieder auf low, damit das Modul empfangsbereit ist.

Folgendes Problem tritt auf:
Der USART hat einen 3 Byte Buffer, in den die 3 ersten Bytes eines 
Strings sofort geschrieben werden ohne dass schon gesendet wird. Erst 
beim Schreiben des 4. Bytes beginnt das Senden. Wenn ich das letzte Byte 
meines Strings in den Sendebuffer geschoben habe, wird also das 
drittletzte Byte gerade rausgesendet. Wenn ich dann RTS schon auf low 
lege können die 3 letzen Bytes nicht vom Empfänger gesehen werden. Ich 
habe keine Möglichkeit herausgefunden zu erkennen, dass alle bytes aus 
dem Buffer rausgesendet wurden. Es wird lediglich per TXCIF flag 
angezeigt, dass das transmit shift register leer ist. Damit ist das Byte 
aber noch nicht gesendet.

"TXCIF is not set until the USART has completed transmitting all data in 
the transmit shift register and the transmit buffers are empty."

Die Frage ist nun: Wie erkennt man, dass das Senden beendet wurde?

Gruss
JSC
Gast #1982891
Lesenswert?

Danke für die Tipps,

das pollen des TXCIF bits in der Senderoutine hat nicht funktioniert
aber im Interrupt hat's geklappt!

************************************************
ISR(USARTD0_TXC_vect)
{
  SetRTS(0);//RS485 Empfänger enabled
}
************************************************
Gruss
JSC
#2084665
Lesenswert?

@  Wolfgang K. (opendcc)

>weiß hier einer zufällig, wann genau das TXCIF-Bit kommt: wenn der
>Frame fertig ist und das Stopbit beginnt oder am Ende des ersten
>Stopbits?

Am Ende des Stop-Bits. Ist ja ein AVR und kein PIC ;-)

>Und weil wir schon dabei sind: Wann genau liefert der Empfänger
>RX-Ready? In der Mitte des Stopbits?

Entweder dann oder am Ende des Stop-Bits. Denn das muss ja noch für 
einen eventuellen Frame Error geprüft werden.

MFG
Falk

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren