/* ** ADSP-21569 app_IVT.s generated on Aug 02, 2023 at 21:46:12 */ /* ** Copyright (C) 2000-2022 Analog Devices Inc., All Rights Reserved. ** ** This file is generated automatically based upon the options selected ** in the System Configuration utility. Changes to the Startup Code configuration ** should be made by modifying the appropriate options rather than editing ** this file. To access the System Configuration utility, double-click the ** system.svc file from a navigation view. ** ** If you need to modify this file, select "Permit alteration of Interrupt ** Table Vector" from "Startup Code/LDF: Advanced Options" in the System ** Configuration utility. This encloses the whole file within a user ** modifiable section and any modification made will be preserved. */ .FILE_ATTR libGroup="startup"; .FILE_ATTR libName="libc"; #include // defines silicon anomaly macros #include // defines interrupt support #include // defines MMR macros #include // OSAL support #include // defines fatal error support /* INT macro - suitable to be used for the default interrupt vector ** instructions sequence of interrupts other than SECI. */ #define INT(irp) \ .RETAIN_NAME ___int_##irp; \ .EXTERN __dispatcher; \ ___int_##irp: \ JUMP __dispatcher (DB); \ ASTAT = ADI_CID_##irp; \ NOP; \ NOP; /* INT_SEC macro - default SECI interrupt support instructions sequence. */ #define INT_SEC(irp) \ .RETAIN_NAME ___int_SEC; \ .EXTERN __dispatcher_SEC; \ ___int_SEC: \ JUMP __dispatcher_SEC (DB); \ ASTAT = ADI_CID_SECI; \ NOP; \ NOP; /* INT_JUMP - instructions to jump to a target label without ** going through an interrupt dispatcher. */ #define INT_JUMP(irp, jump_tgt) \ .EXTERN jump_tgt; \ .RETAIN_NAME ___int_jump_##irp; \ ___int_jump_##irp: \ NOP; \ JUMP jump_tgt; \ NOP; \ NOP; /* UNUSED_INTERRUPT - The instructions jump to fatal_error for the case ** where an interrupt that was not meant to be used ** gets latched. */ #define UNUSED_INTERRUPT(irp) \ .EXTERN _adi_fatal_error; \ .RETAIN_NAME ___int_unused_##irp; \ ___int_unused_##irp: \ R12 = ADI_CID_##irp; \ JUMP (PC, _adi_fatal_error) (DB); \ R4 = _AFE_G_RunTimeError; \ R8 = _AFE_S_UnusedInterruptRaised; /* RESERVED_INTERRUPT - 4 RTI instructions for reserved interrupts. */ #define RESERVED_INTERRUPT RTI;RTI;RTI;RTI; /* ** ADSP-2156x Interrupt vector code */ .SECTION/CODE/NW/DOUBLEANY iv_code; ___interrupt_table: .RETAIN_NAME ___int_EMUI; // 0x00 Emulator Interrupt ___int_EMUI: NOP; NOP; NOP; // These slots are not used for anything by the emulator. So we // don't expect to run through here. // However we can do, if an error causes us to jump to address 0x0. // Instead of falling through to the reset vector, detect this error // and try to give some diagnostics about how it happened. .EXTERN _adi_bad_reset_detected; JUMP _adi_bad_reset_detected; INT_JUMP(RSTI,start) // 0x04 Reset Interrupt RESERVED_INTERRUPT // 0x08 reserved INT_JUMP(PARI,_adi_parity_error_detected) // 0x0c L1 parity error // 0x10 Illegal opcode detected INT_JUMP(ILOPI,_adi_ilop_detected) INT(CB7I) // 0x14 Circular Buffer 7 Overflow INT(IICDI) // 0x18 Unaligned long word access detected INT(SOVFI) // 0x1c Status, loop, or mode stack overflow, or PC stack full INT(ILADI) // 0x20 Illegal address space detected RESERVED_INTERRUPT // 0x24 reserved RESERVED_INTERRUPT // 0x28 reserved INT(TMZHI) // 0x2c Timer=0 (high priority option) INT(BKPI) // 0x30 Hardware Breakpoint Interrupt INT(FIRI) // 0x34 FIR Channel Completion Interrupt INT(IIRI) // 0x38 IIR Channel Completion Interrupt INT_SEC(SECI) // 0x3c System event controller interrupt RESERVED_INTERRUPT // 0x40 reserved RESERVED_INTERRUPT // 0x44 reserved RESERVED_INTERRUPT // 0x48 reserved RESERVED_INTERRUPT // 0x4c reserved INT(RINSEQI) // 0x50 Restricted instruction sequence INT(CB15I) // 0x54 Circular Buffer 15 overflow INT(TMZLI) // 0x58 Timer = 0 (low priority option) INT(FIXI) // 0x5c Fixed-point overflow INT(FLTOI) // 0x60 Floating-point overflow exception INT(FLTUI) // 0x64 Floating-point underflow exception INT(FLTII) // 0x68 Floating-point invalid exception INT(EMULI) // 0x6c Emulator Low Priority Interrupt INT(SFT0I) // 0x70 User software interrupt 0 INT(SFT1I) // 0x74 User software interrupt 1 INT(SFT2I) // 0x78 User software interrupt 2 INT(SFT3I) // 0x7c User software interrupt 3 .___interrupt_table.end: // 0x80