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 }
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.
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?!?!
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
Alles klar - der Mega161 hat 2 USART also kein UCR - mal ein Blick ins Datenblatt werfen, für die Registerbezeichnungen. Bernhard
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.