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

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