PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TXC Interrupt Frage



demmy
01.07.2015, 12:16
Hallo zusammen,

ich hätte mal eine Frage zu dem TXC interrupt bei einem Atmega1284p.

Wird das Interrupt nach jedem einzelnen übertragenen Byte ausgelöst? In diverser Literatur steht nur drin, nach der Übertragung der Daten, damit ist aber immer nur eine Byte gemeint.
Das heißt wenn ich 5 Bytes übertrage, wird 5 mal das Interrupt gefeuert?

Vielen Dank für die Hilfe.

Searcher
01.07.2015, 17:32
Hallo,
ich kann nur versuchen, das Datenblatt zu interpretieren, da ich selber praktisch noch nicht mit dem Transmit Complete interrupt gearbeitet habe.

Die USART hat einen Transmitt Buffer zu Aufnahme eines zu sendenden Bytes und ein Schieberegister zum seriellen Aussenden des zu übertragenden Bytes. Man schreibt das zu übertragende Byte in den Transmit Buffer (UDR). Ist das Schieberegister leer, also bereit ein Byte seriell auszusenden, wird das Byte automatisch, ohne Zutun des Programmierers in das Sendeschieberegister geschrieben und ausgesendet. Ist das komplette Byte gesendet UND noch keine neues Byte im Transmit Buffer - also wenn noch keine weiteren Daten zum Senden bereitstehen, wird das TXC Flag gesetzt.

Wenn Du also fünf Bytes so schnell es geht sendest, also immer den Transmit Buffer gefüllt hältst, wird das TXC nur einmal am Ende der Übertragung gesetzt. Übergibst Du die fünf Bytes aber langsamer als sie gesendet werden könnten in den Transmit Buffer, wird das Flag öfter gesetzt. Ein Transmit Complete interrupt wird aber nur ausgeführt wenn er auch enabled ist. Falls Du die Funktion benötigst, würde ich für eindeutige Verhältnisse das TXC-Flag vor Beginn einer Übertragung löschen.

Auf der anderen Seite scheint es nur bei Halfduplex Verbindungen von Bedeutung zu sein, da es für den Transmit Buffer
empty (Data Register Empty(UDREn)) ja einen eigenes Interruptflag gibt.

The Transmit Complete (TXCn) Flag bit is set one when the entire frame in the Transmit Shift Register has been shifted out and there are no new data currently present in the transmit buffer. The TXCn Flag bit is automatically cleared when a transmit complete interrupt is executed, or it can be cleared by writing a one to its bit location. The TXCn Flag is useful in half-duplex communication interfaces (like the RS-485 standard), where a transmitting application must enter receive mode and free the communication bus immediately after completing the transmission.

Gruß
Searcher

demmy
01.07.2015, 18:55
Hallo Searcher,

Vielen Dank für deine Erklärung!

Ich denke das was du geschrieben hast trifft exakt zu. Wenn man das UDRE Interrupt verwendet um sofort ein Byte in das UDR nachzuschieben, dann wird das TXC Interrupt nur einmal gefeuert.
Ich habe das eben mal ausprobiert und das hat sich exakt so verhalten!

Das hat mir schon mal sehr viel geholfen.