Forum: Compiler & IDEs gcc kennt die "UART-Variablen" nicht


von Matthias (Gast)


Lesenswert?

hi,
ich programmiere schon seit einigen Jahren AVRs unter Asm, hab mir aber 
jetzt mal avrgcc installiert (nur so zum rumspielen). Jetzt zu meinem 
Problem: Ich habe mal einige Test-Anwendungen ausprobiert, die ersten 
(LEDs blicnken und so) funktionieren auch soweit ganz gut, wenn ich 
allerdings die uart nutzen will, klappt nix mehr :(

Der Compiler meldet immer (trotz Headerfiles eingebunden), dass 'UCR', 
'TXCIE', 'TXEN', ... nicht definiert seien!?!?

Ich hoffe ihr könnt mir helfen (zur Unterstützung hab ich mal meinen 
Soruce angefügt).

Gruß, Matthias

-----------------------------------

#include <io.h>
#include <interrupt.h>
#include <sig-avr.h>
#include <progmem.h>

char a[] __attribute__((progmem)) = "Dies ist eine Testnachricht!";

char pos = 0;

SIGNAL(SIG_UART_TRANS)
{
  if(pos++<28)
    outp(PRG_RDB(&a[pos]),UDR);  // nächstes Z.

}

int main(void)
{
  outp((1<<TXCIE)|(1<<TXEN),UCR); // Trans.-Interrupt
  outp(25,UBRR);                  // 4Mhz / 9600 Baud
  sei();                          // Interrupts an

  outp(PRG_RDB(&a[pos]),UDR);     // 1. Zeichen senden
  for(;;);                        // Endlosschleife
}

von Joerg Wunsch (Gast)


Lesenswert?

Erstens solltest Du besser eine aktuelle Version der Software
nehmen.  WinAVR ist hier die Waffe der Wahl, falls Du unter
Windows arbeitest.  Dort würde das #include <avr/io.h> heißen
und dieses ist dafür zuständig, die entsprechenden Definitionen
reinzuziehen.

Außerdem, wie compilierst Du das genau?  Ohne -mmcu=<MCU Typ>
kann es nicht funktionieren, denn nur darüber erfährt der
Compiler, welche Definitionen er einbinden soll.  Leider hat
Atmel für die AVRs keine einheitliche Notation für die IO-Register
geschaffen, die heißen bei unterschiedlichen Controllern auch
unterschiedlich.

von Matthias (Gast)


Lesenswert?

ok, dann zieh ich mir winavr mal runter...

ist ein mega161, compilieren passt aber schon (denk ich), hmm mal sehen, 
vielleicht geht's mit winavr?!?!

von BernhardT (Gast)


Lesenswert?

Hallo Matthias,
bist du sicher, das im makefile nicht ein AVR eingetragen ist bei dem 
die Register anders heißen z.B. UCSRB.., Ansonsten sollte man auch zum 
rumspielen vielleicht lieber WINAVR nehmen UBRR = 25;  sieht doch schon 
besser aus :)
Gruß Bernhard

von BernhardT (Gast)


Lesenswert?

Alles klar - der Mega161 hat 2 USART also kein UCR - mal ein Blick ins 
Datenblatt werfen, für die Registerbezeichnungen.
Bernhard

von Matthias (Gast)


Lesenswert?

ok, alles klar, jetzt funktioniert's ;)

hatte den mega161 als ersatz für einen 8515, welche ja pinkompatibel 
sind, deswegen bin ich davon ausgegangen, dass alle programme (solange 
sie keine spezialfunktionen nutzen) auch ungeändert auf beiden laufen.

danke für die hilfe
gruß

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.