Interrupts and DMA Triggers

The I3C Target module has five top level system interrupts in the PIRx register as shown in Table 1. Refer to the “VIC – Vectored Interrupt Controller” chapter for more information on how to activate and use these interrupts.

When enabled, each of these system level interrupts can wake up the device if the Interrupt condition happens when the device is in Sleep mode. Refer to the “Wake-up From Sleep” section in the “VIC – Vectored Interrupt Controller” chapter for more information. This is important for the I3CxRIF Reset Interrupt since the I3C protocol recommends the device to wake up when it receives a Target Reset Pattern in Sleep mode. Refer to Target Reset Pattern Received While in Sleep section for more information. The I3CxRIF Reset Interrupt can also be used to perform a Reset of the I3C Target module or the entire device as outlined in Target Reset.

Each of these system level interrupts also act as DMA triggers. The interrupts do not need to be enabled with their associated enable bits to be used as triggers for DMA transfers.

Refer to section “Types of Hardware Triggers” in “DMA – Direct Memory Access” chapter for more information on how to use these DMA triggers.

Important: While the top system level I3C General and Error Interrupts (I3CxIF and I3CxEIF) do not need to be enabled to be used as DMA triggers, the specific module level General and Error Interrupts still need to be enabled to activate the top system level interrupt flag and subsequently the DMA trigger. Refer to Figure 1 for more information.
Table 1. I3C® System Level Interrupts in PIRx Registers and DMA Triggers
I3C® System Level Interrupts and DMA Triggers Description Section Reference
General Interrupt (I3CxIF) An OR of all General Interrupts in the I3C module. This is a read-only interrupt flag. The interrupt is cleared when each of the enabled interrupt flags in the I3CxPIRx registers are cleared. Table 2
Error Interrupt (I3CxEIF) An OR of all Error Interrupts in the I3C module. This is a read-only interrupt flag. The interrupt is cleared when each of the enabled interrupt flags in the I3CxERRIRx registers are cleared. Table 3
Transmit Interrupt (I3CxTXIF) I3CxTXB Transmit Buffer is empty and ready be written. This is a read-only interrupt flag representing the status of the TXBE bit. The interrupt flag is cleared when I3CxTXB Transmit Buffer becomes full. Transmit and Receive Buffers
Receive Interrupt (I3CxRXIF) I3CxRXB Receive Buffer is full and is ready to be read from. This is a read-only interrupt flag representing the status of the RXBF bit. The interrupt flag is cleared when I3CxRXB Receive Buffer becomes empty. Transmit and Receive Buffers
Reset Interrupt (I3CxRIF) Target Reset Pattern is detected on the bus. The user must read the I3CxRSTACT Defining Byte Register and proceed accordingly. Target Reset

The system level General I3C Interrupt (I3CxIF) is a logical OR of various general interrupts at the I3C module level available through the I3CxPIR0 and I3CxPIR1 registers and are listed in Table 2. Each of these interrupts can be individually enabled through the I3CxPIE0 and I3CxPIE1 registers.

The system level Error I3C Interrupt (I3CxEIF) is a logical OR of various error interrupts at the I3C module level available through the I3CxERRIR0 and I3CxERRIR1 registers and are listed in Table 3. Each of these interrupts can be individually enabled through the I3CxERRIE0 and I3CxERRIE1 registers.

Figure 1 shows how the module level and system level I3C interrupts are activated and how they interact with each other.

Remember: Remember to enable the system-level interrupt controller to generate the enabled interrupts. Refer to the “Interrupt Setup Procedure” section in the “VIC - Vectored Interrupt Controller Module” chapter for more information.
Important:
  1. 1.The interrupt flag in the I3CxPIRx or I3CxERRIRx registers will set when the condition generating the interrupt becomes true regardless of whether that interrupt is enabled in the I3CxPIEx or I3CxERRIEx register or not.
  2. 2.The interrupt flags in I3CxPIRx and I3CxERRIRx once set by the hardware do not self-clear. They must be cleared by the user to re-arm the interrupt.
  3. 3.To trigger a DMA, the appropriate general or error interrupt must be enabled in the I3CxPIEx or I3CxERRIEx register. This is because only the top system level General and Error Interrupts (I3CxIF and I3CxEIF) can act as DMA triggers. Unless the interrupt is enabled at the module level, the system level flag does not get activated. Refer to Figure 1 for more information.
Figure 1. Interrupts and DMA Triggers
Table 2. I3C® Module Level General Interrupts in I3CxPIRx Registers
I3C® Module Level General Interrupts I3CxPIRx Description Section Reference
Start Condition (SCIF) Start condition detected on the bus Start, Stop and Restart Conditions
Stop Condition (PCIF) Stop condition detected on the bus Start, Stop and Restart Conditions
Restart Condition (RSCIF) Restart condition detected on the bus Start, Stop and Restart Conditions
I2C ACK Received (I2CACKIF) Controller responded with an ACK during an I2C Read Transaction Legacy I2C Transaction on I3C Bus
Static Address Match (SADRIF) Controller transmitted Target’s Static Address on the bus during a Legacy I2C Transaction. This bit is set only when the Target has not been assigned a Dynamic Address yet and is operating in I2C mode (OPMD = 0b00). Legacy I2C Transaction on I3C Bus
Dynamic Address Match (DADRIF) Controller transmitted Target’s Dynamic Address on the bus during a Private or Direct CCC Transaction. This bit is set only when the Target has been assigned a Dynamic Address and is operating in I3C SDR mode (OPMD = 0b01).

Private Transaction

Broadcast vs Direct CCC

Byte Transfer Finished (BTFIF) Target has completed sending or receiving an address or data byte during a Private I3C/I2C Transaction

Private Transaction

Legacy I2C Transaction on I3C Bus

Transmission Complete (TCOMPIF) Target has detected a Stop condition after a Private I3C/I2C or an IBI Transaction

IBI Payload and Mandatory Data Byte

Private Transaction

Legacy I2C Transaction on I3C Bus

Hot-Join Done (HJDONEIF) Hot-Join process has successfully completed. The Target now has a Dynamic Address assigned in I3CxDADR register and is operating in I3C SDR mode (OPMD = 0b01). Hot-Join Mechanism
In-Band Interrupt Done (IBIDONEIF) In-Band Interrupt request has been successfully processed by the Controller. The Target was able to send the entire Mandatory Data Byte (I3CxIBIMB) and Payload to the Controller. In-Band Interrupt (IBI)
Table 3. I3C® Module Level Error Interrupts in I3CxERRIRx Registers
I3C® Module Level Error Interrupts I3CxERRIRx Description Section Reference
I2C NACK Received (I2CNACKIF) Controller responded with a NACK during an I2C Read Transaction Legacy I2C Transaction on I3C Bus
Transmit Underrun (TXUIF) Controller attempted to read from an empty Transmit FIFO during Target Transmit mode Transmit and Receive Buffers
Receive Overrun (RXOIF) Controller attempted to write to a full Receive FIFO during Target Receive mode Transmit and Receive Buffers
Hot-Join Error (HJEIF) Hot-Join request exceeded the arbitration retry limit set in I3CxRETRY register Hot-Join Mechanism
In-Band Interrupt Error (IBIEIF) In-Band Interrupt request exceeded the arbitration retry limit set in I3CxRETRY register In-Band Interrupt (IBI)
Bus Error (BUSEIF) Target detected an S0-S6 type error on the bus Error Detection and Recovery in SDR Mode
Bus Time-out (BTOIF) Bus Time-out detected on the bus. If BTOEN is enabled in I3CxCON register, this will perform a Bus Time-out Reset of the Target module. Bus Time-out Reset
Unknown CCC Received (UNKNCCCIF) Target received a CCC from the Controller that is not supported in Table 1 Unknown CCCs
In-Band Interrupt Abort (IBIAEIF) Controller aborted transmission of IBI Payload by asserting End-of-Data T-bit (Restart condition) or by sending a Stop condition In-Band Interrupt (IBI)
Maximum Write Length Over Size (MWLOEIF) Controller attempted to write one more byte than the Maximum Write Length size in I3CxMWL register during Private Write transaction Private Transaction
Transmit Buffer Write Error (TXWEIF) User attempted to write to I3CxTXB Transmit Buffer when not empty (TXBE = 0). Transmit and Receive Buffers
Receive Buffer Read Error (RXREIF) User attempted to read from I3CxRXB Receive Buffer when not full (RXBF = 0) Transmit and Receive Buffers