Forum: FPGA, VHDL & Co. NIOS II Interrupt


von entwickler (Gast)


Lesenswert?

Hi,

Ich habe eine kurze Frage bzgl. der Implementierung einer Interrupt 
Sercice Routine auf einem NIOS 2 Softcore Prozessor. Bisher sieht das 
ganze so bei mir aus:

void handle_audio_interrupts (void* context){
g_temp = g_data[g_pos];
g_temp = g_temp<< 16;
g_temp = g_temp + alt_16(g_data[g_pos+1]);
IOWR_32DIRECT(AVALON_BRIDGE_WITH_IRQ_0_BASE, 0x000000000,g_temp);
g_pos = g_pos + 2;
if (g_pos == stk::RT_BUFFER_SIZE)
{g_pos = 0;}
}

static void init_audio_pio()
{
void* edge_capture_ptr = (void*) &edge_capture;
alt_ic_isr_register(AVALON_BRIDGE_WITH_IRQ_0_IRQ_INTERRUPT_CONTROLLER_ID 
,
    AVALON_BRIDGE_WITH_IRQ_0_IRQ,
    handle_audio_interrupts,
    edge_capture_ptr,
    0x0);
}

In meiner Main Funktion rufe ich die init_audio Funktion auf. Im 
Gegensatz zu den Beispielen auf der Altera Seite verwende ich weder die 
Interrupt_Edge_Cap noch die Interrupt_Mask Geschichten. Das liegt 
dadran, das mein Interrupt von einem externen Modul gesteuert wird. und 
AVALON_BRIDGE_WITH_IRQ im Prinzip nichts anderes als ein nach aussen 
gefuehrter Avalon Slave mit IRQ Conduit ist.

Meine Fragen: Wie muss die Funktion bzw. die Funktionen veraendert 
werden damit die obige Struktur passt? Derzeit scheint der Interrupt 
einmal zu feuern und sich dann aufzuhaengen. Variablen mit einem "g_" 
sind globale Variablen.g_data enthaelt die Daten welche ich nach 
"aussen" geben moechte.

Weiss jemand einen Rat? Ich habe im Internet keine hilfreiche 
Dokumentation gefunden, weder die Avalon Bus Dokumentation noch die 
Software Development Dokumente haben mir grossartig weitergeholfen, es 
mag sein das ich die entscheidenen Stellen uebersehen habe.

gruesse, entwickler

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.