blob: 1f023b89956cd447affc22962aa84cb8ff69e493 [file] [log] [blame]
Christina Quastb0a05702014-11-28 10:27:32 +01001/* ----------------------------------------------------------------------------
2 * ATMEL Microcontroller Software Support
3 * ----------------------------------------------------------------------------
4 * Copyright (c) 2009, Atmel Corporation
5 *
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions are met:
10 *
11 * - Redistributions of source code must retain the above copyright notice,
12 * this list of conditions and the disclaimer below.
13 *
14 * Atmel's name may not be used to endorse or promote products derived from
15 * this software without specific prior written permission.
16 *
17 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
20 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
23 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
26 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 * ----------------------------------------------------------------------------
28 */
29
30/**
31 * \file
32 * This file contains the default exception handlers.
33 *
34 * \note
35 * The exception handler has weak aliases.
36 * As they are weak aliases, any function with the same name will override
37 * this definition.
38 */
39
40/*----------------------------------------------------------------------------
41 * Headers
42 *----------------------------------------------------------------------------*/
43
44#include "chip.h"
45
46/*----------------------------------------------------------------------------
47 * Exported functions
48 *----------------------------------------------------------------------------*/
49
50/**
51 * \brief Default interrupt handler for not used irq.
52 */
53void IrqHandlerNotUsed( void )
54{
Harald Weltee26c9432016-03-20 17:24:33 +010055 printf("NotUsed\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +010056 while ( 1 ) ;
57}
58
59/**
60 * \brief Default NMI interrupt handler.
61 */
62WEAK void NMI_Handler( void )
63{
Harald Weltee26c9432016-03-20 17:24:33 +010064 printf("NMI\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +010065 while ( 1 ) ;
66}
67
68/**
69 * \brief Default HardFault interrupt handler.
70 */
Harald Welte990f0102016-03-20 18:15:45 +010071struct hardfault_args {
72 unsigned long r0;
73 unsigned long r1;
74 unsigned long r2;
75 unsigned long r3;
76 unsigned long r12;
77 unsigned long lr;
78 unsigned long pc;
79 unsigned long psr;
80};
81
82void hard_fault_handler_c(struct hardfault_args *args)
Christina Quastb0a05702014-11-28 10:27:32 +010083{
Harald Weltee26c9432016-03-20 17:24:33 +010084 printf("HardFault\r\n");
Harald Welte990f0102016-03-20 18:15:45 +010085 printf("R0=%08x, R1=%08x, R2=%08x, R3=%08x, R12=%08x\r\n",
86 args->r0, args->r1, args->r2, args->r3, args->r12);
87 printf("LR[R14]=%08x, PC[R15]=%08x, PSR=%08x\r\n",
88 args->lr, args->pc, args->psr);
89 printf("BFAR=%08x, CFSR=%08x, HFSR=%08x\r\n",
90 SCB->BFAR, SCB->CFSR, SCB->HFSR);
91 printf("DFSR=%08x, AFSR=%08x, SHCSR=%08x\r\n",
92 SCB->DFSR, SCB->CFSR, SCB->SHCSR);
Christina Quastb0a05702014-11-28 10:27:32 +010093 while ( 1 ) ;
94}
95
Harald Welte990f0102016-03-20 18:15:45 +010096__attribute__((naked))
97WEAK void HardFault_Handler( void )
98{
99 __asm volatile(
100 ".syntax unified \n"
101 " tst lr, #4 \n"
102 " ite eq \n"
103 " mrseq r0, msp \n"
104 " mrsne r0, psp \n"
105 //" ldr r1, [r0, #24] \n"
106 " b hard_fault_handler_c\n"
107 ".syntax divided \n");
108}
109
Christina Quastb0a05702014-11-28 10:27:32 +0100110/**
111 * \brief Default MemManage interrupt handler.
112 */
113WEAK void MemManage_Handler( void )
114{
Harald Weltee26c9432016-03-20 17:24:33 +0100115 printf("MemManage\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100116 while ( 1 ) ;
117}
118
119/**
120 * \brief Default BusFault interrupt handler.
121 */
122WEAK void BusFault_Handler( void )
123{
Harald Weltee26c9432016-03-20 17:24:33 +0100124 printf("BusFault\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100125 while ( 1 ) ;
126}
127
128/**
129 * \brief Default UsageFault interrupt handler.
130 */
131WEAK void UsageFault_Handler( void )
132{
Harald Weltee26c9432016-03-20 17:24:33 +0100133 printf("UsageFault\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100134 while ( 1 ) ;
135}
136
137/**
138 * \brief Default SVC interrupt handler.
139 */
140WEAK void SVC_Handler( void )
141{
Harald Weltee26c9432016-03-20 17:24:33 +0100142 printf("SVC\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100143 while ( 1 ) ;
144}
145
146/**
147 * \brief Default DebugMon interrupt handler.
148 */
149WEAK void DebugMon_Handler( void )
150{
Harald Weltee26c9432016-03-20 17:24:33 +0100151 printf("DebugMon\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100152 while ( 1 ) ;
153}
154
155/**
156 * \brief Default PendSV interrupt handler.
157 */
158WEAK void PendSV_Handler( void )
159{
Harald Weltee26c9432016-03-20 17:24:33 +0100160 printf("PendSV\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100161 while ( 1 ) ;
162}
163
164/**
165 * \brief Default SysTick interrupt handler.
166 */
167WEAK void SysTick_Handler( void )
168{
Harald Weltee26c9432016-03-20 17:24:33 +0100169 printf("SysTick\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100170 while ( 1 ) ;
171}
172
173/**
174 * \brief Default interrupt handler for Supply Controller.
175 */
176WEAK void SUPC_IrqHandler( void )
177{
Harald Weltee26c9432016-03-20 17:24:33 +0100178 printf("SUPC\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100179 while ( 1 ) ;
180}
181
182/**
183 * \brief Default interrupt handler for Reset Controller.
184 */
185WEAK void RSTC_IrqHandler( void )
186{
Harald Weltee26c9432016-03-20 17:24:33 +0100187 printf("RSTC\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100188 while ( 1 ) ;
189}
190
191/**
192 * \brief Default interrupt handler for Real Time Clock.
193 */
194WEAK void RTC_IrqHandler( void )
195{
Harald Weltee26c9432016-03-20 17:24:33 +0100196 printf("RTC\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100197 while ( 1 ) ;
198}
199
200/**
201 * \brief Default interrupt handler for Real Time Timer.
202 */
203WEAK void RTT_IrqHandler( void )
204{
Harald Weltee26c9432016-03-20 17:24:33 +0100205 printf("RTT\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100206 while ( 1 ) ;
207}
208
209/**
210 * \brief Default interrupt handler for Watchdog Timer.
211 */
212WEAK void WDT_IrqHandler( void )
213{
Harald Weltee26c9432016-03-20 17:24:33 +0100214 printf("WDT\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100215 while ( 1 ) ;
216}
217
218/**
219 * \brief Default interrupt handler for PMC.
220 */
221WEAK void PMC_IrqHandler( void )
222{
Harald Weltee26c9432016-03-20 17:24:33 +0100223 printf("PMC\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100224 while ( 1 ) ;
225}
226
227/**
228 * \brief Default interrupt handler for EEFC.
229 */
230WEAK void EEFC_IrqHandler( void )
231{
Harald Weltee26c9432016-03-20 17:24:33 +0100232 printf("EEFC\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100233 while ( 1 ) ;
234}
235
236/**
237 * \brief Default interrupt handler for UART0.
238 */
239WEAK void UART0_IrqHandler( void )
240{
Harald Weltee26c9432016-03-20 17:24:33 +0100241 printf("UART0\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100242 while ( 1 ) ;
243}
244
245/**
246 * \brief Default interrupt handler for UART1.
247 */
248WEAK void UART1_IrqHandler( void )
249{
Harald Weltee26c9432016-03-20 17:24:33 +0100250 printf("UART1\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100251 while ( 1 ) ;
252}
253
254/**
255 * \brief Default interrupt handler for SMC.
256 */
257WEAK void SMC_IrqHandler( void )
258{
Harald Weltee26c9432016-03-20 17:24:33 +0100259 printf("SMC\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100260 while ( 1 ) ;
261}
262
263/**
264 * \brief Default interrupt handler for PIOA Controller.
265 */
266WEAK void PIOA_IrqHandler( void )
267{
Harald Weltee26c9432016-03-20 17:24:33 +0100268 printf("PIOA\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100269 while ( 1 ) ;
270}
271
272/**
273 * \brief Default interrupt handler for PIOB Controller.
274 */
275WEAK void PIOB_IrqHandler( void )
276{
Harald Weltee26c9432016-03-20 17:24:33 +0100277 printf("PIOB\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100278 while ( 1 ) ;
279}
280
281/**
282 * \brief Default interrupt handler for PIOC Controller.
283 */
284WEAK void PIOC_IrqHandler( void )
285{
Harald Weltee26c9432016-03-20 17:24:33 +0100286 printf("PIOC\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100287 while ( 1 ) ;
288}
289
290/**
291 * \brief Default interrupt handler for USART0.
292 */
293WEAK void USART0_IrqHandler( void )
294{
Harald Weltee26c9432016-03-20 17:24:33 +0100295 printf("USART0\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100296 while ( 1 ) ;
297}
298
299/**
300 * \brief Default interrupt handler for USART1.
301 */
302WEAK void USART1_IrqHandler( void )
303{
Harald Weltee26c9432016-03-20 17:24:33 +0100304 printf("USART1\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100305 while ( 1 ) ;
306}
307
308/**
309 * \brief Default interrupt handler for MCI.
310 */
311WEAK void MCI_IrqHandler( void )
312{
Harald Weltee26c9432016-03-20 17:24:33 +0100313 printf("MCI\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100314 while ( 1 ) ;
315}
316
317/**
318 * \brief Default interrupt handler for TWI0.
319 */
320WEAK void TWI0_IrqHandler( void )
321{
Harald Weltee26c9432016-03-20 17:24:33 +0100322 printf("TWI0\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100323 while ( 1 ) ;
324}
325
326/**
327 * \brief Default interrupt handler for TWI1.
328 */
329WEAK void TWI1_IrqHandler( void )
330{
Harald Weltee26c9432016-03-20 17:24:33 +0100331 printf("TWI1\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100332 while ( 1 ) ;
333}
334
335/**
336 * \brief Default interrupt handler for SPI.
337 */
338WEAK void SPI_IrqHandler( void )
339{
Harald Weltee26c9432016-03-20 17:24:33 +0100340 printf("SPI\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100341 while ( 1 ) ;
342}
343
344/**
345 * \brief Default interrupt handler for SSC.
346 */
347WEAK void SSC_IrqHandler( void )
348{
Harald Weltee26c9432016-03-20 17:24:33 +0100349 printf("SSC\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100350 while ( 1 ) ;
351}
352
353/**
354 * \brief Default interrupt handler for TC0.
355 */
356WEAK void TC0_IrqHandler( void )
357{
Harald Weltee26c9432016-03-20 17:24:33 +0100358 printf("TC0\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100359 while ( 1 ) ;
360}
361
362/**
363 * \brief Default interrupt handler for TC1.
364 */
365WEAK void TC1_IrqHandler( void )
366{
Harald Weltee26c9432016-03-20 17:24:33 +0100367 printf("TC1\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100368 while ( 1 ) ;
369}
370
371/**
372 * \brief Default interrupt handler for TC2.
373 */
374WEAK void TC2_IrqHandler( void )
375{
Harald Weltee26c9432016-03-20 17:24:33 +0100376 printf("TC2\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100377 while ( 1 ) ;
378}
379
380/**
381 * \brief Default SUPC interrupt handler for TC3.
382 */
383WEAK void TC3_IrqHandler( void )
384{
Harald Weltee26c9432016-03-20 17:24:33 +0100385 printf("TC3\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100386 while ( 1 ) ;
387}
388
389/**
390 * \brief Default SUPC interrupt handler for TC4.
391 */
392WEAK void TC4_IrqHandler( void )
393{
Harald Weltee26c9432016-03-20 17:24:33 +0100394 printf("TC4\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100395 while ( 1 ) ;
396}
397
398/**
399 * \brief Default SUPC interrupt handler for TC5.
400 */
401WEAK void TC5_IrqHandler( void )
402{
Harald Weltee26c9432016-03-20 17:24:33 +0100403 printf("TC5\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100404 while ( 1 ) ;
405}
406
407/**
408 * \brief Default SUPC interrupt handler for ADC.
409 */
410WEAK void ADC_IrqHandler( void )
411{
Harald Weltee26c9432016-03-20 17:24:33 +0100412 printf("ADC\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100413 while ( 1 ) ;
414}
415
416/**
417 * \brief Default SUPC interrupt handler for DAC.
418 */
419WEAK void DAC_IrqHandler( void )
420{
Harald Weltee26c9432016-03-20 17:24:33 +0100421 printf("DAC\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100422 while ( 1 ) ;
423}
424
425/**
426 * \brief Default SUPC interrupt handler for PWM.
427 */
428WEAK void PWM_IrqHandler( void )
429{
Harald Weltee26c9432016-03-20 17:24:33 +0100430 printf("PWM\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100431 while ( 1 ) ;
432}
433
434/**
435 * \brief Default SUPC interrupt handler for CRCCU.
436 */
437WEAK void CRCCU_IrqHandler( void )
438{
Harald Weltee26c9432016-03-20 17:24:33 +0100439 printf("CRCCU\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100440 while ( 1 ) ;
441}
442
443/**
444 * \brief Default SUPC interrupt handler for ACC.
445 */
446WEAK void ACC_IrqHandler( void )
447{
Harald Weltee26c9432016-03-20 17:24:33 +0100448 printf("ACC\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100449 while ( 1 ) ;
450}
451
452/**
453 * \brief Default SUPC interrupt handler for USBD.
454 */
455WEAK void USBD_IrqHandler( void )
456{
Harald Weltee26c9432016-03-20 17:24:33 +0100457 printf("USBD\r\n");
Christina Quastb0a05702014-11-28 10:27:32 +0100458 while ( 1 ) ;
459}