Forum: FPGA, VHDL & Co. Eigene Komponente mit Interrupt in QSYS-System: IR registrieren


von HAnz (Gast)


Lesenswert?

Hallo Leute,

ich habe eine Komponente (miniuart) in mein QSYS-NIOS II-System 
eingefügt, der mir ein Interrupt erzeugt. Soweit funktioniert dieser 
Core auch.

Nun möchte ich noch den Interrupt in der Software registrieren.

So ist derzeit mein Versuch:

1
volatile int mini_uart=0;
2
3
:
4
5
static void MINIUART_interrupt(void* context, alt_u32 id)
6
 {
7
  alt_putstr("MINIUART IR AUFGETRETEN!!!\n");
8
  alt_putstr("\n");
9
 }
10
11
:
12
13
void* mini_uart_ptr = (void*) &mini_uart;
14
15
alt_ic_isr_register(MINIUART_0_IRQ_INTERRUPT_CONTROLLER_ID, MINIUART_0_IRQ, MINIUART_interrupt, mini_uart_ptr, 0x0);
16
17
alt_ic_irq_enable(MINIUART_0_IRQ_INTERRUPT_CONTROLLER_ID, MINIUART_0_IRQ);
18
19
:


Jedoch funktioniert das nicht richtig. Es wird ständig ein IR erzeugt.
Muss ich den Interrupt anders registrieren? Was mach ich falsch?

Gruß: HAnz

von Sigi (Gast)


Lesenswert?

Der Fehler ist, dass deine Komponente einen Interrupt
auslöst, d.h. ein Signal "setzt", aber wahrscheinlich
dieses Signal nach Abarbeitung der IR-Routine nicht
"zurückgesetzt" wird.
Was du bzw. deine Komponente braucht, ist neben der
IR-Schnittstelle noch z.B. eine Avalon-MemorySlave
Schnittstelle. Mit dieser kann dan komponentenintern
ein Register zum Löschen des Signals beschrieben
werden. Dies wird idR in der IR-Routine, z.B. am
Anfang gemacht.

von HAnz (Gast)


Lesenswert?

Sigi schrieb:
> Der Fehler ist, dass deine Komponente einen Interrupt
> auslöst, d.h. ein Signal "setzt", aber wahrscheinlich
> dieses Signal nach Abarbeitung der IR-Routine nicht
> "zurückgesetzt" wird.

Danke Sigi! Das war der Grund.

Gruß

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.