Forum: Mikrocontroller und Digitale Elektronik ATMEGA32: Bootloader Timer Overflow


von Andreas S. (sn00py)


Lesenswert?

Hallo

Ich werkle bei einem Bootloader, und habe da ein problem bzw 
Verständnisproblem mit der Interrupt Tabelle

so sieht der Teil meines Codes aus :
1
#define  __SFR_OFFSET 0
2
#include <avr/io.h>
3
4
  .file  "avr_init.S"
5
  .text
6
  .section        .init3,"ax",@progbits
7
8
.org 0x0000
9
  jmp main
10
.org 0x0012
11
  jmp load_app
12
.org 0x002A
13
load_app:
14
  eor r1, r1
15
  ldi  r16, _BV (IVCE)
16
  out  GICR, r16  ; enable change reset vector
17
  out  GICR, r1  ; change reset vector to application

und das funktioniert auch so wie es soll
-> in der main wird dann ein timer1 eingestellt, das nach 2 sekunden 
sowas ein Overflow kommt, und das System and die Stelle 0x0012 springt 
-> Alles in Ordnung

wenn ich das aber "optimieren" will und so schreibe
1
#define  __SFR_OFFSET 0
2
#include <avr/io.h>
3
4
  .file  "avr_init.S"
5
  .text
6
  .section        .init3,"ax",@progbits
7
8
.org 0x0000
9
  jmp main
10
.org 0x0012
11
  eor r1, r1
12
  ldi  r16, _BV (IVCE)
13
  out  GICR, r16  ; enable change reset vector
14
  out  GICR, r1  ; change reset vector to application

dann funkioniert es nicht mehr, es wird einfach der Timer1 Overflow 
Vektor nicht mehr angesprungen.

Kann mir wer sagen warum das so ist?

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.