Forum: FPGA, VHDL & Co. Altera Avalon Slave Interrupt


von Jens (Gast)


Lesenswert?

Guten morgen,
ich habe die Aufgabe einen bestehenden Bildverarbeitungs-Core in die 
Avalon Switch Fabric des Nios II einzubauen. Soweit funktioniert auch 
alles, nur möchte ich nun den Avalon Slave einen Interrupt erzeugen 
lassen und genau dieser Punkt bereitet mit Probleme.

Der Avalon Slave erzeugt einen über 2 (zu kurz ?) Pulse andauernden IRQ 
puls. Dieser wurde als 'interrupt sender' im Component Editor deklariert 
und als 'associated addressable interface' habe ich den Namen meines 
Cores eingetragen. Wie gehe ich nun weiter vor ? Braucht mein Avalon 
Slave ein dediziertes IRQ-Bit Registers, welches ich in der Interrupt 
Routine zurücksetzte ? Vielleicht kennt sich ja jemand diesbezüglich aus 
!

Danke,
Jens

von Duke Scarring (Gast)


Lesenswert?

Wo ist denn der Interrupt angeschlossen?
Außerdem sehe ich nicht, wo momentan Dein Problem liegt. Was 
funktioniert denn nicht?

Duke

von Jens (Gast)


Lesenswert?

Der Interrupt geht direkt an den Nios II (e). Meine ISR wird aufgerufen, 
nur jedoch nicht mehr verlassen. Da sich mein Interrupt Signal (vom 
Slave kommend) ja autmatisch zurücksetzt, habe ich kein spezielles 
Register zum Deaktivieren des Interrupts (aus der ISR heraus) vorgesehen 
(wie dies z.B. in der Altera PIO Beispielen gemacht wird).
Gruss,
Jens

von Harald F. (hfl)


Lesenswert?

Ein Auszug aus der Avalon-MM Spezifikation:

An interrupt sender drives a single interrupt signal to an interrupt 
receiver. The timing of the irq signal must be synchronous to the rising 
edge of its associated clock, but has no relationship to any transfer on 
any other interface. irq must be asserted until the interrupt has been 
acknowledged on the associated Avalon-MM slave interface. An Avalon-MM 
slave can only include one interrupt sender.
The interrupt receiver typically determines how to respond to the event 
by reading an interrupt status register from an Avalon-MM slave 
interface. The mechanism used to acknowledge an interrupt is component 
specific.

Damit ist wohl alles gesagt. Die Komponente muss den IRQ aktiv setzen, 
und in der ISR muss der IRQ per Programm zurückgesetzt werden. Im 
übrigen: Achte bitte auf die Taktdomäne!

Grüße,
Harald

von Duke Scarring (Gast)


Lesenswert?

Jens schrieb:
> kein spezielles
> Register zum Deaktivieren des Interrupts (aus der ISR heraus) vorgesehen
> (wie dies z.B. in der Altera PIO Beispielen gemacht wird

Ok, damit und mit der Erklärung von Harald habe ich es verstanden. Im 
Prinzip brauchst Du noch einen kleinen Interrupt-Controller.

Duke

von Jens (Gast)


Lesenswert?

Hey vielen Dank,
funktioniert bestens! Gruss,
Jens

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.