Forum: Compiler & IDEs timer1compare interrupt wird ausgelöst obwohl der timer gestoppt ist


von ralph (Gast)


Angehängte Dateien:

Lesenswert?

hi

hab folgendes problem:
atmega 8, programmiersprache c , 14,7456MHz quarz

alle 10µsec sollte ein timer 2 compare interrupt ausgelöst werden
ich stoppe den timer 2 (sodass kein interrupt mehr ausgelöst werden 
sollte)
jedoch wird beim debuggen mit avr studio 4 alle 10µsec ein timer 2 
compare interrupt ausgelöst(obwohl der timer vorher gestoppt wurde)


hab ich den timer falsch gestoppt oder weis irgendwer was der fehler 
sein könnte

anbei der source-code

danke
lg ralph

von Stefan E. (sternst)


Lesenswert?

ralph schrieb:

> hab ich den timer falsch gestoppt

Ja.

1
TCCR2 &= ~(1<<CS22) | (1<<CS21) | (1<<CS20);
Da fehlt noch eine Klammer:
1
TCCR2 &= ~((1<<CS22) | (1<<CS21) | (1<<CS20));

von Stefan E. (sternst)


Lesenswert?

Zusatzbemerkungen am Rande:

1)
1
  sreg = SREG;    // save global interrupt flag
2
  cli();        // disable interrupts    
3
  i = TCNT1;      // read TCNT1  
4
  SREG = sreg;    // restore global interrupt flag
5
  sei();
Wozu das Hantieren mit dem SREG, wenn dahinter doch ein sei() folgt?

Ich würde dir auch empfehlen, die Makros der AVR-Libc dafür zu 
verwenden:
http://www.nongnu.org/avr-libc/user-manual/group__util__atomic.html

2)
entfernung muss volatile sein.

von Marius W. (mw1987)


Lesenswert?

Das ist obendrein ganz gefährlich... Die Interrupts werden nämlich mit 
sei innerhalb einer Interrupt-Routine wieder aktiviert. Das kann böse 
enden...

MfG
Marius

von Stefan E. (sternst)


Lesenswert?

Ach, dass das im Kontext eines Interrupts läuft, ist mir beim schnellen 
Überfliegen gar nicht aufgefallen.

von ralph (Gast)


Lesenswert?

danke für die schnellen antworten

hab die klammern schon gesetzt    funktioniert jetzt

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.