¿Para qué sirve la interrupción de UART TX?

7

Sé que la interrupción de RX se usa obviamente para guardar el sondeo, pero ¿por qué la TX también?

    
pregunta Mark Yisri

5 respuestas

7

El objetivo principal de la interrupción de TX (en realidad un FIN DE TX) es enviar automáticamente el contenido de un búfer (varios bytes). Cuando se implementa de una manera adecuada:

  1. Habilita la interrupción de TX.
  2. El código de usuario comienza la transmisión enviando solo el primer byte en el búfer.
  3. Al final de TX (del primer byte), se generará una interrupción.
  4. En la ISR de TX (Rutina de servicio de interrupción), el código debe enviar el siguiente byte en el búfer y actualizar el índice del búfer.
  5. Al final de esta transmisión, se produce una nueva interrupción, y así sucesivamente, hasta que todo el contenido del búfer se envía "automáticamente".
  6. Deshabilitar la interrupción de TX.

El comportamiento exacto depende del microcontrolador. Esa es una descripción general.

    
respondido por el Dirceu Rodrigues Jr
8

La interrupción de TX es principalmente para datagramas más largos. Puede iniciar la transferencia de un búfer de longitud conocida (bytecount). Ahora puede empujar el puntero del búfer con la frecuencia que haya bytes para enviar, cuando se produce la interrupción de TX. Esto asegura la transferencia "lo más rápida posible" de su búfer, sin la necesidad de sondear ningún "TransferComplete" -Flag / Statusbit.

    
respondido por el DPF
3

Algunos UARTS tienen un búfer interno más grande que uno, la serie 16xxx para uno.

El procedimiento aquí fue

  1. Establezca una máscara de ventana de transmisión, por ejemplo, a 4 restantes.
  2. llene las posiciones del búfer hasta que el UART indique que no se deben enviar más datos completos o llenos
  3. hacer otras cosas
  4. cuando solo quedan 4 posiciones del búfer sin enviar, configure la interrupción de TX
  5. esperar a que se repare la interrupción
  6. si es necesario enviar más datos, vaya a 2.

Esto reduce la carga de la CPU al descargar parte del procesamiento al UART, lo que permite a las CPU más lentas continuar y realizar otras tareas en lugar de interrumpirse todo el tiempo.

    
respondido por el Surt
3

La interrupción de TX se dispara cuando hay espacio en el búfer de transmisión.

Para los dispositivos que no tienen un búfer de transmisión (es decir, donde escribe un byte, que se transfiere inmediatamente), la interrupción se activa cuando el registro de transmisión se puede escribir con el siguiente byte.

Para dispositivos con un búfer, la interrupción se afirma en un momento definido por la implementación. Para algunos, es cuando el búfer está medio vacío, mientras que para algunos es cuando se inició la transmisión del último byte y el búfer está completamente vacío.

    
respondido por el Simon Richter
1

Otro caso de uso es cuando conectas el UART a otra interfaz de comunicación como RS485. El controlador debe liberar el controlador de bus tan pronto como el último bit haya salido del búfer de TX. Esto es fácil de manejar en la interrupción de TX, pero sería complicado de implementar sin ella, ya que tendría que esperar un tiempo exacto después de escribir el último byte en el búfer de salida, que también variaría con la velocidad de transmisión.

    
respondido por el Rev1.0

Lea otras preguntas en las etiquetas