]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/ARM7_STR71x_IAR/71x_vect.s
Add FreeRTOS-Plus directory.
[freertos] / FreeRTOS / Demo / ARM7_STR71x_IAR / 71x_vect.s
1 #include "FreeRTOSConfig.h"\r
2 ;******************** (C) COPYRIGHT 2003 STMicroelectronics ********************\r
3 ;* File Name          : 71x_vect.s\r
4 ;* Author             : MCD Application Team\r
5 ;* Date First Issued  : 16/05/2003\r
6 ;* Description        : This file used to initialize the exception and IRQ\r
7 ;*                      vectors, and to enter/return to/from exceptions handlers.\r
8 ;*******************************************************************************\r
9 ;* History:\r
10 ;*  13/01/2006 : V3.1\r
11 ;*  24/05/2005 : V3.0\r
12 ;*  30/11/2004 : V2.0\r
13 ;*  14/07/2004 : V1.3\r
14 ;*  01/01/2004 : V1.2\r
15 ;*******************************************************************************\r
16 ; THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH\r
17 ; CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.\r
18 ; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT\r
19 ; OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT\r
20 ; OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION\r
21 ; CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
22 ;*******************************************************************************/\r
23 \r
24                 MODULE  ?RESET\r
25                 SECTION .intvec:CODE(2)                         \r
26                 CODE32  \r
27 \r
28 EIC_base_addr        EQU    0xFFFFF800; EIC base address.\r
29 CICR_off_addr        EQU    0x04      ; Current Interrupt Channel Register.\r
30 IVR_off_addr         EQU    0x18      ; Interrupt Vector Register.\r
31 IPR_off_addr         EQU    0x40      ; Interrupt Pending Register.\r
32 \r
33 \r
34 ;*******************************************************************************\r
35 ;              Import  the __iar_program_start address from 71x_init.s\r
36 ;*******************************************************************************\r
37 \r
38         IMPORT  __iar_program_start\r
39 \r
40 ;*******************************************************************************\r
41 ;                      Import exception handlers\r
42 ;*******************************************************************************\r
43 \r
44         IMPORT  Undefined_Handler\r
45         IMPORT  Prefetch_Handler\r
46         IMPORT  Abort_Handler\r
47         IMPORT  FIQ_Handler\r
48 \r
49 ;*******************************************************************************\r
50 ;                   Import IRQ handlers from 71x_it.c\r
51 ;*******************************************************************************\r
52 \r
53         IMPORT  Default_Handler\r
54                 IMPORT  vPortYieldProcessor\r
55                 IMPORT  vSerialISREntry\r
56                 IMPORT  vPortPreemptiveTickISR\r
57                 IMPORT  vPortNonPreemptiveTick\r
58 \r
59 ;*******************************************************************************\r
60 ;            Export Peripherals IRQ handlers table address\r
61 ;*******************************************************************************\r
62 \r
63         EXPORT  T0TIMI_Addr\r
64 \r
65 ;*******************************************************************************\r
66 ;                        Exception vectors\r
67 ;*******************************************************************************\r
68 IVR_ADDR                 DEFINE    0xFFFFF818\r
69 \r
70                 LDR     PC, Reset_Addr\r
71         LDR     PC, Undefined_Addr\r
72         LDR     PC, SWI_Addr\r
73         LDR     PC, Prefetch_Addr\r
74         LDR     PC, Abort_Addr\r
75         NOP                             ; Reserved vector\r
76         LDR     PC, =IVR_ADDR\r
77         LDR     PC, FIQ_Addr\r
78 \r
79 ;*******************************************************************************\r
80 ;               Exception handlers address table\r
81 ;*******************************************************************************\r
82 \r
83 Reset_Addr      DCD     __iar_program_start\r
84 Undefined_Addr  DCD     UndefinedHandler\r
85 SWI_Addr        DCD     vPortYieldProcessor\r
86 Prefetch_Addr   DCD     PrefetchAbortHandler\r
87 Abort_Addr      DCD     DataAbortHandler\r
88                 DCD     0               ; Reserved vector\r
89 IRQ_Addr        DCD     0                           ; Direct vectors are used.  See the STR75x demo for an alternative implementation\r
90 FIQ_Addr        DCD     FIQHandler\r
91 \r
92 ;*******************************************************************************\r
93 ;              Peripherals IRQ handlers address table\r
94 ;*******************************************************************************\r
95 \r
96 T0TIMI_Addr     DCD  Default_Handler\r
97 FLASH_Addr      DCD  Default_Handler\r
98 RCCU_Addr       DCD  Default_Handler\r
99 RTC_Addr        DCD  Default_Handler\r
100 #if configUSE_PREEMPTION == 0\r
101 WDG_Addr        DCD  vPortNonPreemptiveTick     ; Tick ISR if the cooperative scheduler is used.\r
102 #else\r
103 WDG_Addr                DCD  vPortPreemptiveTickISR     ; Tick ISR if the preemptive scheduler is used.\r
104 #endif\r
105 XTI_Addr        DCD  Default_Handler\r
106 USBHP_Addr      DCD  Default_Handler\r
107 I2C0ITERR_Addr  DCD  Default_Handler\r
108 I2C1ITERR_ADDR  DCD  Default_Handler\r
109 UART0_Addr      DCD  vSerialISREntry\r
110 UART1_Addr      DCD  Default_Handler\r
111 UART2_ADDR      DCD  Default_Handler\r
112 UART3_ADDR      DCD  Default_Handler\r
113 BSPI0_ADDR      DCD  Default_Handler\r
114 BSPI1_Addr      DCD  Default_Handler\r
115 I2C0_Addr       DCD  Default_Handler\r
116 I2C1_Addr       DCD  Default_Handler\r
117 CAN_Addr        DCD  Default_Handler\r
118 ADC12_Addr      DCD  Default_Handler\r
119 T1TIMI_Addr     DCD  Default_Handler\r
120 T2TIMI_Addr     DCD  Default_Handler\r
121 T3TIMI_Addr     DCD  Default_Handler\r
122                 DCD  0                  ; reserved\r
123                 DCD  0                  ; reserved\r
124                 DCD  0                  ; reserved\r
125 HDLC_Addr       DCD  Default_Handler\r
126 USBLP_Addr      DCD  Default_Handler\r
127                 DCD  0                  ; reserved\r
128                 DCD  0                  ; reserved\r
129 T0TOI_Addr      DCD  Default_Handler\r
130 T0OC1_Addr      DCD  Default_Handler\r
131 T0OC2_Addr      DCD  Default_Handler\r
132 \r
133 \r
134 ;*******************************************************************************\r
135 ;                         Exception Handlers\r
136 ;*******************************************************************************\r
137 \r
138 ;*******************************************************************************\r
139 ;* Macro Name     : SaveContext\r
140 ;* Description    : This macro used to save the context before entering\r
141 ;                   an exception handler.\r
142 ;* Input          : The range of registers to store.\r
143 ;* Output         : none\r
144 ;*******************************************************************************\r
145 \r
146 SaveContext MACRO reg1,reg2\r
147 \r
148         STMFD  sp!,{reg1-reg2,lr} ; Save The workspace plus the current return\r
149                               ; address lr_ mode into the stack.\r
150         MRS    r1,spsr        ; Save the spsr_mode into r1.\r
151         STMFD  sp!,{r1}       ; Save spsr.\r
152         ENDM\r
153 \r
154 ;*******************************************************************************\r
155 ;* Macro Name     : RestoreContext\r
156 ;* Description    : This macro used to restore the context to return from\r
157 ;                   an exception handler and continue the program execution.\r
158 ;* Input          : The range of registers to restore.\r
159 ;* Output         : none\r
160 ;*******************************************************************************\r
161 \r
162 RestoreContext MACRO reg1,reg2\r
163 \r
164         LDMFD   sp!,{r1}        ; Restore the saved spsr_mode into r1.\r
165         MSR     spsr_cxsf,r1    ; Restore spsr_mode.\r
166         LDMFD   sp!,{reg1-reg2,pc}^; Return to the instruction following...\r
167                                 ; ...the exception interrupt.\r
168         ENDM\r
169 \r
170 ;*******************************************************************************\r
171 ;* Function Name  : UndefinedHandler\r
172 ;* Description    : This function called when undefined instruction\r
173 ;                   exception is entered.\r
174 ;* Input          : none\r
175 ;* Output         : none\r
176 ;*******************************************************************************\r
177 UndefinedHandler\r
178         SaveContext r0,r12           ; Save the workspace plus the current\r
179                                      ; return address lr_ und and spsr_und.\r
180         ldr r0,=Undefined_Handler\r
181         ldr lr,=Undefined_Handler_end\r
182         bx r0                        ; Branch to Undefined_Handler\r
183 Undefined_Handler_end:\r
184         RestoreContext r0,r12        ; Return to the instruction following...\r
185                                      ; ...the undefined instruction.\r
186 \r
187 \r
188 ;*******************************************************************************\r
189 ;* Function Name  : PrefetchAbortHandler\r
190 ;* Description    : This function called when Prefetch Abort\r
191 ;                   exception is entered.\r
192 ;* Input          : none\r
193 ;* Output         : none\r
194 ;*******************************************************************************\r
195 \r
196 PrefetchAbortHandler\r
197         SUB    lr,lr,#4       ; Update the link register.\r
198         SaveContext r0,r12    ; Save the workspace plus the current\r
199                               ; return address lr_abt and spsr_abt.\r
200         ldr r0,=Prefetch_Handler\r
201         ldr lr,=Prefetch_Handler_end\r
202 \r
203         bx r0                 ; Branch to Prefetch_Handler.\r
204 Prefetch_Handler_end:\r
205         RestoreContext r0,r12 ; Return to the instruction following that...\r
206                               ; ...has generated the prefetch abort exception.\r
207 \r
208 ;*******************************************************************************\r
209 ;* Function Name  : DataAbortHandler\r
210 ;* Description    : This function is called when Data Abort\r
211 ;                   exception is entered.\r
212 ;* Input          : none\r
213 ;* Output         : none\r
214 ;*******************************************************************************\r
215 \r
216 DataAbortHandler\r
217         SUB    lr,lr,#8       ; Update the link register.\r
218         SaveContext r0,r12    ; Save the workspace plus the current\r
219                               ; return address lr_ abt and spsr_abt.\r
220         ldr r0,=Abort_Handler\r
221         ldr lr,=Abort_Handler_end\r
222 \r
223         bx r0                 ; Branch to Abort_Handler.\r
224 Abort_Handler_end:\r
225         RestoreContext r0,r12 ; Return to the instruction following that...\r
226                               ; ...has generated the data abort exception.\r
227 \r
228 ;*******************************************************************************\r
229 ;* Function Name  : FIQHandler\r
230 ;* Description    : This function is called when FIQ\r
231 ;                   exception is entered.\r
232 ;* Input          : none\r
233 ;* Output         : none\r
234 ;*******************************************************************************\r
235 \r
236 FIQHandler\r
237         SUB    lr,lr,#4       ; Update the link register.\r
238         SaveContext r0,r7     ; Save the workspace plus the current\r
239                               ; return address lr_ fiq and spsr_fiq.\r
240         ldr r0,=FIQ_Handler\r
241         ldr lr,=FIQ_Handler_end\r
242 \r
243         bx r0                 ; Branch to FIQ_Handler.\r
244 FIQ_Handler_end:\r
245         RestoreContext r0,r7  ; Restore the context and return to the...\r
246                               ; ...program execution.\r
247 \r
248 \r
249                 \r
250                 LTORG\r
251 \r
252   END\r
253 ;******************* (C) COPYRIGHT 2003 STMicroelectronics *****END OF FILE****