SPRUIY2 November 2024 F29H850TU , F29H859TU-Q1
The RTINT (real time interrupt) is the third-highest priority interrupt line, and receives signals driven by an interrupt expansion and aggregation unit (the PIPE module for most C29x CPU systems).
RTINT sources are able to be masked, but the actual RTINT line connected to the CPU can never be blocked/disabled by user code. There is no global enable/disable bit for the RTINT line in the CPU. Because of this, any interrupts that are received on the RTINT line are directly passed to the CPU for prioritization. Priority is then decided among any interrupts on the NMI or INT lines. The RTINT signal line can only be stopped from nesting within INTs by using the ATOMIC instruction within the INT ISR, and only for a finite number of instruction packets. However, interrupts ISRs can be prioritized/blocked before the interrupts reach the RTINT line using the external PIPE module.
The PIPE module provides external interrupt aggregation and arbitration for the RTINT and INT lines. This allows for many signals to be categorized as "real-time interrupts" ("RTINT") or "low-priority interrupts" ("INT"), and then prioritized before passing to the CPUs RTINT or INT interrupt line.
The PIPE effectively multiplexes the single RTINT CPU interrupt line to be able to receive from multiple incoming RTINT interrupts in the appropriate order.
The module allows for enabling and disabling of RTINT signals before the signals reach the RTINT line of the CPU. The module also allows nesting capability amongst other interrupts categorized as RTINT. See the F29H85x and F29P58x Real-Time Microcontrollers Technical Reference Manual for details on the PIPE module features.
This interrupt line uses the protected Real Time Interrupt Stack for context save and restore. This SSU-protected (Safety and Security Unit) stack has protection features to prevent stack overflow during nesting, when nesting is requested by the PIPE module. The WARNRTISP and MAXRTISP CPU registers serve this purpose in the C29x CPU system.
This protection limits nesting of RTINT up to the number of levels supported by the RTINT Stack minus one level (which is always reserved for NMI interrupt).
For security, the SSU protection of the RTINT Stack are designed so that the contents of the stack are not visible. Registers are also zeroed to prevent visibility into what was happening before the interrupt was serviced.
See Section 2.4 for details on stack overflow protection using the WARNRTISP and MAXRTISP registers.
NMI and RTINT interrupts can potentially have the respective interrupt service routines residing in a different LINK/STACK. Therefore NMI and RTINT interrupt service routines (ISRs) require that the first instruction packet of every vector address contain the (ISR1.PROT || ISR2.PROT) instructions. The CPU pipeline control hardware checks for these required instructions and generates a FAULT, if these instructions are not the first instruction packet of the ISR. These required instructions are inserted automatically by the compiler, but must be configured to do so for the appropriate vectors within a separate security settings file. See Section 3.6 for more details.
ISR1.PROT also initializes the stack pointer (A15) to the appropriate STACK by performing the following operation: A15 = SECSPn (where n is the current STACK indicated by ISTS.CURRSP).
For more details on the security implications of the LINK/STACK/ZONE and memory space for CPU interrupts, see Section 3.6.