Sé que la interrupción de RX se usa obviamente para guardar el sondeo, pero ¿por qué la TX también?
Sé que la interrupción de RX se usa obviamente para guardar el sondeo, pero ¿por qué la TX también?
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:
El comportamiento exacto depende del microcontrolador. Esa es una descripción general.
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.
Algunos UARTS tienen un búfer interno más grande que uno, la serie 16xxx para uno.
El procedimiento aquí fue
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.
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.
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.
Lea otras preguntas en las etiquetas microcontroller uart