6. Interrupts
6.1 Introduction
The MCU core includes an extended interrupt system supporting multiple interrupt sources and priority levels. The allocation of interrupt
sources between on-chip peripherals and external input pins varies according to the specific version of the device.
Interrupt sources may have one or more associated interrupt-pending flag(s) located in an SFR local to the associated peripheral.
When a peripheral or external source meets a valid interrupt condition, the associated interrupt-pending flag is set to logic 1.
If interrupts are enabled for the source, an interrupt request is generated when the interrupt-pending flag is set. As soon as execution of
the current instruction is complete, the CPU generates an LCALL to a predetermined address to begin execution of an interrupt service
routine (ISR). Each ISR must end with an RETI instruction, which returns program execution to the next instruction that would have
been executed if the interrupt request had not occurred. If interrupts are not enabled, the interrupt-pending flag is ignored by the hard-
ware and program execution continues as normal. The interrupt-pending flag is set to logic 1 regardless of whether the interrupt is ena-
bled.
Each interrupt source can be individually enabled or disabled through the use of an associated interrupt enable bit in the IE and EIEn
registers. However, interrupts must first be globally enabled by setting the EA bit to logic 1 before the individual interrupt enables are
recognized. Setting the EA bit to logic 0 disables all interrupt sources regardless of the individual interrupt-enable settings.
Some interrupt-pending flags are automatically cleared by the hardware when the CPU vectors to the ISR or by other hardware condi-
tions. However, most are not cleared by the hardware and must be cleared by software before returning from the ISR. If an interrupt-
pending flag remains set after the CPU completes the return-from-interrupt (RETI) instruction, a new interrupt request will be generated
immediately and the CPU will re-enter the ISR after the completion of the next instruction.
6.2 Interrupt Sources and Vectors
The CIP51 core supports interrupt sources for each peripheral on the device. Software can simulate an interrupt for many peripherals
by setting any interrupt-pending flag to logic 1. If interrupts are enabled for the flag, an interrupt request will be generated and the CPU
will vector to the ISR address associated with the interrupt-pending flag. Refer to the data sheet section associated with a particular on-
chip peripheral for information regarding valid interrupt conditions for the peripheral and the behavior of its interrupt-pending flag(s).
6.2.1 Interrupt Priorities
Each interrupt source can be individually programmed to one of four priority levels. This differs from the traditional two priority levels on
the 8051 core. However, the implementation of the extra levels is backwards- compatible with legacy 8051 code.
An interrupt service routine can be preempted by any interrupt of higher priority. Interrupts at the highest priority level cannot be pre-
empted. Each interrupt has two associated priority bits which are used to configure the priority level. For backwards compatibility, the
bits are spread across two different registers. The LSBs of the priority setting are located in the IP and EIPn registers, while the MSBs
are located in the IPH and EIPnH registers. Priority levels according to the MSB and LSB are decoded in
rupt Priority Decoding on page 47
. The lowest priority setting is the default for all interrupts. If two or more interrupts are recognized
simultaneously, the interrupt with the highest priority is serviced first. If both interrupts have the same priority level, a fixed order is used
to arbitrate, based on the interrupt source's location in the interrupt vector table. Interrupts with a lower number in the vector table have
priority. If legacy 8051 operation is desired, the bits of the “high” priority registers (IPH and EIPnH) should all be configured to 0.
Table 6.1. Configurable Interrupt Priority Decoding
Priority MSB
(from IPH or EIPnH)
Priority LSB
(from IP or EIPn)
Priority Level
0
0
Priority 0 (lowest priority, default)
0
1
Priority 1
1
0
Priority 2
1
1
Priority 3 (highest priority)
EFM8UB3 Reference Manual
Interrupts
silabs.com
| Building a more connected world.
Rev. 0.2 | 47