AVR-Bootloader-Tutorial - Problem

Gast #2560181
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
#2560190
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.
Gast #2560199
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.