Forum: FPGA, VHDL & Co. Frage bezüglich Interrupts


von Kiko K. (Firma: Uni Heidelberg) (kiko92)


Lesenswert?

Hallo,


ich habe eine kleine Frage zu Interrupts.

Infos:
Ich benutze das DE0 Board von Altera, arbeite mit NIOS II und die 
Programmiersprache ist C.

Aktueller Stand meines Codes:
Grob erklaert, ich habe eine main() und dort ist eine while(1) schleife.
In der while-Schleife ist ein Automat mit eigenem Typedef implementiert.


Nun meine Frage:
In jedem Switch-Case gibt es ein Ereignis bzw. es werden einige Methoden 
aufgerufen und oder paar LED's angesteuert, je nach Case-Fall.
Ich möchte gerne die Ereignisse die im Case-Konstrukt ausgeführt werden 
gerne auslagern in einer Interruptserviceroutine.
Die States bzw. Case-Faille werden durch drücken von Buttons gewechselt.

Mein Problem:
Woher soll die ISR wissen in welchem Case-Fall ich bin und das dazu 
passende Ereignis ausführen?

Gibt es die möglichkeit für 1 Button mehrere ISR's zu schreiben und 
diese irgendwie zu unterscheiden?

Wuerde das mit den folgenden Methoden gehen?
void alt_irq_register(irNr, (void *) contextPtr, (void *) devPtr);


Hfft versteht man meine Frage, habe so gut wie möglich beschrieben.

Hoffe auf eine kleine Hilfe und oder ein Rat.

Vielen Dank im voraus! :)

Lg

von Falk B. (falk)


Lesenswert?

@ Kiko Kilian (Firma: Fh-Koeln) (kiko92)

>In jedem Switch-Case gibt es ein Ereignis bzw. es werden einige Methoden
>aufgerufen

In C gibt es keine Methoden, nur stinknormale Funktionen.

> und oder paar LED's angesteuert, je nach Case-Fall.

WOW! Da kann so ein SoC ja voll seine Qualitäten ausspielen ;-)

>Ich möchte gerne die Ereignisse die im Case-Konstrukt ausgeführt werden
>gerne auslagern in einer Interruptserviceroutine.

Warum? Sind sie sooooo zeitkritisch?

>Die States bzw. Case-Faille werden durch drücken von Buttons gewechselt.

Also lahmes Zeug. Also lass es wie es ist.

>Woher soll die ISR wissen in welchem Case-Fall ich bin und das dazu
>passende Ereignis ausführen?

Globale Variable, welche volatile ist. Siehe Interrupt.

>Gibt es die möglichkeit für 1 Button mehrere ISR's zu schreiben und
>diese irgendwie zu unterscheiden?

Ja, aber das ist reichlich unsinnig. Mach eine einfache 
Fallunterscheidung in der ISR.

>Wuerde das mit den folgenden Methoden gehen?
>void alt_irq_register(irNr, (void *) contextPtr, (void *) devPtr);

Du denkst viel zu kompliziert.

K I S S!!

http://de.wikipedia.org/wiki/KISS-Prinzip

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.