Ich weiß, dass der RX-Interrupt offensichtlich zum Speichern von Abfragen verwendet wird, aber warum auch der TX-Interrupt?
8
Ich weiß, dass der RX-Interrupt offensichtlich zum Speichern von Abfragen verwendet wird, aber warum auch der TX-Interrupt?
Antworten:
Das Hauptziel des TX-Interrupts (eigentlich ein END OF TX) besteht darin, den Inhalt eines Puffers (mehrere Bytes) automatisch zu senden. Bei ordnungsgemäßer Implementierung:
Das genaue Verhalten hängt vom Mikrocontroller ab. Das ist eine allgemeine Beschreibung.
quelle
Der TX-Interrupt ist hauptsächlich für längere Datagramme vorgesehen. Sie können die Übertragung für einen Puffer bekannter Länge (Bytecount) initiieren. Jetzt können Sie Ihren Pufferzeiger so oft drücken, wie Bytes gesendet werden müssen, wenn der TX-Interrupt auftritt. Dies stellt die "so schnelle wie möglich" Übertragung Ihres Puffers sicher, ohne dass "TransferComplete" -Flag / Statusbit abgefragt werden muss.
quelle
Einige UARTS haben einen internen Puffer, der größer als eins ist, die 16xxx-Serie für einen.
Das Verfahren hier war
Dies verringert die CPU-Auslastung, indem ein Teil der Verarbeitung auf den UART verlagert wird, wodurch langsamere CPUs andere Aufgaben ausführen und ausführen können, anstatt ständig unterbrochen zu werden.
quelle
Der TX-Interrupt wird ausgelöst, wenn im Sendepuffer Platz vorhanden ist.
Bei Geräten ohne Sendepuffer (dh wenn Sie ein Byte schreiben, das sofort übertragen wird) wird der Interrupt aktiviert, wenn das Senderegister mit dem nächsten Byte geschrieben werden kann.
Bei Geräten mit Puffer wird der Interrupt zu einem implementierungsdefinierten Zeitpunkt aktiviert. Für einige ist es, wenn der Puffer halb leer ist, für einige, wenn die Übertragung des letzten Bytes begonnen hat und der Puffer vollständig leer ist.
quelle
Ein weiterer Anwendungsfall ist, wenn Sie den UART an eine andere Kommunikationsschnittstelle wie RS485 anschließen. Der Controller muss den Bustreiber freigeben, sobald das letzte Bit aus dem TX-Puffer verschoben wurde. Dies ist im TX-Interrupt einfach zu handhaben, aber ohne zu implementieren wäre umständlich, da Sie nach dem Schreiben des letzten Bytes in den Ausgabepuffer eine genaue Zeit warten müssten, die auch mit der Baudrate variieren würde.
quelle