If the attached CPU has the Vector
Interface enabled, then the following method is used for servicing IRQs
- Hardware handshake
- CPU asserts coreN_IRQACK signal high
- VIM asserts coreN_IRQADDRV to indicate that the coreN_IRQADDR bus is
stable with the correct Vector Address
- CPU reads the coreN_IRQADDR, jumps to that address, and de-asserts
coreN_IRQACK signal low
- VIM de-asserts coreN_IRQn_intr and coreN_IRQADDRV, VIM masks all IRQs
with the same or lower priority
- VIM loads the value from the Prioritized IRQ (Base Address + 0x08)
(which corresponds to the vector address) to be loaded into the Active
IRQ (Base Address + 0x20) and the valid bit to be set
- Service an interrupt
- Depending on whether the original source of the interrupt was a pulse or a level
(Determined by reading the Active IRQ (Base Address + 0x20) to determine number
and reading the Group M Type Map Register (Base Address + 0x200 +
M*0x20 + 0x1C) to determine type)
- Pulse
- Clear the status by writing a 1 to the appropriate bit in the
Group M Interrupt Enabled Status/Clear Register (Base Address +
0x400 + M*0x20 + 0x04) or Group M Interrupt IRQ Enabled
Status/Clear Register (Base Address + 0x400 + M*0x20 +
0x10)
- Clear the interrupt at the source
- This way, the source can generate another pulse if it
needs to and the VIM will process this as a new
interrupt
- Level
- Clear the interrupt at the source
- Clear the status by writing a 1 to the appropriate bit in the
Group M Interrupt Enabled Status/Clear Register (Base Address +
0x400 + M*0x20 + 0x04) or Group M Interrupt IRQ Enabled
Status/Clear Register (Base Address + 0x400 + M*0x20 +
0x10)
- This way, the level should be gone at the input to the
VIM, it will avoid falsely re-calling the interrupt
- If the source maintains the level, then it means there
is another interrupt
- 4. Write any value to the IRQ Vector Address (Base Address + 0x18)
- This will clear the priority mask and all interrupts to be re-evaluated
for the new highest priority interrupt.
- This will clear the valid bit of the Active IRQ (Base Address + 0x20)