====== Serielles Interface ====== Diese Bibliothek bietet die Funktionen für das AVR asynchrone serielle Interface ===== Datentypen ===== * **//usart//** \\ Datentyp für USART Interfacekontroll-, Status- und Datenregisteradressen. //usart// Variablen sollten zu Beginn des Programms initialisiert werden. Für die Initialisierung gibt es eine Macrofunktion //USART// dessen einziger Parameter für den Index des Interface ist. (0 oder 1). * **//usart_databits//** \\ Zählen der Datenbits, Aufzählungsdatentyp. Möglichkeiten: * //USART_DATABITS_5// - 5 Datenbits. * //USART_DATABITS_6// - 6 Datenbits. * //USART_DATABITS_7// - 7 Datenbits. * //USART_DATABITS_8// - 8 Datenbits. * //USART_DATABITS_9// - 9 Datenbits. * **//usart_stopbits//** \\ Zählen der Stop-Bits, Aufzählungsdatentyp. Möglichkeiten: * //USART_STOPBITS_ONE// - Ein Stop-Bit. * //USART_STOPBITS_TWO// - Zwei Stop-Bit. * **//usart_parity//** \\ Paritätsmodus, Aufzählungsdatentyp. Möglichkeiten: * //USART_PARITY_NONE// - Ausgeschaltet. * //USART_PARITY_EVEN// - Gerade Parität. * //USART_PARITY_ODD// - Ungerade Parität. ===== Funktionen ===== * **//USART_BAUDRATE_ASYNC(baud)//** \\ Makrofunktion um den USART Baudratenregisterwert im asynchronen Modus zu berechnen. Parameter: * //baud// - Gewünschte Baudrate * Gibt Baudratenregisterwert wieder. * **//void usart_init_async(usart port, usart_databits data_bits, usart_stopbits stop_bits, usart_parity parity, usart_baudrate baudrate)//** \\ Initialisiert asynchrones USART. Parameter: * //port// - USART Schnittstellenvariable. * //data_bits// - Datenbits. * //stop_bits// - Stop-Bits. * //parity// - Paritätsmodus. * //baudrate// - Baudratenregisterwert (kann mit der Makrofunktion //USART_BAUDRATE_ASYNC// errechnet werden). * **//void usart_send_char(usart port, char symbol)//** \\ Blockiert die Übertragung von Zeichen. Die Funktionen warten solange bis der Ausgabespeicher leer ist, bevor ein Zeichen in den Speicher geschrieben wird. Parameter: * //port// - USART Schnittstellenvariable. * //symbol// - zu sendendes Zeichen. * **//void usart_send_string(usart port, char *text)//** \\ Blockierende String-Übertragung. Parameter: * //port// - USART Schnittstellenvariable. * //text// - Zeiger auf einen String(char array). Der String muss mit einer Null enden. * **//bool usart_has_data(usart port)//** \\ Überprüft Empfangsspeicher auf Daten. Parameter: * //port// - USART Schnittstellenvariable. * Gibt //true// zurück wenn Zeichen im Empfangsspeicher und //false// wenn nicht. * **//char usart_read_char(usart port)//** \\ Liest ein Zeichen aus dem Empfangsspeicher. Zuvor muss der Nuter überprüfen ob tatsächlich ein Zeichen empfangen wurde. Parameter: * //port// - USART Schnittstellenvariable. * Gibt Zeichen aus. * **//bool usart_try_read_char(usart port, char *symbol)//** \\ Liest ein Zeichen aus dem Empfangsspeicher, falls eins vorhanden ist. Parameter: * //port// - USART Interfacevariable. * //symbol// - Verweis auf die Variable des Zeichens. Wenn ein Zeichen im Empfangsspeicher vorhanden ist, wird es der betreffenden Variable zugeschrieben. * Gibt //true// aus, wenn ein Zeichen im Empfangsspeicher vorhanden ist und //false// wenn nicht. ===== Beispiel ===== Die USART Schnittstelle ist konfiguriert um 8 Datenbits, ein Stop-Bit, 9600 bps Baudrate und keinen Paritätsmodus zu nutzen. Das Programm sendet einen String, wartet bis die Zeichen empfangen wurden und ließt sie dann aus. #include // Nutze USART Schnittstelle 0. usart port = USART(0); int main(void) { char c; // Initialisierung der Schnittstelle. usart_init_async(port, USART_DATABITS_8, USART_STOPBITS_ONE, USART_PARITY_NONE, USART_BAUDRATE_ASYNC(9600)); // Senden des String. usart_send_string(port, "Hello\n"); // Auf ankommende Daten warten. while (!usart_has_data(port)) {} // Empfangenes Zeichen auslesen. c = usart_read_char(port); }