So che l'interrupt RX è ovviamente usato per salvare il polling, ma perché anche quello TX?
So che l'interrupt RX è ovviamente usato per salvare il polling, ma perché anche quello TX?
L'interrupt TX è principalmente per datagrammi più lunghi.È possibile avviare il trasferimento per un buffer di lunghezza nota (bytecount).Ora puoi spingere il puntatore del buffer tutte le volte che ci sono byte da inviare, quando si verifica l'interrupt TX.Ciò garantisce il trasferimento "il più veloce possibile" del buffer, senza la necessità di eseguire il polling di alcun "TransferComplete" -Flag / Statusbit.
L'obiettivo principale dell'interrupt TX (in realtà un END OF TX) è inviare automaticamente il contenuto di un buffer (più byte).Se implementato in modo corretto:
Il comportamento esatto dipende dal microcontrollore.Questa è una descrizione generale.
Alcuni UART hanno un buffer interno più grande di uno, la serie 16xxx per uno.
La procedura qui era
Ciò riduce il carico della CPU scaricando alcune elaborazioni sull'UART, consentendo così alle CPU più lente di tenere il passo e di eseguire altre attività invece di essere interrotte tutto il tempo.
L'interrupt TX si attiva quando c'è spazio nel buffer di trasmissione.
Per i dispositivi che non hanno un buffer di trasmissione (cioè dove scrivi un byte, che viene trasferito immediatamente), l'interrupt viene affermato quando il registro di trasmissione può essere scritto con il byte successivo.
Per i dispositivi con un buffer, l'interrupt viene affermato in un momento definito dall'implementazione.Per alcuni è quando il buffer è mezzo vuoto, per altri è quando è iniziata la trasmissione dell'ultimo byte e il buffer è completamente vuoto.
Un altro caso d'uso è quando si collega l'UART a un'altra interfaccia di comunicazione come RS485.Il controller deve rilasciare il driver del bus non appena l'ultimo bit è stato spostato fuori dal buffer TX.Questo è facile da gestire nell'interrupt TX, ma sarebbe complicato da implementare senza, poiché dovresti aspettare un tempo esatto dopo aver scritto l'ultimo byte nel buffer di output che varierebbe anche con la velocità di trasmissione.