Die UART des Atmel AVR

URL: ../..dic/hardwarenahe_programmierung/avr_uart.html

Die UART des Atmel AVR

Diese Seite beschreibt die UART des ATMega16severity symbol

Prinzipiell lässt sich diese Information auch auf andere Mikrocontroller der AVR Serie übertragen, es empfiehlt sich aber die Informationen mit dem entsprechenden Datenblatt zu vergleichen!

Informationen im Datenblattseverity symbol

Die Informationen dieser Seite entstammen dem originalen Datenblatt (Rev. 2466T–AVR–07/10) des ATMega16 von Atmel.

  • Seite 144-145: Blockschaltbild und allgemeine Information
  • Seite 163-167: Registerbeschreibung
  • Seite 167-171: UART Baudrateregister und Beispiele für Baudrates

Allgemeines link symbol

Um eine serielle Schnittstelle (siehe RS232) zu realisieren stellt der Atmel AVR eine USART (engl. für Universal Synchronous and Asynchrouns Serial Receiver and Transmitter) zur Verfügung.

Zur Arbeit mit dem USART werden fünf Register genutzt:

  • Drei Konfigurations und Statusregister UCSRA, UCSRB und UCSRC (für UART Control and Status Register A, B und C)
  • Das Baudrateregister UBRR für die Erzeugung des Übertragungstaktes
  • Das Datenregister UDR (engl. für UART Data Register) zum Senden und Empfangen der einzelnen Bytes

Außerdem stehen drei mögliche Interrupts für die UART zur Verfügung:

  • Receive Complete (USART_RX_vect) - signalisiert ein empfangenes Byte empfangen wurde
  • Transmit Complete (USART_TX_vect) - signalisiert ein vollständig gesendetes Byte (inklusive Stopbit)
  • UART Data Register Empty (USART_UDRE_vect) - signalisert einenen freien Sendebuffer

Die Konfigurations- und Statusregister sowie die Interrupts werden im folgenden näher erläutert.

AVR UART
AVR UART (Quelle: Datenblatt ATMega16, Lizenz © Atmel Corporation)

Konfigurations- und Statusregister link symbol

USARTA link symbol

Bit 7 6 5 4 3 2 1 0
Name RXC TXC UDRE FE DOR PE U2X MPCM
Read/Write R R/W R R R R R/W R/W
Init 0 0 1 0 0 0 0 0

RXC - Receive Complete link symbol

Dieses Flag wird auf 1 gesetzt, wenn ein neues Byte im UDR zur Verfügung steht (empfangen wurde). Sobald UDR gelesen wird, wird das Flag auf 0 gesetzt. Dieses Flag löst den Receive Complete Interrupt aus, sofern dieser aktiviert ist.

TXC - Transmit Complete link symbol

Das Flag wird auf 1 gesetzt, wenn ein komplettes Frame (inklusive Stopbit) gesendet wurde. Dieses Flag wird gelöscht, wenn der Transmit Complete Interrupt aufgerufen wird oder kann direkt gelöscht werden, indem das Flag mit einer 1 geschrieben wird. Dieses Flags löste den Transmit Complete Interrupt aus, sofern dieser aktiviert ist.

UDRE - USART Date Register Empty link symbol

Dieses Flag ist auf 1, wenn das Senderegister (wieder) leer ist. Dieses Flag löst den USART Date Register Empty Interrupt aus, sogern dieser aktiviert ist. Das Flag liefert 0, sobald auf UDR geschrieben wird. Nach dem Reset ist dieses Flag 1, um das leere UDR zu signalisieren.

FE - Frame Error link symbol

Wurde beim Empfang das Stopbit falsch empfangen (sollte logisch 1 entsprechen) wird dieses Flag gesetzt. Das Flag wird zurückgesetzt sobald UDR gelesen wird.

DOR - Data OverRun link symbol

Ein Data OverRun tritt auf, wenn ein Byte empfangen wurde, der Empfangsbuffer aber vollgelaufen ist (UDR wurde nicht ausgelesen). Sobald dies eintritt, wird das Flag auf 1 gesetzt. Zurückgesetzt wird es mit dem Lesen von UDR.

PE - Parity Error link symbol

Wenn der Paritätscheck eingeschalten ist und das Paritätsbit der Übertragung nicht mit der Berechnung über die Datenbits zusammen stimmt wird dieses Flag auf 1 gesetzt. Zurückgesetzt wird es mit dem Lesen von UDR.

U2X - USART Double Speed link symbol

Bestimmt den Teiler für die Baudrategenerierung. 0 für Teiler 16 und 1 für Teiler 8. Näheres dazu unter Baudrate Generierung.

MPCM - Multiprocessor Communication Mode link symbol

Spezieller Modus um eine Filterung von Frames mit Adressinformationen vorzunehmen. Wird in der Praxis äußerst selten benutzt. Für weitere Informationen dazu ist im Datenblatt nachzulesen.

USARTB link symbol

Bit 7 6 5 4 3 2 1 0
Name RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8
Read/Write R/W R/W R/W R/W R/W R/W R R/W
Init 0 0 0 0 0 0 0 0

RXCIE - Receive Complete Interrupt Enable link symbol

Um den Interruptvektor zu aktivieren, muss dieses Flag auf 1 sein. Der entsprechende Interruptvektor heißt USART_RX_vect.

TXCIE - Transmit Complete Interrupt Enable link symbol

Um den Interruptvektor zu aktivieren, muss dieses Flag auf 1 sein. Der entsprechende Interruptvektor heißt USART_TX_vect.

UDRIE - UART Data Register Empty Interrupt Enable link symbol

Um den Interruptvektor zu aktivieren, muss dieses Flag auf 1 sein. Der entsprechende Interruptvektor heißt USART_UDRE_vect.

RXEN - Receive Enable link symbol

Dieses Flag muss auf 1 sein, um den Empfänger der UART einzuschalten.

RXEN - Transmit Enable link symbol

Dieses Flag muss auf 1 sein, um den Sender der UART einzuschalten.

USARTC link symbol

Bit 7 6 5 4 3 2 1 0
Name URSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL
Read/Write R/W R/W R/W R/W R/W R/W R R/W
Init 1 0 0 0 0 1 1 0

Baudrate Generierung link symbol

Zur Generierung der Baudrate gilt folgende Formel:

$$f_{Baudrate}=\frac{f_{CLK}}{16\cdot(UBRR+1)} \Leftrightarrow UBRR=\frac{f_{CLK}}{16\cdot f_{Baudrate}}-1$$

Diese Formel gilt wenn das U2X in UCSRA gleich 0 ist. Für U2X gleich 1 gilt folgende Formel:

$$f_{Baudrate}=\frac{f_{CLK}}{8\cdot(UBRR+1)} \Leftrightarrow UBRR=\frac{f_{CLK}}{8\cdot f_{Baudrate}}-1$$