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