11.4.2 Natural Order (Hardware) Priority

When vectored interrupts are enabled and more than one interrupt with the same user specified priority level is requested, the priority conflict is resolved by using a method called “Natural Order Priority”. Natural order priority is a fixed priority scheme that is based on the IVT.

Table 11-2. Interrupt Vector Priority Table
Vector

Number

Interrupt

source

Vector

Number

(cont.)

Interrupt

source

(cont.)

0x0 Software Interrupt 0x40 U2RX
0x1 HLVD (High/Low-Voltage Detect) 0x41 U2TX
0x2 OSF (Oscillator Fail) 0x42 U2E
0x3 CSW (Clock Switching) 0x43 U2
0x4 TU16A (Universal Timer 16A) 0x44 TMR5
0x5 CLC1 (Configurable Logic Cell) 0x45 TMR5G
0x6 CAN (CAN general) 0x46 CCP2
0x7 IOC (Interrupt-On-Change) 0x47 SCAN
0x8 INT0 0x48 U3RX
0x9 ZCD (Zero-Cross Detection) 0x49 U3TX
0xA AD (ADC Conversion Complete) 0x4A U3E
0xB ACT (Active Clock Tuning) 0x4B U3
0xC CM1 (Comparator) 0x4C
0xD SMT1 (Signal Measurement Timer) 0x4D CLC4
0xE SMT1PRA 0x4E PWM4RINT
0xF SMT1PWA 0x4F PWM4GINT
0x10 ADT/ADCH1 (ADC Context 1) 0x50 INT2
0x11 ADCH2 (ADC Context 2) 0x51 CLC5
0x12 ADCH3 (ADC Context 3) 0x52 CWG2 (Complementary Waveform Generator)
0x13 ADCH4 (ADC Context 4) 0x53 NCO2
0x14 DMA1SCNT (Direct Memory Access) 0x54 DMA3SCNT
0x15 DMA1DCNT 0x55 DMA3DCNT
0x16 DMA1OR 0x56 DMA3OR
0x17 DMA1A 0x57 DMA3A
0x18 SPI1RX (Serial Peripheral Interface) 0x58 CCP3
0x19 SPI1TX 0x59 CLC6
0x1A SPI1 0x5A CWG3
0x1B TMR2 0x5B TMR4
0x1C TMR1 0x5C DMA4SCNT
0x1D TMR1G 0x5D DMA4DCNT
0x1E CCP1 (Capture/Compare/PWM) 0x5E DMA4OR
0x1F TMR0 0x5F DMA4A
0x20 U1RX 0x60 U4RX
0x21 U1TX 0x61 U4TX
0x22 U1E 0x62 U4E
0x23 U1 0x63 U4
0x24 CANRX (CAN receive) 0x64 DMA5SCNT
0x25 CANTX (CAN transmit) 0x65 DMA5DCNT
0x26 PWM1RINT 0x66 DMA5OR
0x27 PWM1GINT 0x67 DMA5A
0x28 SPI2RX 0x68 U5RX
0x29 SPI2TX 0x69 U5TX
0x2A SPI2 0x6A U5E
0x2B TU16B (Universal Timer 16B) 0x6B U5
0x2C TMR3 0x6C DMA6SCNT
0x2D TMR3G 0x6D DMA6DCNT
0x2E PWM2RINT 0x6E DMA6OR
0x2F PWM2GINT 0x6F DMA6A
0x30 INT1 0x70
0x31 CLC2 0x71 CLC7
0x32 CWG1 (Complementary Waveform Generator) 0x72 CM2
0x33 NCO1 (Numerically Controlled Oscillator) 0x73 NCO3
0x34 DMA2SCNT 0x74 DMA7SCNT
0x35 DMA2DCNT 0x75 DMA7DCNT
0x36 DMA2OR 0x76 DMA7OR
0x37 DMA2A 0x77 DMA7A
0x38 I2C1RX 0x78 NVM
0x39 I2C1TX 0x79 CLC8
0x3A I2C1 0x7A CRC (Cyclic Redundancy Check)
0x3B I2C1E 0x7B TMR6
0x3C 0x7C DMA8SCNT
0x3D CLC3 0x7D DMA8DCNT
0x3E PWM3RINT 0x7E DMA8OR
0x3F PWM3GINT 0x7F DMA8A
0x80 - 0x8F

The natural order priority scheme goes from high-to-low with increasing vector numbers, with 0 being the highest priority and decreasing from there.

For example, when two concurrently occurring interrupt sources that are both designated high priority, using the IPRx register will be resolved using the natural order priority (i.e., the interrupt with a lower corresponding vector number will preempt the interrupt with the higher vector number).

The ability for the user to assign every interrupt source to high- or low-priority levels means that the user program can give an interrupt with a low natural priority, a higher overall priority level.