The INTC can also perform a nesting function in its prioritization. Nesting is a method of disabling certain interrupts (usually lower-priority interrupts) when an interrupt is taken so that only those desired interrupts can trigger to the host while it is servicing the current interrupt. The typical usage is to nest on the current interrupt and disable all interrupts of the same or lower priority (or channel). Then the host will only be interrupted from a higher priority interrupt.
The nesting is done in one of three methods:
- Nesting for all host interrupts, based on channel
priority: When an interrupt is taken, the nesting level is set to its channel
priority. From then, that channel priority and all lower priority channels will
be disabled from generating host interrupts and only higher priority channels
are allowed. When the interrupt is completely serviced, the nesting level is
returned to its original value. When there is no interrupt being serviced, there
are no channels disabled due to nesting. The global nesting level register
(ICSS_INTC_GLB_NEST_LEVEL_REG) allows the checking and setting of the global
nesting level across all host interrupts. The nesting level is the channel (and
all of lower priority channels) that are nested out because of a current
interrupt.
- Nesting for individual host interrupts, based on channel priority: Always nest based on channel priority for each host interrupt individually. When an interrupt is taken on a host interrupt, then, the nesting level is set to its channel priority for just that host interrupt, and other host interrupts do not have their nesting affected. Then for that host interrupt, equal or lower priority channels will not interrupt the host but may on other host interrupts if programmed. When the interrupt is completely serviced the nesting level for the host interrupt is returned to its original value. The host interrupt nesting level registers (ICSS_INTC_NEST_LEVEL_REGj where j = 0 to 19) display and control the nesting level for each host interrupt. The nesting level controls which channel and lower priority channels are nested. There is one register per host interrupt.
- Software manually performs the nesting of interrupts. When an interrupt is taken, the software will disable all the host interrupts, manually update the enables for any or all the interrupts, and then re-enables all the host interrupts. This now allows only the interrupts that are still enabled to trigger to the host. When the interrupt is completely serviced the software must reverse the changes to re-enable the nested out interrupts. This method requires the most software interaction but gives the most flexibility if simple channel based nesting mechanisms are not adequate.