1 |
581 |
jeremybenn |
/*****************************************************************************
|
2 |
|
|
* Copyright (c) 2006 Rowley Associates Limited. *
|
3 |
|
|
* *
|
4 |
|
|
* This file may be distributed under the terms of the License Agreement *
|
5 |
|
|
* provided with this software. *
|
6 |
|
|
* *
|
7 |
|
|
* THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING THE *
|
8 |
|
|
* WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. *
|
9 |
|
|
*****************************************************************************/
|
10 |
|
|
|
11 |
|
|
/*****************************************************************************
|
12 |
|
|
* Preprocessor Definitions
|
13 |
|
|
* ------------------------
|
14 |
|
|
*
|
15 |
|
|
* STARTUP_FROM_RESET
|
16 |
|
|
*
|
17 |
|
|
* If defined, the program will startup from power-on/reset. If not defined
|
18 |
|
|
* the program will just loop endlessly from power-on/reset.
|
19 |
|
|
*
|
20 |
|
|
* This definition is not defined by default on this target because the
|
21 |
|
|
* debugger is unable to reset this target and maintain control of it over the
|
22 |
|
|
* JTAG interface. The advantage of doing this is that it allows the debugger
|
23 |
|
|
* to reset the CPU and run programs from a known reset CPU state on each run.
|
24 |
|
|
* It also acts as a safety net if you accidently download a program in FLASH
|
25 |
|
|
* that crashes and prevents the debugger from taking control over JTAG
|
26 |
|
|
* rendering the target unusable over JTAG. The obvious disadvantage of doing
|
27 |
|
|
* this is that your application will not startup without the debugger.
|
28 |
|
|
*
|
29 |
|
|
* We advise that on this target you keep STARTUP_FROM_RESET undefined whilst
|
30 |
|
|
* you are developing and only define STARTUP_FROM_RESET when development is
|
31 |
|
|
* complete.
|
32 |
|
|
*
|
33 |
|
|
*****************************************************************************/
|
34 |
|
|
|
35 |
|
|
.extern xPortPendSVHandler
|
36 |
|
|
.extern xPortSysTickHandler
|
37 |
|
|
.extern vPortSVCHandler
|
38 |
|
|
.extern Timer0IntHandler
|
39 |
|
|
.extern vT2InterruptHandler
|
40 |
|
|
.extern vT3InterruptHandler
|
41 |
|
|
.extern vEMAC_ISR
|
42 |
|
|
|
43 |
|
|
|
44 |
|
|
.global reset_handler
|
45 |
|
|
|
46 |
|
|
.macro DEFAULT_ISR_HANDLER name=
|
47 |
|
|
.thumb_func
|
48 |
|
|
.weak \name
|
49 |
|
|
\name:
|
50 |
|
|
1: b 1b /* endless loop */
|
51 |
|
|
.endm
|
52 |
|
|
|
53 |
|
|
.section .vectors, "ax"
|
54 |
|
|
.code 16
|
55 |
|
|
.align 0
|
56 |
|
|
.global _vectors
|
57 |
|
|
|
58 |
|
|
_vectors:
|
59 |
|
|
.word __stack_end__
|
60 |
|
|
#ifdef STARTUP_FROM_RESET
|
61 |
|
|
.word reset_handler
|
62 |
|
|
#else
|
63 |
|
|
.word reset_wait
|
64 |
|
|
#endif /* STARTUP_FROM_RESET */
|
65 |
|
|
.word Nmi_ISR
|
66 |
|
|
.word Fault_ISR
|
67 |
|
|
.word MPU_Fault_ISR
|
68 |
|
|
.word 0 /* Populate if using Bus fault */
|
69 |
|
|
.word 0 /* Populate if using Usage fault */
|
70 |
|
|
.word 0 /* Reserved */
|
71 |
|
|
.word 0 /* Reserved */
|
72 |
|
|
.word 0 /* Reserved */
|
73 |
|
|
.word 0 /* Reserved */
|
74 |
|
|
.word vPortSVCHandler
|
75 |
|
|
.word 0 /* Populate if using a debug monitor */
|
76 |
|
|
.word 0 /* Reserved */
|
77 |
|
|
.word xPortPendSVHandler
|
78 |
|
|
.word xPortSysTickHandler
|
79 |
|
|
.word GPIO_Port_A_ISR
|
80 |
|
|
.word GPIO_Port_B_ISR
|
81 |
|
|
.word GPIO_Port_C_ISR
|
82 |
|
|
.word GPIO_Port_D_ISR
|
83 |
|
|
.word GPIO_Port_E_ISR
|
84 |
|
|
.word UART0_ISR
|
85 |
|
|
.word UART1_ISR
|
86 |
|
|
.word SSI_ISR
|
87 |
|
|
.word I2C_ISR
|
88 |
|
|
.word PWM_Fault_ISR
|
89 |
|
|
.word PWM_Generator_0_ISR
|
90 |
|
|
.word PWM_Generator_1_ISR
|
91 |
|
|
.word PWM_Generator_2_ISR
|
92 |
|
|
.word QEI_ISR
|
93 |
|
|
.word ADC_Sequence_0_ISR
|
94 |
|
|
.word ADC_Sequence_1_ISR
|
95 |
|
|
.word ADC_Sequence_2_ISR
|
96 |
|
|
.word ADC_Sequence_3_ISR
|
97 |
|
|
.word Watchdog_Timer_ISR
|
98 |
|
|
.word Timer0IntHandler
|
99 |
|
|
.word Timer0B_ISR
|
100 |
|
|
.word Timer1A_ISR
|
101 |
|
|
.word Timer1B_ISR
|
102 |
|
|
.word vT2InterruptHandler
|
103 |
|
|
.word Timer2B_ISR
|
104 |
|
|
.word Analog_Comparator_0_ISR
|
105 |
|
|
.word Analog_Comparator_1_ISR
|
106 |
|
|
.word Analog_Comparator_2_ISR
|
107 |
|
|
.word System_Control_ISR
|
108 |
|
|
.word FLASH_Control_ISR
|
109 |
|
|
.word GPIO_Port_F_ISR
|
110 |
|
|
.word GPIO_Port_G_ISR
|
111 |
|
|
.word GPIO_Port_H_ISR
|
112 |
|
|
.word UART2_ISR
|
113 |
|
|
.word SSI1_ISR
|
114 |
|
|
.word vT3InterruptHandler
|
115 |
|
|
.word Timer3B_ISR
|
116 |
|
|
.word I2C1_ISR
|
117 |
|
|
.word QEI1_ISR
|
118 |
|
|
.word CAN0_ISR
|
119 |
|
|
.word CAN1_ISR
|
120 |
|
|
.word CAN2_ISR
|
121 |
|
|
.word vEMAC_ISR
|
122 |
|
|
.word HIBERNATE_ISR
|
123 |
|
|
.word USB0_ISR
|
124 |
|
|
.word PWM_Generator_3_ISR
|
125 |
|
|
.word uDMA_Software_Transfer_ISR
|
126 |
|
|
.word uDMA_Error_ISR
|
127 |
|
|
_vectors_end:
|
128 |
|
|
|
129 |
|
|
.section .init, "ax"
|
130 |
|
|
.thumb_func
|
131 |
|
|
|
132 |
|
|
reset_handler:
|
133 |
|
|
#ifdef __RAM_BUILD
|
134 |
|
|
/* If this is a RAM build, configure vector table offset register to point
|
135 |
|
|
to the RAM vector table. */
|
136 |
|
|
ldr r0, =0xE000ED08
|
137 |
|
|
ldr r1, =_vectors
|
138 |
|
|
str r1, [r0]
|
139 |
|
|
#endif
|
140 |
|
|
b _start
|
141 |
|
|
|
142 |
|
|
DEFAULT_ISR_HANDLER Nmi_ISR
|
143 |
|
|
DEFAULT_ISR_HANDLER Fault_ISR
|
144 |
|
|
DEFAULT_ISR_HANDLER MPU_Fault_ISR
|
145 |
|
|
DEFAULT_ISR_HANDLER SVCall_ISR
|
146 |
|
|
DEFAULT_ISR_HANDLER SysTick_ISR
|
147 |
|
|
DEFAULT_ISR_HANDLER PendSV_ISR
|
148 |
|
|
DEFAULT_ISR_HANDLER GPIO_Port_A_ISR
|
149 |
|
|
DEFAULT_ISR_HANDLER GPIO_Port_B_ISR
|
150 |
|
|
DEFAULT_ISR_HANDLER GPIO_Port_C_ISR
|
151 |
|
|
DEFAULT_ISR_HANDLER GPIO_Port_D_ISR
|
152 |
|
|
DEFAULT_ISR_HANDLER GPIO_Port_E_ISR
|
153 |
|
|
DEFAULT_ISR_HANDLER UART0_ISR
|
154 |
|
|
DEFAULT_ISR_HANDLER UART1_ISR
|
155 |
|
|
DEFAULT_ISR_HANDLER SSI_ISR
|
156 |
|
|
DEFAULT_ISR_HANDLER I2C_ISR
|
157 |
|
|
DEFAULT_ISR_HANDLER PWM_Fault_ISR
|
158 |
|
|
DEFAULT_ISR_HANDLER PWM_Generator_0_ISR
|
159 |
|
|
DEFAULT_ISR_HANDLER PWM_Generator_1_ISR
|
160 |
|
|
DEFAULT_ISR_HANDLER PWM_Generator_2_ISR
|
161 |
|
|
DEFAULT_ISR_HANDLER QEI_ISR
|
162 |
|
|
DEFAULT_ISR_HANDLER ADC_Sequence_0_ISR
|
163 |
|
|
DEFAULT_ISR_HANDLER ADC_Sequence_1_ISR
|
164 |
|
|
DEFAULT_ISR_HANDLER ADC_Sequence_2_ISR
|
165 |
|
|
DEFAULT_ISR_HANDLER ADC_Sequence_3_ISR
|
166 |
|
|
DEFAULT_ISR_HANDLER Watchdog_Timer_ISR
|
167 |
|
|
DEFAULT_ISR_HANDLER Timer0A_ISR
|
168 |
|
|
DEFAULT_ISR_HANDLER Timer0B_ISR
|
169 |
|
|
DEFAULT_ISR_HANDLER Timer1A_ISR
|
170 |
|
|
DEFAULT_ISR_HANDLER Timer1B_ISR
|
171 |
|
|
DEFAULT_ISR_HANDLER Timer2A_ISR
|
172 |
|
|
DEFAULT_ISR_HANDLER Timer2B_ISR
|
173 |
|
|
DEFAULT_ISR_HANDLER Analog_Comparator_0_ISR
|
174 |
|
|
DEFAULT_ISR_HANDLER Analog_Comparator_1_ISR
|
175 |
|
|
DEFAULT_ISR_HANDLER Analog_Comparator_2_ISR
|
176 |
|
|
DEFAULT_ISR_HANDLER System_Control_ISR
|
177 |
|
|
DEFAULT_ISR_HANDLER FLASH_Control_ISR
|
178 |
|
|
DEFAULT_ISR_HANDLER GPIO_Port_F_ISR
|
179 |
|
|
DEFAULT_ISR_HANDLER GPIO_Port_G_ISR
|
180 |
|
|
DEFAULT_ISR_HANDLER GPIO_Port_H_ISR
|
181 |
|
|
DEFAULT_ISR_HANDLER UART2_ISR
|
182 |
|
|
DEFAULT_ISR_HANDLER SSI1_ISR
|
183 |
|
|
DEFAULT_ISR_HANDLER Timer3A_ISR
|
184 |
|
|
DEFAULT_ISR_HANDLER Timer3B_ISR
|
185 |
|
|
DEFAULT_ISR_HANDLER I2C1_ISR
|
186 |
|
|
DEFAULT_ISR_HANDLER QEI1_ISR
|
187 |
|
|
DEFAULT_ISR_HANDLER CAN0_ISR
|
188 |
|
|
DEFAULT_ISR_HANDLER CAN1_ISR
|
189 |
|
|
DEFAULT_ISR_HANDLER CAN2_ISR
|
190 |
|
|
DEFAULT_ISR_HANDLER ETHERNET_ISR
|
191 |
|
|
DEFAULT_ISR_HANDLER HIBERNATE_ISR
|
192 |
|
|
DEFAULT_ISR_HANDLER USB0_ISR
|
193 |
|
|
DEFAULT_ISR_HANDLER PWM_Generator_3_ISR
|
194 |
|
|
DEFAULT_ISR_HANDLER uDMA_Software_Transfer_ISR
|
195 |
|
|
DEFAULT_ISR_HANDLER uDMA_Error_ISR
|
196 |
|
|
|
197 |
|
|
#ifndef STARTUP_FROM_RESET
|
198 |
|
|
DEFAULT_ISR_HANDLER reset_wait
|
199 |
|
|
#endif /* STARTUP_FROM_RESET */
|