Hallo
Ich versuche schon seit ner weile meinen AVR zu initialisieren, dass Problem mein AVR Studio das mit dem winavr-gcc arbeitet findet den 'UBRRH0' ausdruck nicht ich vermute das mir eine include Datei fehlt.
Ich habe mich ganz an das Datenblatt gehalten.
Code:
/*
UART-Init:
Berechnung des Wertes für das Baudratenregister
aus Taktrate und gewünschter Baudrate
*/
#ifndef F_CPU
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 8000000"
#define F_CPU 8000000UL // Systemtakt in Hz - Definition als unsigned long beachten
// Ohne ergeben sich unten Fehler in der Berechnung
#endif
#define BAUD 9600UL // Baudrate
// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // 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
#include <avr/io.h>
#include <avr/interrupt.h>
void USART_Init( unsigned int baud )
{
/* Set baud rate */
UBRRH0 = (unsigned char)(baud>>8);
UBRRL0 = (unsigned char)baud;
/* Enable receiver and transmitter */
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
/* Set frame format: 8data, 2stop bit */
UCSR0C = (1<<USBS0)|(3<<UCSZ00);
}
int main (void) {
USART_Init() ;
// bei neueren AVRs steht der Status in UCSRA/UCSR0A/UCSR1A, hier z. B. fuer ATmega16:
while (!(UCSR0A & (1<<UDRE0))) /* warten bis Senden moeglich */
{
}
UDR0 = 'x'; /* schreibt das Zeichen x auf die Schnittstelle */
}
Und das Resultat ist,
Code:
Build started 19.3.2011 at 15:34:49
avr-gcc -mmcu=atmega644 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT test.o -MF dep/test.o.d -c ../test.c
../test.c:9:2: warning: #warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 8000000"
../test.c: In function 'USART_Init':
../test.c:33: error: 'UBRRH0' undeclared (first use in this function)
../test.c:33: error: (Each undeclared identifier is reported only once
../test.c:33: error: for each function it appears in.)
../test.c:34: error: 'UBRRL0' undeclared (first use in this function)
../test.c: In function 'main':
../test.c:43: error: too few arguments to function 'USART_Init'
make: *** [test.o] Fehler 1
Build failed with 5 errors and 1 warnings...
Ich weis das Es irgendein einfacher Fehler ist nur ich find in nicht.
Danke.
Lesezeichen