GR740-UM-DS, Nov 2017, Version 1.7
302
www.cobham.com/gaisler
GR740
the contents of the select registers by writing ‘1’ to the lock bit in the Asymmetric Multiprocessing
Control Register. The lock bit can be cleared by software by writing ‘0’ to the bit
When a software driver for the interrupt controller is loaded, the driver should check the Asymmetric
Multiprocessing Control Register and Interrupt Controller Select Registers to determine to which con-
troller the current processor is connected. After software has determined that it has been assigned to
controller n, software should only access the controller with registers at offset 0x1000 * n. Note that
the controllers are enumerated with the first controller being n = 0.
The processor specific registers (mask, force, interrupt acknowledge) can be read from all interrupt
controllers. However the processor specific mask and interrupt acknowledge registers can only be
written from the interrupt controller to which the processor is assigned. This also applies to individual
bits in the Multiprocessor Status Register. Interrupt Force bits in a processor’s Interrupt Force Regis-
ter can only be cleared through the controller to which the processor is assigned. If the ICF field in the
Asymmetric Multiprocessing Control Register is set to ‘1’, all bits in all Interrupt Force Registers can
be set, but not cleared, from all controllers. If the ICF field is ‘0’ the bits in a processor’s Interrupt
Force register can only be set from the controller to which the processor is assigned.
21.2.2 Interrupt prioritization
The interrupt controller monitors interrupt 1 - 15 of the interrupt bus. When any of these lines are
asserted high, the corresponding bit in the interrupt pending register is set. The pending bits will stay
set even if the PIRQ line is de-asserted, until cleared by software or by an interrupt acknowledge from
the processor. The default behaviour for peripherals is to use pulsed interrupts (an interrupt line is
asserted for one clock cycle to signal an interrupt).
Each interrupt can be assigned to one of two levels (0 or 1) as programmed in the interrupt level regis-
ter. Level 1 has higher priority than level 0. The interrupts are prioritised within each level, with inter-
rupt 15 having the highest priority and interrupt 1 the lowest. The highest interrupt from level 1 will
be forwarded to the processor. If no unmasked pending interrupt exists on level 1, then the highest
unmasked interrupt from level 0 will be forwarded.
Interrupts are prioritised at system level, while masking and forwarding of interrupts in done for each
processor separately. Each processor in an multiprocessor system has separate interrupt mask and
force registers. When an interrupt is signalled on the interrupt bus, the interrupt controller will priori-
tize interrupts, perform interrupt masking for each processor according to the mask in the correspond-
ing mask register and forward the interrupts to the processors.