STM8 external interrupt auswertung

Gast #6232665
Hallo zusammen,

Ich möchte mit meinem STM8 drei PWM-Signale mit Hilfe von externen 
Interrupts und Timer 4 auswerten. (Ich weiß es gibt einen PWMI auf TIM1, 
aber dieser wird anderweitig benötigt).
Die Auswertung des PWM-Signals eines Pins funktioniert so weit so gut. 
Da die PWM-Input Pins auf einem Port liegen kann es leider dazu kommen, 
dass ein Interrupt von einem anderen Pin kommt und dieser somit die 
Werte verfälscht.
Meine Idee dazu wäre gewesen, dass ich jeweils nur den Pin, der 
ausgewertet werden soll "interruptfähig" mache und so zyklisch die 3 
PWM-Signale auslesen.
Nun meine Frage, funktioniert das so? Darf ich die Pin-Konfiguartion 
einfach zyklisch mitten im Programm ändern, ohne etwas zu beachten? 
Sollte ich ein asm(rim) -> asm(sim) um diese "neukonfiguration" packen?
Ich bin natürlich auch gerne offen für andere Lösungsvorschläge!

Viele Grüße
Gast #6232797
SCHWB schrieb:
> dass ein Interrupt von einem anderen Pin kommt und dieser somit die
> Werte verfälscht.

Aber sowas lässt sich doch lösen: eine gemeinsame Interupt Service 
Routine stellt als erstes fest was genau den IRQ ausgelöst hat und 
verzweigt dann in die spezielle Routine, die Verzögerung beträgt ja nur 
Mikrosekunden. Natürlich müssen die alle minimal sein damit nicht das 
System mit IRQs überladen wird.

Georg
Gast #6232891
georg schrieb:
> Aber sowas lässt sich doch lösen: eine gemeinsame Interupt Service
> Routine stellt als erstes fest was genau den IRQ ausgelöst hat und
> verzweigt dann in die spezielle Routine

Die ISR wird ja trotzdem ausgelöst und ich müsste ständig schauen, ob 
sich bei dem PWM-Signal, das ich auswerten will gerade ein 
Flankenwechsel stattgefunden hat mit einer if-Abfrage in diesem Stile 
denke ich mal: {if(stateNew != stateOld)}.
Wäre da nicht eine Änderung der Interruptfähigkeit, falls sie so 
funktioniert, wie oben beschrieben, viel effizienter?
Gast #6232899
SCHWB schrieb:
> dass ich jeweils nur den Pin, der
> ausgewertet werden soll "interruptfähig" mache und so zyklisch die 3
> PWM-Signale auslesen.

SCHWB schrieb:
> falls sie so
> funktioniert, wie oben beschrieben, viel effizienter?

Dann kannst du doch gleich die IO-Pins pollen.

Ob das überhaupt so problemlos geht müsste man im Hardware und 
Softwaremanual des Controllers prüfen, das wäre mir aber viel zu 
unübersichtlich.

Georg

Antwort schreiben

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