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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.