qipp
2025-11-07 1db34b4e65f72d8ae8b1f0efbc7a4395f9bbcae8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*
** ADSP-1802 app_IVT.s generated on Aug 05, 2024 at 15:33:23
*/
/*
** Copyright (C) 2000-2024 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 <sys/anomaly_macros_rtl.h> // defines silicon anomaly macros
#include <interrupt.h>              // defines interrupt support
#include <platform_include.h>       // defines MMR macros
#include <adi_osal.h>               // OSAL support
#include <sys/fatal_error_code.h>   // defines fatal error support
 
/* INT_IRQ macro - used for the default interrupt vector instructions sequence
**                 of interrupts where the status stack (STS) is pushed
**                 automatically by the hardware. STS is automatically pushed
**                 for IRQ, Timer and VIRPTL interrupts.
*/
#define INT_IRQ(irp)                       \
    .RETAIN_NAME ___int_irq_##irp;         \
    .EXTERN __dispatcher_##irp;            \
    ___int_irq_##irp:                      \
    JUMP __dispatcher_##irp (DB);          \
       ASTAT = ADI_CID_##irp;              \
       NOP;                                \
    NOP;                                   \
    .___int_irq_##irp##.end:
 
/* INT macro     - used for the default interrupt vector instructions sequence
**                 of interrupts where the status stack (STS) is not pushed
**                 automatically by the hardware. STS is automatically pushed
**                 for IRQ, Timer and VIRPTL interrupts.
*/
#define INT(irp)                           \
    .RETAIN_NAME ___int_##irp;             \
    .EXTERN __dispatcher_##irp;            \
    ___int_##irp:                          \
    JUMP __dispatcher_##irp (DB);          \
       PUSH STS;                           \
       ASTAT = ADI_CID_##irp;              \
    NOP;                                   \
    .___int_##irp##.end:
 
/* 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-214xx Interrupt vector code
*/
.SECTION/CODE/NW/DOUBLEANY iv_code;
 
___interrupt_table:
 
.RETAIN_NAME ___int_EMUI;            // 0x00 - Emulator Interrupt
___int_EMUI:
      NOP;
      NOP;
      NOP;
      NOP;
.___int_EMU.end:
 
INT_JUMP(RSTI,start)                 // 0x04 - Reset Interrupt
INT(IICDI)                           // 0x08 - Illegal Input Condition Detected
INT(SOVFI)                           // 0x0c - Stack Overflow/Full Interrupt
INT_IRQ(TMZHI)                       // 0x10 - Timer Expired High Priority
INT(SPERRI)                          // 0x14 - SPORT Error Interrupt
INT(BKPI)                            // 0x18 - Hardware Breakpoint Interrupt
RESERVED_INTERRUPT                   // 0x1c
INT_IRQ(IRQ2I)                       // 0x20 - IRQ2I_ is asserted
INT_IRQ(IRQ1I)                       // 0x24 - IRQ1I_ is asserted
INT_IRQ(IRQ0I)                       // 0x28 - IRQ0I_ is asserted
INT(P0I)                             // 0x2c - Programmable Interrupt 0
INT(P1I)                             // 0x30 - Programmable Interrupt 1
INT(P2I)                             // 0x34 - Programmable Interrupt 2
INT(P3I)                             // 0x38 - Programmable Interrupt 3
INT(P4I)                             // 0x3c - Programmable Interrupt 4
INT(P5I)                             // 0x40 - Programmable Interrupt 5
INT(P6I)                             // 0x44 - Programmable Interrupt 6
INT(P7I)                             // 0x48 - Programmable Interrupt 7
INT(P8I)                             // 0x4c - Programmable Interrupt 8
INT(P9I)                             // 0x50 - Programmable Interrupt 9
INT(P10I)                            // 0x54 - Programmable Interrupt 10
INT(P11I)                            // 0x58 - Programmable Interrupt 11
INT(P12I)                            // 0x5c - Programmable Interrupt 12
INT(P13I)                            // 0x60 - Programmable Interrupt 13
INT(P14I)                            // 0x64 - Programmable Interrupt 14
INT(P15I)                            // 0x68 - Programmable Interrupt 15
INT(P16I)                            // 0x6c - Programmable Interrupt 16
INT(P17I)                            // 0x70 - Programmable Interrupt 17
INT(P18I)                            // 0x74 - Programmable Interrupt 18
INT(CB7I)                            // 0x78 - Circular Buffer 7 Overflow
INT(CB15I)                           // 0x7c - Circular Buffer 15 Overflow
INT_IRQ(TMZLI)                       // 0x80 - Timer=0(Low Priority Option)
INT(FIXI)                            // 0x84 - Fixed-point Overflow
INT(FLTOI)                           // 0x88 - Floating-point Overflow
INT(FLTUI)                           // 0x8c - Floating-point Underflow
INT(FLTII)                           // 0x90 - Floating-point invalid
INT(EMULI)                           // 0x94 - Emulator Low Priority Interrupt
INT(SFT0I)                           // 0x98 - User Software Interrupt 0
INT(SFT1I)                           // 0x9c - User Software Interrupt 1
INT(SFT2I)                           // 0xa0 - User Software Interrupt 2
INT(SFT3I)                           // 0xa4 - User Software Interrupt 3
.___interrupt_table.end:             // 0xa8