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
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
25 SECTION .intvec:CODE(2)
\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
34 ;*******************************************************************************
\r
35 ; Import the __iar_program_start address from 71x_init.s
\r
36 ;*******************************************************************************
\r
38 IMPORT __iar_program_start
\r
40 ;*******************************************************************************
\r
41 ; Import exception handlers
\r
42 ;*******************************************************************************
\r
44 IMPORT Undefined_Handler
\r
45 IMPORT Prefetch_Handler
\r
46 IMPORT Abort_Handler
\r
49 ;*******************************************************************************
\r
50 ; Import IRQ handlers from 71x_it.c
\r
51 ;*******************************************************************************
\r
53 IMPORT Default_Handler
\r
54 IMPORT vPortYieldProcessor
\r
55 IMPORT vSerialISREntry
\r
56 IMPORT vPortPreemptiveTickISR
\r
57 IMPORT vPortNonPreemptiveTick
\r
59 ;*******************************************************************************
\r
60 ; Export Peripherals IRQ handlers table address
\r
61 ;*******************************************************************************
\r
65 ;*******************************************************************************
\r
67 ;*******************************************************************************
\r
68 IVR_ADDR DEFINE 0xFFFFF818
\r
71 LDR PC, Undefined_Addr
\r
73 LDR PC, Prefetch_Addr
\r
75 NOP ; Reserved vector
\r
79 ;*******************************************************************************
\r
80 ; Exception handlers address table
\r
81 ;*******************************************************************************
\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
92 ;*******************************************************************************
\r
93 ; Peripherals IRQ handlers address table
\r
94 ;*******************************************************************************
\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
103 WDG_Addr DCD vPortPreemptiveTickISR ; Tick ISR if the preemptive scheduler is used.
\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
125 HDLC_Addr DCD Default_Handler
\r
126 USBLP_Addr DCD Default_Handler
\r
129 T0TOI_Addr DCD Default_Handler
\r
130 T0OC1_Addr DCD Default_Handler
\r
131 T0OC2_Addr DCD Default_Handler
\r
134 ;*******************************************************************************
\r
135 ; Exception Handlers
\r
136 ;*******************************************************************************
\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
144 ;*******************************************************************************
\r
146 SaveContext MACRO reg1,reg2
\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
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
160 ;*******************************************************************************
\r
162 RestoreContext MACRO reg1,reg2
\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
170 ;*******************************************************************************
\r
171 ;* Function Name : UndefinedHandler
\r
172 ;* Description : This function called when undefined instruction
\r
173 ; exception is entered.
\r
176 ;*******************************************************************************
\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
188 ;*******************************************************************************
\r
189 ;* Function Name : PrefetchAbortHandler
\r
190 ;* Description : This function called when Prefetch Abort
\r
191 ; exception is entered.
\r
194 ;*******************************************************************************
\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
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
208 ;*******************************************************************************
\r
209 ;* Function Name : DataAbortHandler
\r
210 ;* Description : This function is called when Data Abort
\r
211 ; exception is entered.
\r
214 ;*******************************************************************************
\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
223 bx r0 ; Branch to Abort_Handler.
\r
225 RestoreContext r0,r12 ; Return to the instruction following that...
\r
226 ; ...has generated the data abort exception.
\r
228 ;*******************************************************************************
\r
229 ;* Function Name : FIQHandler
\r
230 ;* Description : This function is called when FIQ
\r
231 ; exception is entered.
\r
234 ;*******************************************************************************
\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
243 bx r0 ; Branch to FIQ_Handler.
\r
245 RestoreContext r0,r7 ; Restore the context and return to the...
\r
246 ; ...program execution.
\r
253 ;******************* (C) COPYRIGHT 2003 STMicroelectronics *****END OF FILE****