AT90S1200
19.03.2011, 15:40
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.
/*
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,
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.
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.
/*
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,
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.