Dieser Beispielentwurf demonstriert die Interruptfunktion des LogiCore PCI Interfaces. Ist der User-Button gedrückt, werden Interrupts ausgelöst.
------------------------------------------------------------- -- Configure other PCI Header options ------------------------------------------------------------- [...] -- Interrupt Enable cfg_int(113) <= ENABLE ;Außerdem soll durch die Implementation eines einfachen PCI-Targets der Interruptstatus abgefragt werden können. Dafür wird ein 4 KByte großer I/O-Speicherbereich reserviert.
-------------------------------------------------------------- -- Configure Base Address Registers -------------------------------------------------------------- -- BAR0 cfg_int(0) <= ENABLE ; cfg_int(32 downto 1) <= SIZE4K ; cfg_int(33) <= NOFETCH ; cfg_int(35 downto 34) <= TYPE00 ; cfg_int(36) <= MEMORY ;Alle anderen Optionen bleiben deaktiviert bzw. behalten ihre Standardeinstellungen bei.
Der gedrückte User-Button (USER_BUTTON = '0') setzt das Interrupt-Flag intr_reg (negierte Logik!), das mit der INTR_N-Leitung verbunden ist. Sein Status kann über ein minimales PCI-Target abgefragt werden, das über nur ein Nur-Lese-Register verfügt, nämlich gerade das Interrupt-Flag. Eine fallende Flanke beim Steuersignal oe_intr_reg signalisiert das Ende eines Lesezugriffs auf intr_n_reg. Das bei der Flankenerkennung erzeugte Signal oe_intr_reg_fell setzt intr_reg wieder zurück auf 1. Die User-LED leuchtet bei intr_reg = INTR_N = '0'.
Bemerkung: In "echten" Anwendungen sollte man noch ein Steuerregister vorsehen, mit dem die Interruptfunktion ein- und ausgeschaltet werden kann, um ungewünschte Interrupts unterbinden zu können. Erst wenn der Treiber bereit ist, gibt dieser dann die Interruptfunktion auf der Hardware frei.
Der kommentierte VHDL-Code in der Datei userapp.vhd baut auf dem vorangegangenen Single Transfer Target auf und kann unmittelbar nachvollzogen werden.
Eine allgemeine Beschreibung der Zusammenhänge zwischen den PCI-Interruptleitungen und den bekannten IRQ-Leitungen der Interruptcontroller des PCs sowie des Zuweisungsmechanismus in der Konfigurationsphase (Register Interrupt Line und Interrupt Pin des PCI Configuration Headers) werden auf Seite Der PCI Configuration Header im Abschnitt "Interrupt Pin und Interrupt Line" beschrieben.
Autor: gkemnitz, Letzte Änderung: 14.04.2011 15:09:59