Complex IRQ Controller
Funktion
Der Interruptkontroller ermittelt aus allen anliegenden Interruptsignalen das Signal mit der höchsten Priorität und meldet dieses der CPU. In der Behandlung kann über das Register INT_PRI die zur Zeit größte Nummer, und damit auch das Signal mit der höchsten Priorität ermittelt werden. Eine Unterbrechung eines laufenden Interrupts durch einen Interrupt höherer Priorität ist möglich, da das Signal des RFE-Befehls ausgewertet wird. Solange noch nicht die Abarbeitung eines RFE Befehl erkannt wurde, können nur Interrupts mit einer höheren Priorität als der aktuell bearbeitete diesen unterbrechen, wenn in der Interruptbehandlung mit dem Befehl SBITS 2 (in C durch Aufruf der Funktion interrupt_enable();) die CPU wieder zur Annahme von Interrupts freigegeben wird. Es können maximal 8 Interrupts verschachtelt aufgerufen werden. Der 8. wird dabei intern mit der höchstmöglichen Priorität bewertet, so dass er nicht mehr unterbrochen werden kann. Die Funktion des Interruptkontrollers kann mit der TEST3 Konfiguration überprüft werden.
Register
Offset | Register | Funktion | Zugriff |
0 | INT_PRI | Nummer des aktiven Interrupts mit der zur Zeit höchsten Priorität. | read |
1 | INT_BIT0 | Auflistung des Zustandes der ersten 18 Interruptleitungen | read |
2 | INT_BIT1 | Auflistung des Zustandes der zweiten 18 Interruptleitungen | read |
3 | INT_BIT2 | Auflistung des Zustandes der dritten 18 Interruptleitungen | read |
... | ... | ... | read |
Bitbelegung INT_PRI
Bit | Bedeutung | Reset | |
7-0 | Nummer des aktuellen Interrupt mit der höchsten Priorität | 0 | |
10-8 | Anzahl der aktuell geschachtelten ISR Aufrufe | 0 | |
17-11 | not used | 0 |
Protokolle von dreifach geschachtelten ISR-Funktionen im Test 3.