hab kijons code genommen:
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/pgmspace.h>
#define SYSCLK 7372800
#define BAUD 9600UL
#define UBRR_BAUD ((SYSCLK/(16*BAUD))-1)
#define TRUE 1
#define FALSE 0
// USART initialisieren
void uart_init(void);
volatile unsigned char daten_gesendet = TRUE;
const prog_char* volatile p_string;
// Zeichenkette im Flashspeicher
prog_char daten[] = "Hello World!\n";
int main(void)
{
// USART initialisieren
uart_init();
sei();
while (1)
{
if (daten_gesendet)
{
// Flag zurücksetzen
daten_gesendet = FALSE;
// Pointer zeigt auf die Daten im Flashspeicher
p_string = daten;
/* Interrupt aktivieren, damit wird sofort zur
Interruptroutine gesprungen und das erste Zeichen gesendet. */
UCSRB |= (1<<UDRIE);
}
}
}
void uart_init(void)
{
// Baudrate einstellen ( Normaler Modus )
UBRRH = (unsigned char) (UBRR_BAUD>>8);
UBRRL = (unsigned char) (UBRR_BAUD & 0x00FF);
// Aktivieren des Empfängers, des Senders und des "Daten empfangen"-Interrupts
UCSRB = (1<<RXEN)|(1<<TXEN);
// Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}
/* Interrupt wird ausgelöst sobald der Sendepuffer leer ist */
SIGNAL(SIG_UART_DATA)
{
char buffer = pgm_read_byte(p_string++);
/* Wenn nicht das Ende der Zeichenkette erreicht wurde,
dann weiteres Zeichen senden */
if ( buffer != '\0' ) {
UDR = buffer;
} else {
// Flag setzen, das der String gesendet wurde
daten_gesendet = TRUE;
// Interrupt deaktivieren
UCSRB &= ~(1<<UDRIE);
}
}
bekomme dann aber beim kompilieren immer folgende fehlermeldung:
Code:
Z:\AVRDevel\Test>make
-------- begin --------
avr-gcc (GCC) 3.4.3
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Compiling: Test.c
avr-gcc -c -mmcu=atmega162 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-
adhlns=Test.lst -std=gnu99 -MD -MP -MF .dep/Test.o.d Test.c -o Test.o
Test.c: In function `main':
Test.c:41: error: `UCSRB' undeclared (first use in this function)
Test.c:41: error: (Each undeclared identifier is reported only once
Test.c:41: error: for each function it appears in.)
Test.c:41: error: `UDRIE' undeclared (first use in this function)
Test.c: In function `uart_init':
Test.c:49: error: `UBRRH' undeclared (first use in this function)
Test.c:50: error: `UBRRL' undeclared (first use in this function)
Test.c:53: error: `UCSRB' undeclared (first use in this function)
Test.c:53: error: `RXEN' undeclared (first use in this function)
Test.c:53: error: `TXEN' undeclared (first use in this function)
Test.c:56: error: `UCSRC' undeclared (first use in this function)
Test.c:56: error: `URSEL' undeclared (first use in this function)
Test.c:56: error: `UCSZ1' undeclared (first use in this function)
Test.c:56: error: `UCSZ0' undeclared (first use in this function)
Test.c: At top level:
Test.c:60: warning: `SIG_UART_DATA' appears to be a misspelled signal handler
Test.c: In function `SIG_UART_DATA':
Test.c:67: error: `UDR' undeclared (first use in this function)
Test.c:74: error: `UCSRB' undeclared (first use in this function)
Test.c:74: error: `UDRIE' undeclared (first use in this function)
make: *** [Test.o] Error 1
Woran liegt das jetzt, das erste Beispiel bei dem ich auf ein Regsiter zugefriffen hab ging noch?
das Makefile hab ich übrigens mit MFile erstellt.
Lesezeichen