ATtiny26 - timer0 interrupt führt zu Reset

#3814178
Lesenswert?

Hallo, ich bin neu im Forum, habe aber schon etwas Erfahrung mit uC's.

Für eine Timer-Anwendung brauche ich einen Timer Interrupt vom ATtiny26 
und verwende hierfür Timer/Counter0 (mit Timer/Counter1 habe ich das 
gleiche Problem).

Sobald ich den Interrupt enable (sei() und TCCR0) führt der uC endlos 
Resets durch.

Das Verhalten ist gleich, auch wenn die ISR gar nicht definiert ist.

Das Verhalten ist gleich bei interner Clock und Crystal Oscillator.

Durch "LED-Debugging" habe ich herausgefunden, dass der Zähler TCNT0 
funktioniert, und dass der Interrupt Flag TOV0 gesetzt wird.

Ich vermute, dass der Interrupt ausgelöst wird aber anstatt zur ISR zum 
Reset Vektor springt.

Ich kompiliere und programmiere mit:
1
$ avr-gcc -I. -O6 -g -mmcu=attiny26 -Wcpp -o $@ $<
2
$ avrdude -p t26 ...

Fällt jemandem hier was auf?
1
#define F_CPU (1600000L)
2

3

4
#include<avr/io.h>
5
#include<avr/interrupt.h>
6
#include<util/delay.h>
7

8

9
ISR( TIMER0_OVF0_vect ) {
10
  PORTA &= ~(1<<7);
11
}
12

13
void greeting () {
14
  uint8_t i, ii;
15
  for (ii=0; ii<2; ii++ ) {
16
    for ( i=0; i<10; i++ ) {
17
      PORTA ^= (1<<(0+ii));
18
      _delay_ms(40);
19
    }
20
  }
21
}
22

23
main()
24
{
25

26
  DDRA=0xFF;
27
  PORTA=0xFF;
28

29
  TIMSK = (1<<TOIE0);
30
  TCNT0 = 0;
31
  greeting();
32

33
  TIFR &= ~(1<<TOV0);
34
  TIFR &= ~(1<<TOV1);
35
  sei();
36
  TCCR0 = 5;
37

38
  while(1) {}
39
}
Angehängte Dateien:
Gast #3814234
Lesenswert?

Jens Schäfer schrieb:
> Ich vermute, dass der Interrupt ausgelöst wird aber anstatt zur ISR zum
> Reset Vektor springt.

Das passiert nur, wenn der angegebene Interruptname dem Compiler nicht 
bekannt ist, dann wird auf Reset umgelenkt. Sieht aber nicht so aus, die 
iotn26.h kennt den TIMER0_OVF0_vect.

Du könntest das erzeugte .hex anhängen, dann kann man nachschauen, was 
passsiert.

Übrigens, so löscht man keine Flags:

Jens Schäfer schrieb:
> TIFR &= ~(1<<TOV0);
> TIFR &= ~(1<<TOV1);
#3814310
Lesenswert?

> Du könntest das erzeugte .hex anhängen, dann kann man nachschauen, was
> passsiert.

Vielen Dank! Anbei das HEX-File.

> Übrigens, so löscht man keine Flags:

Ja, stimmt. - Das hatte ich vor Verzweiflung mal reingeschrieben. Für 
das aktuelle HEX-File habe ich es wieder rausgenommen. (Keine Änderung 
im Verhalten.)

Übrigens kommt der Reset tatsächlich erst, wenn TCNT0 überläuft, also 
der Interrupt Flag gesetzt wird.

Blöde Frage: Wie analysierst Du denn  das HEX-File?
Angehängte Dateien:

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