AVR - In ISR gesetztes volatile flag kann nicht gelesen werden

Gast #2608177
Lesenswert?
• ▲
▼
Hallo zusammen,

ich habe leider ein Problem mit meinem Code und einer ISR.

http://pastebin.com/WLTzYjRV

hier sind die relevanten Teile. Der Haken ist: Ich weiss, dass die ISR 
aufgerufen wird und die globale variable entsprechend setzt. Nur leider 
wird das If in der main() Funktion nie als true validiert. Habt ihr eine 
Idee?
Gast #2608717
Lesenswert?
• ▲
▼
Stefan Ernst schrieb:
> Rolf Magnus schrieb:
>> Das ist eine ungewöhnliche Art, bei avr-gcc eine ISR zu definieren.
>
> Ich würde eher auf avr32-gcc tippen, und dafür sieht es ok aus.

Ohne zu wissen wie das beim avr32-gcc funktioniert, aber woher soll da 
die Information kommen, welcher Interrupt-Vektor das ist?
Gast #2609064
Lesenswert?
• ▲
▼
Die Programmlogik sieht für mich out-of-sequence aus: Zuerst wird der 
ADC IRQ Handler gesetzt, dann werden Interrupts global enabled und dann 
wird der ADC konfiguriert. Ich hätte das Konfigurieren zuerst gemacht.

Wenn du

> Ich weiss, dass die ISR aufgerufen wird und die globale variable
> entsprechend setzt. Nur leider wird das If in der main() Funktion nie als > true 
validiert.

an der Funktion/Nichtfunktion von update_pwm() fest machst, dann 
bedenke:

adc->cdr0 (&AVR32_ADC) wird nicht dann ausgelesen, wenn der Messwert 
vorliegt nämlich in dem ADC-Handler, sondern irgendwann später in 
main(). Die ADC-Einheit hat dann eine neue Messung gestartet und 
eventuell die Daten bereits verändert (Datenblatt nachsehen, ob 
Pufferung vorhanden).
Gast #2610278
Lesenswert?
• ▲
▼
Hallo Krapo,

ich habe versucht die Intialisierungsreihenfolge zu verändern - das hat 
leider nichts gebracht...

Darüberhinaus habe ich auch noch mal über andere Wege versucht 
herauszufinden ob das If aufgerufen wird: Auch mit einem GPIO toggle pin 
ändert sich nichts...
Das mit dem UpdatePWM sollte aber eigentlich auch funktionieren, da laut 
Datenblatt das End-Of-Conversion Flag vom ADC erst beim Lesen des 
Registers gecleared wird, und so lange dieses noch gesetzt ist auch 
keine neue conversion stattfindet.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.