Hallo Zusammen!
Ich habe folgendes Problem:
Ich versuche mich gerade am USART eines Mega32 und habe Probleme beim kompilieren.
Folgender Fehler wird ausgegeben:
avr-gcc.exe -mmcu=atmega32 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=4000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT usart.o -MF dep/usart.o.d -c ../usart.c
../usart.c:10:8: error: division by zero in #if
../usart.c:10:8: error: division by zero in #if
../usart.c:11:6: error: #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
make: *** [usart.o] Error 1
Build failed with 3 errors and 0 warnings...
Dazu folgender code:
Woran kann das liegen?Code:#include "usart.h" #include <avr/io.h> void usart_init(unsigned long baudrate) { #define UBRR_VAL ((F_CPU+baudrate*8)/(baudrate*16)-1) // clever runden #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate #define BAUD_ERROR ((BAUD_REAL*1000)/baudrate) // Fehler in Promille, 1000 = kein Fehler. #if ((BAUD_ERROR < 990) || (BAUD_ERROR > 1010)) #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! #endif UBRRH = UBRR_VAL >> 8; UBRRL = UBRR_VAL & 0xFF; UCSRB = (1<<RXEN) | (1<<TXEN) | (1<<RXCIE); //aktivieren des Empfängers und Senders und Interrupt für Empfänger UCSRC = (1<<UCSZ0) | (1<<UCSZ1); //8,N,1 } int usart_putc(unsigned char c) { while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */ { } UDR = c; /* sende Zeichen */ return 0; } void usart_puts(char *s) { while (*s) { /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */ usart_putc(*s); s++; } }
MfG, Marten83







Zitieren

Lesezeichen