atmega 169 bootloader int problem

Gast #2411019
Lesenswert?

Hallo,

ich habe ein hier bereits öfter beschriebenes Problem. Ich habe für 
meinen Atmega169 einen Bootloader geschrieben. Der soll einen externen 
Interrupt benutzen. wenn der Interrupt auslöst, wir nicht die ISR, 
sondern ein RESET ausgelöst. ich vermute, dass bei der Adressierung 
etwas schief läuft, finde jedoch nicht das Problem.
Zu meiner Configuration:
Fuses:
1
BOOTSZ1 = 0
2
BOOTSZ0 = 0
3
BOOTRST = 0
Laut Tabelle 113 auf Seite 264 im Datenblatt habe ich so 1024 words, 
also 2048 bytes oberhalb von addr 0x1C00. Deshalb gebe ich dem Linker 
"-Ttext=0x1C00" mit (Ich benutze den avr-gcc).
Der Code ist kleiner als 2k und läuft auch an.
Das Umrouten der Interruptvektoren mache ich mit folgendem Code:
1
uint8_t sreg = SREG;
2
cli();
3
uint8_t mcucr = MCUCR;
4
MCUCR = mcucr | (1 << IVCE);
5
MCUCR = mcucr | (1 << IVSEL);
6
SREG = sreg;
7
sei();
Der externe Interrupt wird mit
1
DDRD &= ~(1 << DDD1);
2
PORTD |= (1 << PD1);
3
EICRA = 0;
4
EICRA |= (1 << ISC01);
5
EIMSK = 0;
6
EIMSK |= (1 << INT0);
initialisiert, die ISR sieht folgendermaßen aus:
1
ISR(INT0_vect) {
2
    switch (m_radio_mode) {
3
    case RADIO_MODE_RX:
4
        m_rx_active = true;
5
        break;
6

7
    case RADIO_MODE_TX:
8
        m_tx_active = false;
9
        break;
10
    }
11
}
Wenn ich das als "normale" Application baue, dann läuft's, jedoch im 
Bootloader mode schmiert's mit dem eintreffenden Interrupt ab. Jemand 
'ne Ahnung, was ich da falsch mache?

Gr.
Gast #2411280
Lesenswert?

Hallo,

's scheint die Adresse gewesen zu sein, wenn ich auf 0x3800 umstelle, 
dann gibt's keinen reset mehr (allerdings löst der interrupt auch nicht 
aus...)
ich schau halt noch 'n bisschen weiter...

Gr.

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