Starten von Timer2 bei ATmega1284p erzeugt immer BADISR_vect

OP #4453631
Lesenswert?
• ▲
▼
Hallo,

ich will ein existierendes Programm vom mega328p auf den mega1284p 
konvertieren.
Auf dem mega32 lief alles problemlos.

Ich bin beide Datenblätter durch und dachte ich habe alle Bits und 
Register angepasst.
Aber sobald ich
1
TIMSK2 |= _BV(OCIE2A);
ausführe wird sofort der BADISR_vect statt dem TIMER2_COMPA_vect 
getriggert.

Den Timer Initialisiere ich wie folgt:
1
#define REALTIME_TC0 10UL /* time in ms */
2
#define PRESCALE_TC0 1024UL   /* seems to be a good value for 8 and 16 MHz, change CS22-CS20 too */
3
#define OVERFLOW_TC0 ((uint8_t)((REALTIME_TC0 * (F_CPU/PRESCALE_TC0)) / (1000UL)))
4

5
    TCCR2A = (_BV(WGM21)|_BVC(WGM20)|_BVC(COM2A1)|_BVC(COM2A0)|_BVC(COM2B1)|_BVC(COM2B0));
6
    TCCR2B = (_BVC(FOC2A)|_BVC(FOC2B)|_BVC(WGM22)|_BV(CS22)|_BV(CS21)|_BV(CS20));
7
    OCR2A = OVERFLOW_TC0;
8
    TIMSK2 |= _BV(OCIE2A);

Der atmega läuft mit einem externen Quarz mit 16MHz, die Fuses sind mit 
avrdude wie folgt gesetzt: -U hfuse:w:0xd3:m -U efuse:w:0xff:m

Der Timer soll im CTC Modus laufen, mit einem Vorteiler von 1024 laufen.
Er dient als grobe Zeitbasis von 10ms.

Ach ja das "BVC" löscht einfach das Bit, das "BV" setzt das 
entsprechende Bit. Das "BVC" nutze ich, damit ich kein Bit vergesse zu 
Initialisieren.

Vielleicht kann mir einer mal die Tomaten von den Augen nehmen.

Danke
Juergen
OP #4453677
Lesenswert?
• ▲
▼
holger schrieb:
>>ausführe wird sofort der BADISR_vect statt dem TIMER2_COMPA_vect
>>getriggert.
>
> Dann hast du den Namen der ISR falsch eingegeben.
Das dachte ich auch erst.
Füge ich aber an den namen ein Zeichen an und Compiliere, warnt der 
Compiler mich vor einer "Misspelled ISR".
Mach ich das Zeichen wieder weg, ist die Warnung weg.
Im Include File zum mega1284p heißt der vector "TIMER2_COMPA_vect".
So heißt er bei mir auch.

Gruss
Juergen
OP #4453702
Lesenswert?
• ▲
▼
das verrückte ist, ich habe nun im Initialisierung Bereich "nach" dem 
init des Timers code zum beschreiben eines LCD eingefügt (der arbeitet 
100% ohne Interrupts) und jetzt geht es weiter.

Noch den Hinweis:
- Zum Testen und Fehler eingrenzen, habe ich nach dem Init der ISR eine 
while(1) mit code die eine LED BLinken lässt.

Der Nachfolgende Code cann ich so zu 100% ausschließen.

Nachdem er mir nun in die While lief, hab ich den init des USART dazu 
genommen und jetzt streikt er dort...
Ich sehe also noch den code "uart vorbei" im display

Der code aus main. Ich kriege den code leider nicht ohne riesen Aufwand 
so zusammengepackt, das ich den hier posten kann. Das sind mehrere 
Projekte ineinander verknüpft. (Transmitter, Empfänger, PC Code)
1
    LED_DDR |= _BV(LED_PIN);
2
    CONTRAST_DDR |= _BV(CONTRAST_PIN);
3

4
    LED_OFF;
5
    CONTRAST_ON;
6

7
    LED_TOGGLE;
8
    display.init();
9
    LED_TOGGLE;
10

11

12

13
    // Global Interrupts aktivieren
14
    sei();
15
    display.lcdText("Startup");
16
    display.processLCDBusy();
17

18
    initTimer(); // bisher war hier schluss
19
    display.lcdText("Startup vorbei");
20
    display.processLCDBusy();
21

22
    initUart ( 38400 );
23
    display.lcdClear();
24
    display.lcdText("uart vorbei");
25
    display.processLCDBusy();
26
    uartPuts("AT\rAT\r"); // jetzt ist hier schluss

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.