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