Forum: Mikrocontroller und Digitale Elektronik Bootloader löst Reset bei Interrupt aus


von Karl (Gast)


Lesenswert?

Hallo,

ich nutze folgenden Code auf meinem ATmega8
1
int main()
2
{
3
  // [ein paar Interrupts anschalten]
4
5
        // Interruptvektoren verschieben
6
  char tmpGICR = GICR;
7
  GICR = tmpGICR | (1 << IVCE);
8
  GICR = tmpGICR | (1 << IVSEL);  
9
  sei();
10
11
        while(1) {}

Wenn ich den Code im "normalen" Flash-Bereich kompiliere und die 
Verschiebung der Interruptvektoren weglasse, läuft das Programm 
einwandfrei. Wenn jedoch oben gezeigten Code im Bootloader-Bereich des 
Flashs ausführe, so springt das Programm nach kurzer Zeit (beim Auslösen 
eines der aktivierten Interrupts) zurück an den Anfang des Programms.

von Tim S. (maxxie)


Lesenswert?

Überprüfe mal ob das bit wirklich gesetzt ist nach deinem Versuch es zu 
setzen. Sonst mal mit -O1 compilieren oder den assembler beispielCode 
verwenden. Die beiden Schreibzugriffe auf das Register müssen zwingend 
in 4 Cycles stattfinden.

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.