SPRUI30H November 2015 – May 2024 DRA745 , DRA746 , DRA750 , DRA756
Each entry of the interrupt service table (IST) contains a byte address that points to the beginning of the interrupt service routine for that interrupt. When the ARP32 CPU accepts an interrupt, the contents of the associated IST entry is read (IST[n]), converted to the corresponding halfword address, and then loaded into the PC creating an effective branch.
The starting address of the IST is always the address 00h in the instruction memory; the IST can not be relocated. The addresses (byte address) of each entry is shown in Table 8-345.
IST entries are byte address(s) of the interrupt handler (interrupt service routine) functions. Since 4 bytes are allocated for each IST entry, the interrupt handlers are placed anywhere in the 32-bit program memory space and the ARP32 CPU directly branches to that address. This reduces interrupt latency significantly since an instruction need not be fetched/decoded/executed from an IST location, nor an intermediate routine/call/branch needs to be processed for a branch to relatively large distance.
In fact, the IST is an “array of pointers (each entry 32 bits) to interrupt handler functions in C/C++” placed at the instruction memory address 0, which is remapped to a physical address by using the memory management unit (MMU0) that services program cache requests.
Byte Address | IST Entry |
---|---|
00h | Reset |
04h | NMI |
08h | SWI |
0Ch | UNDEF |
10h | INT4 |
14h | INT5 |
18h | INT6 |
1Ch | INT7 |
20h | INT8 |
24h | INT9 |
28h | INT10 |
2Ch | INT11 |
30h | INT12 |
34h | INT13 |
38h | INT14 |
3Ch | INT15 |