mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP nichtperiodischer Interrupt


Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe eine kleine Interruptstruktur von zwei Interrupts die von
Timer1 und Timer2 periodisch aufgerufen werden. Nun brauche ich noch
einen dritten Interrupt, der immer dann läuft, wenn die anderen beiden
nicht laufen (quasi niederste Priorität). Kann mir jemand sagen, mit
welchem Ereignis dieser Interrupt angestoßen wird (er muß nicht
periodisch laufen). Wie könnte ich das realisieren?

Ich habe die Frage schonmal gestellt, hatte aber das Gefühl, daß es
unter gegangen ist, weil der Thread zu lang war...

Viele Grüße und herzlichen Dank,

Horst

Autor: MSE (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne Deinen alten Thread nicht (und werde jetzt auch nicht nach ihm
suchen) und habe auch nicht viel Ahnung von DSPs. Ich möchte Dich jedoch
darauf hinweisen, dass wahrscheinlich niemand wissen kann, was in Deinem
System wie funktioniert, wenn Du uns nichts darüber sagst (z.B. welcher
DSP bei Dir läuft).

Woher sollen wir wissen, was in Deiner Schaltung Interrupts auslösen
kann?

Gruß, Michael

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, sorry:

DSP: F2812
Entwicklungsumgebung: Code Composer 2.20.0

Gruß, Horst

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich glaube, ich habe die Lösung:

Ich habe jetzt eine while(1)-Schleife am Ende der main-Routine
eingebaut, so daß die CPU nie aus der main-Routine raus laufen kann. In
dieser while(1)-Schleife rufe ich die Funktion auf, die ausgeführt
werden soll, wenn keiner der beiden anderen Interupts aktiv ist.

Müßte stimmen, oder?

Viele Grüße und herzlichen Dank,

Horst

Autor: Andreas Fertl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und du willst sonnst nichts anderes aufrufen?

nur die 2 ints und eine funktion?

Dann würd ich auch sagen dass das so klappt.
Aber nicht grad schön...

Du könntest doch ne art "Semaphore" benutzen.
2 stück, immer als erstes bei der INT Routine ausführen.
INT1Running=TRUE;
INT2Running=TRUE;

if ((INT1Running || INT2Running) == FALSE)
{
Funktionsaufruf();
}


Der if block in deiner while(1) dürfte das nun auch können.

Gruß Andreas

Autor: Andreas Fertl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm allerdings könnte auch der funktionsaufruf() dann natürlich noch
unterbrochen werden durch die 2 timerints. Falls du das nicht möchtest
schalt sie davor ab und danach wieder an.

Gruß Andreas

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.