Bootloader ATMega16M1 Einsprung/Wechsel

OP #4711406
Lesenswert?
• ▲
▼
Hallo,

ich möchte einen Bootloader integrieren damit ich den µC aus dem
bestehendem CAN Bus programmieren kann. Ich habe ein paar Fragen die mir
aus dem Datenblatt nicht ganz klar sind.

1. Einspung in den Bootloader, im Datenblatt steht das man das einfach
per Sprungbefehl an die entsprechende Adresse (0x1FFF) durchführen kann
oder in dem die Boot Reset Fuse programmiert wird, so das es eben im
Bootsector startet.

BOOTRST Reset address
1 Reset Vector = Application reset (address 0x0000)
0 Reset Vector = Boot Loader reset

Wenn man aber einfach dort hin springt wird doch bei der weiteren
Ausführung der Application Resetvector benutzt und nicht der Resetvector
des Bootloaders.

Wie kann man das bewerkstelligen, aus dem laufenden Programm in den
Bootloadermodus mit dessem Resetvector(Interrupttabelle)zu wechseln, den
Application Flash Bereich zu programmieren und danach wieder dorthin
wechseln und die Application Interrupttabelle zu nutzen.

Kann mir jemand den Ablauf erklären, wie ich aus dem laufenden Betrieb 
ein Programm im Bootflash ausführen kann und später das neue Programm im 
Apllication Flashbereich ausführe, da ja die Interruptvectoren irgendwie 
gewechselt werden müssen.
Angehängte Dateien:
Gast #4711572
Lesenswert?
• ▲
▼
Die ISR verbiegen:
1
//Application:
2

3
    unsigned char Temp = GICR;
4
    GICR = Temp | (1<<IVCE);
5
    GICR = Temp & ~(1<<IVSEL);
1
//Boot
2
    unsigned char nTemp = GICR;
3
    GICR = nTemp | (1<<IVCE);
4
    GICR = nTemp | (1<<IVSEL);

Zum Bootloader springen:
1
//...
2
 void (*bootloader)( void ) = 0x1FFF;
3
 // Achtung, ist WORD, am besten in der Hex des BL schauen wo
4
 // der Einsprungsvector ist!
5

6
//...
7

8
 bootloader();

Zurück zum Hauptprogramm, aus dem Bootloader:
1
//...
2
 void (*start)( void ) = 0x0000;
3
//...
4

5
 start();

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 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.