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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren