www.mikrocontroller.net

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


Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
}

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?!?!

Autor: BernhardT (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: BernhardT (Gast)
Datum:

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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.