1 ;/*************************************************************************//**
\r
2 ; * @file: startup_efm32.s
\r
3 ; * @purpose: CMSIS Cortex-M3 Core Device Startup File
\r
4 ; * for the Energy Micro 'EFM32G' Device Series
\r
6 ; * @date: 10. September 2009
\r
7 ; *----------------------------------------------------------------------------
\r
9 ; * Copyright (C) 2009 ARM Limited. All rights reserved.
\r
11 ; * ARM Limited (ARM) is supplying this software for use with Cortex-Mx
\r
12 ; * processor based microcontrollers. This file can be freely distributed
\r
13 ; * within development tools that are supporting such ARM based processors.
\r
15 ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
\r
16 ; * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
\r
17 ; * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
\r
18 ; * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
\r
19 ; * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
\r
21 ; ******************************************************************************/
\r
25 ; The modules in this file are included in the libraries, and may be replaced
\r
26 ; by any user-defined modules that define the PUBLIC symbol _program_start or
\r
27 ; a user defined start symbol.
\r
28 ; To override the cstartup defined in the library, simply add your modified
\r
29 ; version to the workbench project.
\r
31 ; The vector table is normally located at address 0.
\r
32 ; When debugging in RAM, it can be located in RAM, aligned to at least 2^6.
\r
33 ; The name "__vector_table" has special meaning for C-SPY:
\r
34 ; it is where the SP start value is found, and the NVIC vector
\r
35 ; table register (VTOR) is initialized to this address if != 0.
\r
41 ;; Forward declaration of sections.
\r
42 SECTION CSTACK:DATA:NOROOT(3)
\r
44 SECTION .intvec:CODE:NOROOT(2)
\r
46 EXTERN __iar_program_start
\r
48 PUBLIC __vector_table
\r
49 PUBLIC __vector_table_0x1c
\r
51 PUBLIC __Vectors_End
\r
52 PUBLIC __Vectors_Size
\r
61 DCD HardFault_Handler
\r
62 DCD MemManage_Handler
\r
63 DCD BusFault_Handler
\r
64 DCD UsageFault_Handler
\r
71 DCD DebugMon_Handler
\r
73 DCD xPortPendSVHandler
\r
74 DCD xPortSysTickHandler
\r
76 ; External Interrupts
\r
77 DCD DMA_IRQHandler ; 0: DMA Interrupt
\r
78 DCD GPIO_EVEN_IRQHandler ; 1: GPIO_EVEN Interrupt
\r
79 DCD TIMER0_IRQHandler ; 2: TIMER0 Interrupt
\r
80 DCD USART0_RX_IRQHandler ; 3: USART0_RX Interrupt
\r
81 DCD USART0_TX_IRQHandler ; 4: USART0_TX Interrupt
\r
82 DCD ACMP0_IRQHandler ; 5: ACMP0 Interrupt
\r
83 DCD ADC0_IRQHandler ; 6: ADC0 Interrupt
\r
84 DCD DAC0_IRQHandler ; 7: DAC0 Interrupt
\r
85 DCD I2C0_IRQHandler ; 8: I2C0 Interrupt
\r
86 DCD GPIO_ODD_IRQHandler ; 9: GPIO_ODD Interrupt
\r
87 DCD TIMER1_IRQHandler ; 10: TIMER1 Interrupt
\r
88 DCD TIMER2_IRQHandler ; 11: TIMER2 Interrupt
\r
89 DCD USART1_RX_IRQHandler ; 12: USART1_RX Interrupt
\r
90 DCD USART1_TX_IRQHandler ; 13: USART1_TX Interrupt
\r
91 DCD USART2_RX_IRQHandler ; 14: USART2_RX Interrupt
\r
92 DCD USART2_TX_IRQHandler ; 15: USART2_TX Interrupt
\r
93 DCD UART0_RX_IRQHandler ; 16: UART0_RX Interrupt
\r
94 DCD UART0_TX_IRQHandler ; 17: UART0_TX Interrupt
\r
95 DCD LEUART0_IRQHandler ; 18: LEUART0 Interrupt
\r
96 DCD LEUART1_IRQHandler ; 19: LEUART1 Interrupt
\r
97 DCD LETIMER0_IRQHandler ; 20: LETIMER0 Interrupt
\r
98 DCD PCNT0_IRQHandler ; 21: PCNT0 Interrupt
\r
99 DCD PCNT1_IRQHandler ; 22: PCNT1 Interrupt
\r
100 DCD PCNT2_IRQHandler ; 23: PCNT2 Interrupt
\r
101 DCD SYSTICCK_IRQHandler;DCD RTC_IRQHandler ; 24: RTC Interrupt
\r
102 DCD CMU_IRQHandler ; 25: CMU Interrupt
\r
103 DCD VCMP_IRQHandler ; 26: VCMP Interrupt
\r
104 DCD LCD_IRQHandler ; 27: LCD Interrupt
\r
105 DCD MSC_IRQHandler ; 28: MSC Interrupt
\r
106 DCD AES_IRQHandler ; 29: AES Interrupt
\r
109 __Vectors EQU __vector_table
\r
110 __Vectors_Size EQU __Vectors_End - __Vectors
\r
113 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
\r
115 ;; Default interrupt handlers.
\r
119 PUBWEAK Reset_Handler
\r
120 SECTION .text:CODE:REORDER(2)
\r
122 LDR R0, =SystemInit
\r
124 LDR R0, =__iar_program_start
\r
127 PUBWEAK NMI_Handler
\r
128 SECTION .text:CODE:REORDER(1)
\r
132 PUBWEAK HardFault_Handler
\r
133 SECTION .text:CODE:REORDER(1)
\r
135 B HardFault_Handler
\r
137 PUBWEAK MemManage_Handler
\r
138 SECTION .text:CODE:REORDER(1)
\r
140 B MemManage_Handler
\r
142 PUBWEAK BusFault_Handler
\r
143 SECTION .text:CODE:REORDER(1)
\r
147 PUBWEAK UsageFault_Handler
\r
148 SECTION .text:CODE:REORDER(1)
\r
150 B UsageFault_Handler
\r
152 PUBWEAK vPortSVCHandler
\r
153 SECTION .text:CODE:REORDER(1)
\r
157 PUBWEAK DebugMon_Handler
\r
158 SECTION .text:CODE:REORDER(1)
\r
162 PUBWEAK xPortPendSVHandler
\r
163 SECTION .text:CODE:REORDER(1)
\r
165 B xPortPendSVHandler
\r
167 PUBWEAK SYSTICCK_IRQHandler
\r
168 SECTION .text:CODE:REORDER(1)
\r
169 SYSTICCK_IRQHandler
\r
170 B SYSTICCK_IRQHandler
\r
171 ; EFM32G specific interrupt handlers
\r
173 PUBWEAK DMA_IRQHandler
\r
174 SECTION .text:CODE:REORDER(1)
\r
178 PUBWEAK GPIO_EVEN_IRQHandler
\r
179 SECTION .text:CODE:REORDER(1)
\r
180 GPIO_EVEN_IRQHandler
\r
181 B GPIO_EVEN_IRQHandler
\r
183 PUBWEAK TIMER0_IRQHandler
\r
184 SECTION .text:CODE:REORDER(1)
\r
186 B TIMER0_IRQHandler
\r
188 PUBWEAK USART0_RX_IRQHandler
\r
189 SECTION .text:CODE:REORDER(1)
\r
190 USART0_RX_IRQHandler
\r
191 B USART0_RX_IRQHandler
\r
193 PUBWEAK USART0_TX_IRQHandler
\r
194 SECTION .text:CODE:REORDER(1)
\r
195 USART0_TX_IRQHandler
\r
196 B USART0_TX_IRQHandler
\r
198 PUBWEAK ACMP0_IRQHandler
\r
199 SECTION .text:CODE:REORDER(1)
\r
203 PUBWEAK ADC0_IRQHandler
\r
204 SECTION .text:CODE:REORDER(1)
\r
208 PUBWEAK DAC0_IRQHandler
\r
209 SECTION .text:CODE:REORDER(1)
\r
213 PUBWEAK I2C0_IRQHandler
\r
214 SECTION .text:CODE:REORDER(1)
\r
218 PUBWEAK GPIO_ODD_IRQHandler
\r
219 SECTION .text:CODE:REORDER(1)
\r
220 GPIO_ODD_IRQHandler
\r
221 B GPIO_ODD_IRQHandler
\r
223 PUBWEAK TIMER1_IRQHandler
\r
224 SECTION .text:CODE:REORDER(1)
\r
226 B TIMER1_IRQHandler
\r
228 PUBWEAK TIMER2_IRQHandler
\r
229 SECTION .text:CODE:REORDER(1)
\r
231 B TIMER2_IRQHandler
\r
233 PUBWEAK USART1_RX_IRQHandler
\r
234 SECTION .text:CODE:REORDER(1)
\r
235 USART1_RX_IRQHandler
\r
236 B USART1_RX_IRQHandler
\r
238 PUBWEAK USART1_TX_IRQHandler
\r
239 SECTION .text:CODE:REORDER(1)
\r
240 USART1_TX_IRQHandler
\r
241 B USART1_TX_IRQHandler
\r
243 PUBWEAK USART2_RX_IRQHandler
\r
244 SECTION .text:CODE:REORDER(1)
\r
245 USART2_RX_IRQHandler
\r
246 B USART2_RX_IRQHandler
\r
248 PUBWEAK USART2_TX_IRQHandler
\r
249 SECTION .text:CODE:REORDER(1)
\r
250 USART2_TX_IRQHandler
\r
251 B USART2_TX_IRQHandler
\r
253 PUBWEAK UART0_RX_IRQHandler
\r
254 SECTION .text:CODE:REORDER(1)
\r
255 UART0_RX_IRQHandler
\r
256 B UART0_RX_IRQHandler
\r
258 PUBWEAK UART0_TX_IRQHandler
\r
259 SECTION .text:CODE:REORDER(1)
\r
260 UART0_TX_IRQHandler
\r
261 B UART0_TX_IRQHandler
\r
263 PUBWEAK LEUART0_IRQHandler
\r
264 SECTION .text:CODE:REORDER(1)
\r
266 B LEUART0_IRQHandler
\r
268 PUBWEAK LEUART1_IRQHandler
\r
269 SECTION .text:CODE:REORDER(1)
\r
271 B LEUART1_IRQHandler
\r
273 PUBWEAK LETIMER0_IRQHandler
\r
274 SECTION .text:CODE:REORDER(1)
\r
275 LETIMER0_IRQHandler
\r
276 B LETIMER0_IRQHandler
\r
278 PUBWEAK PCNT0_IRQHandler
\r
279 SECTION .text:CODE:REORDER(1)
\r
283 PUBWEAK PCNT1_IRQHandler
\r
284 SECTION .text:CODE:REORDER(1)
\r
288 PUBWEAK PCNT2_IRQHandler
\r
289 SECTION .text:CODE:REORDER(1)
\r
293 PUBWEAK xPortSysTickHandler
\r
294 SECTION .text:CODE:REORDER(1)
\r
295 xPortSysTickHandler
\r
296 B xPortSysTickHandler
\r
298 PUBWEAK CMU_IRQHandler
\r
299 SECTION .text:CODE:REORDER(1)
\r
303 PUBWEAK VCMP_IRQHandler
\r
304 SECTION .text:CODE:REORDER(1)
\r
308 PUBWEAK LCD_IRQHandler
\r
309 SECTION .text:CODE:REORDER(1)
\r
313 PUBWEAK MSC_IRQHandler
\r
314 SECTION .text:CODE:REORDER(1)
\r
318 PUBWEAK AES_IRQHandler
\r
319 SECTION .text:CODE:REORDER(1)
\r