Marten83
11.05.2009, 21:14
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:
#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++;
}
}
Woran kann das liegen?
MfG, Marten83
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:
#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++;
}
}
Woran kann das liegen?
MfG, Marten83