Forum: Mikrocontroller und Digitale Elektronik AVR-Bootloader-Tutorial - Problem


von Ralf (Gast)


Lesenswert?

Hallo zusammen!

Ich versuche im Moment nach dem Tutorial 
http://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung 
den "Hello World"-Bootloader auf dem ATMega16 umzusetzen.


Habe auch im Linker -Ttext=0x3800 eingestellt und die Fuses passend 
programmiert(BOOTSZ1, BOOTSZ0, BOOTRST). Habe testweise per Programmcode 
eine LED eingeschaltet und diesen Code Zeile für Zeile verschoben und so 
herausgefunden, dass der Bootloader anfangs korrekt ausgeführt wird und 
erst beim Code
1
uart_puts("Hallo hier ist der Bootloader\n\r");
nicht mehr korrekt funktioniert, d.h. wenn ich die LED nach dieser Zeile 
anschalten will, dann bleibt sie aus, d.h. der Mikrocontroller erreicht 
diese Zeile vermutlich niemals.


Ich vermute, dass möglicherweise die Interrupt-Vektoren nicht richtig 
verbogen sind, kenne mich auf diesem Gebiet aber noch nicht so gut aus.
Die Interrupt-Vektoren verbiege ich mit dem Code aus dem Tutorial:
1
/* Interrupt Vektoren verbiegen */
2
char sregtemp = SREG;
3
cli();
4
temp = MCUCR;
5
MCUCR = temp | (1<<IVCE);
6
MCUCR = temp | (1<<IVSEL);
7
SREG = sregtemp;

Wäre schön, wenn jemand von euch eine Idee hätte und mir helfen könnte.
Danke im Vorraus

von Mac G. (mac_g)


Lesenswert?

Hallo,

je nach Mikrocontroller musst du ein anderes Register verändern, um die 
Interruptvektoren zu verschieben. Bei einem ATMega8 sieht das dann so 
aus:
1
cli();
2
temp = GICR;
3
GICR = temp | (1<<IVCE);
4
GICR = temp | (1<<IVSEL);
5
SREG = sregtemp;

Evtl. mal im Datenblatt des Controller nachschauen.

von Ralf (Gast)


Lesenswert?

Vielen Dank für den Tipp!

Das Tutorial war ja für einen Atmega88 geschrieben und ich habe einen 
Atmega16 verwendet, der andere Register besitzt.
Habe das Register jetzt entsprechend verändert (von MCUCR zu GICR) und 
der "Hello World"-Bootloader funktioniert jetzt.

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.