Problem mit Timer interrupt avr-libc

Gast #1156949
Hallo,

ich mache gerade meine ersten Versuche mit dem ATMEGA32. Ich habe vorher 
schon mit ATMEGA 162 sowie ATTINY's gearbeitet. Ich wollte einen 
periodischen Timer Interrupt erzeugen auf die folgenden Art:
1
#define TICKER_FREQ 50
2
void init_timeslice()
3
   {
4
   TCNT1 = 0;
5
   OCR1A = F_CPU/(64*TICKER_FREQ)-1; // set divider for clock ticker
6
   TCCR1A = 0; //no output, CTC mode 
7
   TCCR1B = 0b00001011; //CTC mode, prescaler 64   
8
   TIMSK  = 0b00010000; // allow Timer 1 output compare A interrupt
9
   sei();
10
   }
Die Interrupt-Service Routine sieht so aus:
1
ISR(TIMER1_COMPA_vect)
2
   {
3
     ...
4

5
   sei();
6
   }

Leider funktioniert es weder in der Hardware noch im 
AVR-Studio-Simulator.

Die Interruptroutine wird nie angesprungen, statt dessen macht der 
Controller einen Reset. Die Werte in den Timer-Registern sehen jedoch 
vernünftig aus. Woran könnte das liegen?

Gruss
Mike
@  AVR Beginner (Gast)

>Die Interrupt-Service Routine sieht so aus:

>ISR(TIMER1_COMPA_vect)
>   {
>     ...

>   sei();
>   }

Wie kommst du auf die Idee, sei() habe etwas in einem Interrupt 
verloren? Das kann mal fix ins Auge gehen.

>Controller einen Reset. Die Werte in den Timer-Registern sehen jedoch
>vernünftig aus. Woran könnte das liegen?

Probier mal die Beispiele aus Sleep Mode und Interrupt.

MFG
Falk
Persönliche Seite
1/ Du bietest ja nur einen Codefetzen an. Die Nachfrage muss dann 
kommen: init_timeslice() wird in main() aufgerufen?

2/ sei() in ISR(TIMER1_COMPA_vect) ist überflüssig.

3/ Sicher bei diesen Anweisungen?
   TCCR1A = 0; //no output, CTC mode
   TCCR1B = 0b00001011; //CTC mode, prescaler 64
   TIMSK  = 0b00010000; // allow Timer 1 output compare A interrupt

Absolute Zuweisungen, also ohne symbolische Namen, kontrolliere ich 
nicht. Beim Übergang von einem zum anderen AVR können sich die absoluten 
Bitwerte ändern (es gibt Beispiele), die symbolischen Namen bleiben aber 
gleich.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.