1 /*
2 * This file is part of the MicroPython project, http://micropython.org/
3 *
4 * The MIT License (MIT)
5 *
6 * Copyright (c) 2018 Glenn Ruben Bakke
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a copy
9 * of this software and associated documentation files (the "Software"), to deal
10 * in the Software without restriction, including without limitation the rights
11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 * copies of the Software, and to permit persons to whom the Software is
13 * furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be included in
16 * all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 * THE SOFTWARE.
25 */
26
27 #include <stdint.h>
28
29 extern uint32_t _estack;
30 extern uint32_t _sidata;
31 extern uint32_t _sdata;
32 extern uint32_t _edata;
33 extern uint32_t _sbss;
34 extern uint32_t _ebss;
35
36 typedef void (*func)(void);
37
38 extern void _start(void) __attribute__((noreturn));
39 extern void SystemInit(void);
40
Default_Handler(void)41 void Default_Handler(void) { while (1); }
42
Reserved_Handler1(void)43 void Reserved_Handler1(void) { while (1); }
Reserved_Handler2(void)44 void Reserved_Handler2(void) { while (1); }
Reserved_Handler3(void)45 void Reserved_Handler3(void) { while (1); }
Reserved_Handler4(void)46 void Reserved_Handler4(void) { while (1); }
Reserved_Handler5(void)47 void Reserved_Handler5(void) { while (1); }
Reserved_Handler6(void)48 void Reserved_Handler6(void) { while (1); }
Reserved_Handler7(void)49 void Reserved_Handler7(void) { while (1); }
Reserved_Handler8(void)50 void Reserved_Handler8(void) { while (1); }
Reserved_Handler9(void)51 void Reserved_Handler9(void) { while (1); }
Reserved_Handler10(void)52 void Reserved_Handler10(void) { while (1); }
Reserved_Handler11(void)53 void Reserved_Handler11(void) { while (1); }
Reserved_Handler12(void)54 void Reserved_Handler12(void) { while (1); }
Reserved_Handler13(void)55 void Reserved_Handler13(void) { while (1); }
Reserved_Handler14(void)56 void Reserved_Handler14(void) { while (1); }
Reserved_Handler15(void)57 void Reserved_Handler15(void) { while (1); }
Reserved_Handler16(void)58 void Reserved_Handler16(void) { while (1); }
Reserved_Handler17(void)59 void Reserved_Handler17(void) { while (1); }
Reserved_Handler18(void)60 void Reserved_Handler18(void) { while (1); }
Reserved_Handler19(void)61 void Reserved_Handler19(void) { while (1); }
Reserved_Handler20(void)62 void Reserved_Handler20(void) { while (1); }
Reserved_Handler21(void)63 void Reserved_Handler21(void) { while (1); }
Reserved_Handler22(void)64 void Reserved_Handler22(void) { while (1); }
Reserved_Handler23(void)65 void Reserved_Handler23(void) { while (1); }
Reserved_Handler24(void)66 void Reserved_Handler24(void) { while (1); }
Reserved_Handler25(void)67 void Reserved_Handler25(void) { while (1); }
Reserved_Handler26(void)68 void Reserved_Handler26(void) { while (1); }
Reserved_Handler27(void)69 void Reserved_Handler27(void) { while (1); }
Reserved_Handler28(void)70 void Reserved_Handler28(void) { while (1); }
Reserved_Handler29(void)71 void Reserved_Handler29(void) { while (1); }
Reserved_Handler30(void)72 void Reserved_Handler30(void) { while (1); }
Reserved_Handler31(void)73 void Reserved_Handler31(void) { while (1); }
Reserved_Handler32(void)74 void Reserved_Handler32(void) { while (1); }
Reserved_Handler33(void)75 void Reserved_Handler33(void) { while (1); }
Reserved_Handler34(void)76 void Reserved_Handler34(void) { while (1); }
Reserved_Handler35(void)77 void Reserved_Handler35(void) { while (1); }
Reserved_Handler36(void)78 void Reserved_Handler36(void) { while (1); }
Reserved_Handler37(void)79 void Reserved_Handler37(void) { while (1); }
Reserved_Handler38(void)80 void Reserved_Handler38(void) { while (1); }
81
Default_NMI_Handler(void)82 void Default_NMI_Handler (void) { while (1); }
Default_HardFault_Handler(void)83 void Default_HardFault_Handler (void) { while (1); }
Default_MemoryManagement_Handler(void)84 void Default_MemoryManagement_Handler (void) { while (1); }
Default_BusFault_Handler(void)85 void Default_BusFault_Handler (void) { while (1); }
Default_UsageFault_Handler(void)86 void Default_UsageFault_Handler (void) { while (1); }
Default_SecureFault_Handler(void)87 void Default_SecureFault_Handler (void) { while (1); }
Default_SVC_Handler(void)88 void Default_SVC_Handler (void) { while (1); }
Default_DebugMon_Handler(void)89 void Default_DebugMon_Handler (void) { while (1); }
Default_PendSV_Handler(void)90 void Default_PendSV_Handler (void) { while (1); }
Default_SysTick_Handler(void)91 void Default_SysTick_Handler (void) { while (1); }
92
Default_SPU_IRQHandler(void)93 void Default_SPU_IRQHandler (void) { while (1); }
Default_CLOCK_POWER_IRQHandler(void)94 void Default_CLOCK_POWER_IRQHandler (void) { while (1); }
Default_UARTE0_SPIM0_SPIS0_TWIM0_TWIS0_IRQHandler(void)95 void Default_UARTE0_SPIM0_SPIS0_TWIM0_TWIS0_IRQHandler (void) { while (1); }
Default_UARTE1_SPIM1_SPIS1_TWIM1_TWIS1_IRQHandler(void)96 void Default_UARTE1_SPIM1_SPIS1_TWIM1_TWIS1_IRQHandler (void) { while (1); }
Default_UARTE2_SPIM2_SPIS2_TWIM2_TWIS2_IRQHandler(void)97 void Default_UARTE2_SPIM2_SPIS2_TWIM2_TWIS2_IRQHandler (void) { while (1); }
Default_UARTE3_SPIM3_SPIS3_TWIM3_TWIS3_IRQHandler(void)98 void Default_UARTE3_SPIM3_SPIS3_TWIM3_TWIS3_IRQHandler (void) { while (1); }
Default_GPIOTE0_IRQHandler(void)99 void Default_GPIOTE0_IRQHandler (void) { while (1); }
Default_SAADC_IRQHandler(void)100 void Default_SAADC_IRQHandler (void) { while (1); }
Default_TIMER0_IRQHandler(void)101 void Default_TIMER0_IRQHandler (void) { while (1); }
Default_TIMER1_IRQHandler(void)102 void Default_TIMER1_IRQHandler (void) { while (1); }
Default_TIMER2_IRQHandler(void)103 void Default_TIMER2_IRQHandler (void) { while (1); }
Default_RTC0_IRQHandler(void)104 void Default_RTC0_IRQHandler (void) { while (1); }
Default_RTC1_IRQHandler(void)105 void Default_RTC1_IRQHandler (void) { while (1); }
Default_WDT_IRQHandler(void)106 void Default_WDT_IRQHandler (void) { while (1); }
Default_EGU0_IRQHandler(void)107 void Default_EGU0_IRQHandler (void) { while (1); }
Default_EGU1_IRQHandler(void)108 void Default_EGU1_IRQHandler (void) { while (1); }
Default_EGU2_IRQHandler(void)109 void Default_EGU2_IRQHandler (void) { while (1); }
Default_EGU3_IRQHandler(void)110 void Default_EGU3_IRQHandler (void) { while (1); }
Default_EGU4_IRQHandler(void)111 void Default_EGU4_IRQHandler (void) { while (1); }
Default_EGU5_IRQHandler(void)112 void Default_EGU5_IRQHandler (void) { while (1); }
Default_PWM0_IRQHandler(void)113 void Default_PWM0_IRQHandler (void) { while (1); }
Default_PWM1_IRQHandler(void)114 void Default_PWM1_IRQHandler (void) { while (1); }
Default_PWM2_IRQHandler(void)115 void Default_PWM2_IRQHandler (void) { while (1); }
Default_PWM3_IRQHandler(void)116 void Default_PWM3_IRQHandler (void) { while (1); }
Default_PDM_IRQHandler(void)117 void Default_PDM_IRQHandler (void) { while (1); }
Default_I2S_IRQHandler(void)118 void Default_I2S_IRQHandler (void) { while (1); }
Default_IPC_IRQHandler(void)119 void Default_IPC_IRQHandler (void) { while (1); }
Default_FPU_IRQHandler(void)120 void Default_FPU_IRQHandler (void) { while (1); }
Default_GPIOTE1_IRQHandler(void)121 void Default_GPIOTE1_IRQHandler (void) { while (1); }
Default_KMU_IRQHandler(void)122 void Default_KMU_IRQHandler (void) { while (1); }
Default_CRYPTOCELL_IRQHandler(void)123 void Default_CRYPTOCELL_IRQHandler (void) { while (1); }
124
Reset_Handler(void)125 void Reset_Handler(void) {
126 uint32_t * p_src = &_sidata;
127 uint32_t * p_dest = &_sdata;
128
129 while (p_dest < &_edata) {
130 *p_dest++ = *p_src++;
131 }
132
133 uint32_t * p_bss = &_sbss;
134 uint32_t * p_bss_end = &_ebss;
135 while (p_bss < p_bss_end) {
136 *p_bss++ = 0ul;
137 }
138
139 SystemInit();
140 _start();
141 }
142
143 void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
144 void HardFault_Handler (void) __attribute__ ((weak, alias("Default_HardFault_Handler")));
145 void MemoryManagement_Handler (void) __attribute__ ((weak, alias("Default_MemoryManagement_Handler")));
146 void BusFault_Handler (void) __attribute__ ((weak, alias("Default_BusFault_Handler")));
147 void UsageFault_Handler (void) __attribute__ ((weak, alias("Default_UsageFault_Handler")));
148 void SecureFault_Handler (void) __attribute__ ((weak, alias("Default_SecureFault_Handler")));
149 void SVC_Handler (void) __attribute__ ((weak, alias("Default_SVC_Handler")));
150 void DebugMon_Handler (void) __attribute__ ((weak, alias("Default_DebugMon_Handler")));
151 void PendSV_Handler (void) __attribute__ ((weak, alias("Default_PendSV_Handler")));
152 void SysTick_Handler (void) __attribute__ ((weak, alias("Default_SysTick_Handler")));
153
154 void SPU_IRQHandler (void) __attribute__ ((weak, alias("Default_SPU_IRQHandler")));
155 void CLOCK_POWER_IRQHandler (void) __attribute__ ((weak, alias("Default_CLOCK_POWER_IRQHandler")));
156 void UARTE0_SPIM0_SPIS0_TWIM0_TWIS0_IRQHandler (void) __attribute__ ((weak, alias("Default_UARTE0_SPIM0_SPIS0_TWIM0_TWIS0_IRQHandler")));
157 void UARTE1_SPIM1_SPIS1_TWIM1_TWIS1_IRQHandler (void) __attribute__ ((weak, alias("Default_UARTE1_SPIM1_SPIS1_TWIM1_TWIS1_IRQHandler")));
158 void UARTE2_SPIM2_SPIS2_TWIM2_TWIS2_IRQHandler (void) __attribute__ ((weak, alias("Default_UARTE2_SPIM2_SPIS2_TWIM2_TWIS2_IRQHandler")));
159 void UARTE3_SPIM3_SPIS3_TWIM3_TWIS3_IRQHandler (void) __attribute__ ((weak, alias("Default_UARTE3_SPIM3_SPIS3_TWIM3_TWIS3_IRQHandler")));
160 void GPIOTE0_IRQHandler (void) __attribute__ ((weak, alias("Default_GPIOTE0_IRQHandler")));
161 void SAADC_IRQHandler (void) __attribute__ ((weak, alias("Default_SAADC_IRQHandler")));
162 void TIMER0_IRQHandler (void) __attribute__ ((weak, alias("Default_TIMER0_IRQHandler")));
163 void TIMER1_IRQHandler (void) __attribute__ ((weak, alias("Default_TIMER1_IRQHandler")));
164 void TIMER2_IRQHandler (void) __attribute__ ((weak, alias("Default_TIMER2_IRQHandler")));
165 void RTC0_IRQHandler (void) __attribute__ ((weak, alias("Default_RTC0_IRQHandler")));
166 void RTC1_IRQHandler (void) __attribute__ ((weak, alias("Default_RTC1_IRQHandler")));
167 void WDT_IRQHandler (void) __attribute__ ((weak, alias("Default_WDT_IRQHandler")));
168 void EGU0_IRQHandler (void) __attribute__ ((weak, alias("Default_EGU0_IRQHandler")));
169 void EGU1_IRQHandler (void) __attribute__ ((weak, alias("Default_EGU1_IRQHandler")));
170 void EGU2_IRQHandler (void) __attribute__ ((weak, alias("Default_EGU2_IRQHandler")));
171 void EGU3_IRQHandler (void) __attribute__ ((weak, alias("Default_EGU3_IRQHandler")));
172 void EGU4_IRQHandler (void) __attribute__ ((weak, alias("Default_EGU4_IRQHandler")));
173 void EGU5_IRQHandler (void) __attribute__ ((weak, alias("Default_EGU5_IRQHandler")));
174 void PWM0_IRQHandler (void) __attribute__ ((weak, alias("Default_PWM0_IRQHandler")));
175 void PWM1_IRQHandler (void) __attribute__ ((weak, alias("Default_PWM1_IRQHandler")));
176 void PWM2_IRQHandler (void) __attribute__ ((weak, alias("Default_PWM2_IRQHandler")));
177 void PWM3_IRQHandler (void) __attribute__ ((weak, alias("Default_PWM3_IRQHandler")));
178 void PDM_IRQHandler (void) __attribute__ ((weak, alias("Default_PDM_IRQHandler")));
179 void I2S_IRQHandler (void) __attribute__ ((weak, alias("Default_I2S_IRQHandler")));
180 void IPC_IRQHandler (void) __attribute__ ((weak, alias("Default_IPC_IRQHandler")));
181 void FPU_IRQHandler (void) __attribute__ ((weak, alias("Default_FPU_IRQHandler")));
182 void GPIOTE1_IRQHandler (void) __attribute__ ((weak, alias("Default_GPIOTE1_IRQHandler")));
183 void KMU_IRQHandler (void) __attribute__ ((weak, alias("Default_KMU_IRQHandler")));
184 void CRYPTOCELL_IRQHandler (void) __attribute__ ((weak, alias("Default_CRYPTOCELL_IRQHandler")));
185
186 const func __Vectors[] __attribute__ ((section(".isr_vector"),used)) = {
187 (func)&_estack,
188 Reset_Handler,
189 NMI_Handler,
190 HardFault_Handler,
191 MemoryManagement_Handler,
192 BusFault_Handler,
193 UsageFault_Handler,
194 SecureFault_Handler,
195 Reserved_Handler1,
196 Reserved_Handler2,
197 Reserved_Handler3,
198 SVC_Handler,
199 DebugMon_Handler,
200 Reserved_Handler4,
201 PendSV_Handler,
202 SysTick_Handler,
203
204 /* External Interrupts */
205 Reserved_Handler5,
206 Reserved_Handler6,
207 Reserved_Handler7,
208 SPU_IRQHandler,
209 Reserved_Handler8,
210 CLOCK_POWER_IRQHandler,
211 Reserved_Handler9,
212 Reserved_Handler10,
213 UARTE0_SPIM0_SPIS0_TWIM0_TWIS0_IRQHandler,
214 UARTE1_SPIM1_SPIS1_TWIM1_TWIS1_IRQHandler,
215 UARTE2_SPIM2_SPIS2_TWIM2_TWIS2_IRQHandler,
216 UARTE3_SPIM3_SPIS3_TWIM3_TWIS3_IRQHandler,
217 Reserved_Handler11,
218 GPIOTE0_IRQHandler,
219 SAADC_IRQHandler,
220 TIMER0_IRQHandler,
221 TIMER1_IRQHandler,
222 TIMER2_IRQHandler,
223 Reserved_Handler12,
224 Reserved_Handler13,
225 RTC0_IRQHandler,
226 RTC1_IRQHandler,
227 Reserved_Handler14,
228 Reserved_Handler15,
229 WDT_IRQHandler,
230 Reserved_Handler16,
231 Reserved_Handler17,
232 EGU0_IRQHandler,
233 EGU1_IRQHandler,
234 EGU2_IRQHandler,
235 EGU3_IRQHandler,
236 EGU4_IRQHandler,
237 EGU5_IRQHandler,
238 PWM0_IRQHandler,
239 PWM1_IRQHandler,
240 PWM2_IRQHandler,
241 PWM3_IRQHandler,
242 Reserved_Handler18,
243 PDM_IRQHandler,
244 Reserved_Handler19,
245 I2S_IRQHandler,
246 Reserved_Handler20,
247 IPC_IRQHandler,
248 Reserved_Handler21,
249 FPU_IRQHandler,
250 Reserved_Handler22,
251 Reserved_Handler23,
252 Reserved_Handler24,
253 Reserved_Handler25,
254 GPIOTE1_IRQHandler,
255 Reserved_Handler26,
256 Reserved_Handler27,
257 Reserved_Handler28,
258 Reserved_Handler29,
259 Reserved_Handler30,
260 Reserved_Handler31,
261 Reserved_Handler32,
262 KMU_IRQHandler,
263 Reserved_Handler33,
264 Reserved_Handler34,
265 Reserved_Handler35,
266 Reserved_Handler36,
267 Reserved_Handler37,
268 Reserved_Handler38,
269 CRYPTOCELL_IRQHandler,
270 };
271