Fondo
Estoy usando un ATmega328P para enviar datos a otro dispositivo a una alta velocidad de transmisión (230400). El dispositivo al que estoy enviando datos admite el control de flujo y genera la señal RTS cuando necesita mantener la transmisión. El problema es que el dispositivo espera que detenga la transmisión inmediatamente una vez que se haya confirmado el RTS.
El ATmega328P tiene un búfer de transmisión (UDR) y un registro de desplazamiento desde el cual los datos se envían a la línea TX. Como el ATmega328P no admite el control de flujo en hardware, lo estoy implementando en software. Antes de enviar (antes de escribir a UDR) estoy comprobando RTS y esperando a que se detenga, pero aparentemente esto no es suficiente porque todavía se están enviando los datos en el búfer de transmisión y el registro de desplazamiento y todavía se podría enviar un byte completo after RTS se afirma cuando el ATmega328P vacía sus buffers.
Aparentemente, deshabilitar el transmisor cuando se valida RTS (establecer TXEN en cero) no ayuda, ya que no entrará en vigencia hasta que se completen las transmisiones en curso y pendientes, de acuerdo con documentation sección 19.6.5.
Una solución alternativa podría ser esperar hasta Transmit Complete (TXC) antes de enviar cada byte, pero esto afectaría la velocidad de datos, ya que no estoy enviando el flujo de bytes de forma consecutiva incluso cuando RTS no está confirmado (I ' m comienza a enviar un nuevo byte solo después de que el anterior fue enviado por completo).
Mi pregunta es:
Con el ATmega328P, ¿hay una manera de admitir el control de flujo de RTS en el transmisor mientras disfruta de la canalización provista por el búfer de transmisión y el registro de desplazamiento?