1 /* ----------------------------------------------------------------------------
\r
2 * SAM Software Package License
\r
3 * ----------------------------------------------------------------------------
\r
4 * Copyright (c) 2014, Atmel Corporation
\r
6 * All rights reserved.
\r
8 * Redistribution and use in source and binary forms, with or without
\r
9 * modification, are permitted provided that the following conditions are met:
\r
11 * - Redistributions of source code must retain the above copyright notice,
\r
12 * this list of conditions and the disclaimer below.
\r
14 * Atmel's name may not be used to endorse or promote products derived from
\r
15 * this software without specific prior written permission.
\r
17 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
\r
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
\r
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
\r
20 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
\r
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
\r
22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
\r
23 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
\r
24 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
\r
25 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
\r
26 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\r
27 * ----------------------------------------------------------------------------
\r
32 * This file contains the default exception handlers.
\r
35 * The exception handler has weak aliases.
\r
36 * As they are weak aliases, any function with the same name will override
\r
40 /*----------------------------------------------------------------------------
\r
42 *----------------------------------------------------------------------------*/
\r
46 /*----------------------------------------------------------------------------
\r
47 * Exported functions
\r
48 *----------------------------------------------------------------------------*/
\r
50 /** Flag to indicate whether the svc is done */
\r
51 volatile uint32_t dwRaisePriDone=0;
\r
54 * \brief Default NMI interrupt handler.
\r
56 void NMI_Handler( void )
\r
61 __INLINE static uint32_t StackUnwind(void)
\r
64 asm volatile (" mrs r0, msp " );
\r
65 asm volatile (" ldr %0, [r0,#28]" :"=r" (Fault_Add));
\r
69 static void HardFault_reason(void)
\r
71 uint32_t CFSRValue, BFAR;
\r
72 printf("In Hard Fault Handler\n\r");
\r
73 printf("SCB->HFSR = 0x%08x\n\r", SCB->HFSR);
\r
75 if ((SCB->HFSR & SCB_HFSR_DEBUGEVT_Msk)) {
\r
76 printf("Debug Event Hard Fault\n\r");
\r
77 printf("SCB->DFSR = 0x%08x\n", SCB->DFSR );
\r
80 if ((SCB->HFSR & SCB_HFSR_VECTTBL_Msk)) {
\r
81 printf("Fault was due to vector table read on exception processing\n\r");
\r
84 if ((SCB->HFSR & SCB_HFSR_FORCED_Msk)) {
\r
85 printf("Forced Hard Fault\n\r");
\r
86 printf("SCB->CFSR = 0x%08x\n\r", SCB->CFSR );
\r
88 if((SCB->CFSR & SCB_CFSR_USGFAULTSR_Msk))
\r
90 CFSRValue = SCB->CFSR;
\r
91 printf("Usage fault: ");
\r
92 CFSRValue >>= SCB_CFSR_USGFAULTSR_Pos;
\r
93 if((CFSRValue & (1 << 9))) {
\r
94 printf("Divide by zero\n\r");
\r
96 if((CFSRValue & (1 << 8))) {
\r
97 printf("Unaligned access error\n\r");
\r
99 if((CFSRValue & (1 << 3))) {
\r
100 printf("Coprocessor access error\n\r");
\r
102 if((CFSRValue & (1 << 2))) {
\r
103 printf("Integrity check error on EXC_RETURN\n\r");
\r
108 if((SCB->CFSR & SCB_CFSR_BUSFAULTSR_Msk))
\r
110 CFSRValue = SCB->CFSR;
\r
111 printf("Bus fault: ");
\r
112 CFSRValue >>= SCB_CFSR_BUSFAULTSR_Pos;
\r
114 if((CFSRValue & (1 << 7)) && (CFSRValue & (1 << 1))) {
\r
116 printf("Precise data access error. Bus Fault Address Register is: %x \n\r", BFAR );
\r
118 if((CFSRValue & (1 << 4))) {
\r
119 printf("Bus fault has occurred on exception entry\n\r");
\r
121 if((CFSRValue & (1 << 3))) {
\r
122 printf("bus fault has occurred on exception return\n\r");
\r
124 if((CFSRValue & (1 << 2))) {
\r
125 printf("Imprecise data access error\n\r");
\r
128 if((CFSRValue & (1 << 0))) {
\r
129 printf("This bit indicates a bus fault on an instruction prefetch. \n\r");
\r
136 if((SCB->CFSR & SCB_CFSR_MEMFAULTSR_Msk))
\r
138 CFSRValue = SCB->CFSR;
\r
139 printf("Memory fault: ");
\r
140 CFSRValue >>= SCB_CFSR_MEMFAULTSR_Pos;
\r
141 if((CFSRValue & (1 << 9)) != 0) {
\r
142 printf("Divide by zero\n\r");
\r
147 __ASM volatile("BKPT #01");
\r
150 * \brief Default HardFault interrupt handler.
\r
153 void HardFault_Handler( void )
\r
156 printf("HardFault at addr 0X%x\n\r", StackUnwind());
\r
160 HardFault_reason();
\r
165 * \brief Default MemManage interrupt handler.
\r
167 void MemManage_Handler( void )
\r
169 printf("MemoryMemFault (MPU fault) at addr 0X%x\n\r", StackUnwind());
\r
173 __ASM volatile("BKPT #01");
\r
177 * \brief Default BusFault interrupt handler.
\r
179 void BusFault_Handler( void )
\r
183 printf("Bus Fault at addr 0X%x\n\r", StackUnwind());
\r
187 __ASM volatile("BKPT #01");
\r
191 * \brief Default UsageFault interrupt handler.
\r
193 void UsageFault_Handler( void )
\r
195 printf("Usage fault at addr 0X%x", StackUnwind());
\r
199 __ASM volatile("BKPT #01");
\r
203 * \brief Default SVC interrupt handler.
\r
205 WEAK void SVC_Handler( void )
\r
211 * \brief Default DebugMon interrupt handler.
\r
213 WEAK void DebugMon_Handler( void )
\r
219 * \brief Default PendSV interrupt handler.
\r
221 void PendSV_Handler( void )
\r
227 * \brief Default SysTick interrupt handler.
\r
229 WEAK void SysTick_Handler( void )
\r
235 * \brief Default interrupt handler for Supply Controller.
\r
237 WEAK void SUPC_Handler( void )
\r
243 * \brief Default interrupt handler for Reset Controller.
\r
245 WEAK void RSTC_Handler( void )
\r
251 * \brief Default interrupt handler for Real Time Clock.
\r
253 WEAK void RTC_Handler( void )
\r
259 * \brief Default interrupt handler for Real Time Timer.
\r
261 WEAK void RTT_Handler( void )
\r
267 * \brief Default interrupt handler for Watchdog Timer.
\r
269 WEAK void WDT0_Handler( void )
\r
275 * \brief Default interrupt handler for PMC.
\r
277 WEAK void PMC_Handler( void )
\r
283 * \brief Default interrupt handler for EEFC.
\r
285 WEAK void EFC_Handler( void )
\r
291 * \brief Default interrupt handler for UART0.
\r
293 WEAK void UART0_Handler( void )
\r
299 * \brief Default interrupt handler for UART1.
\r
301 WEAK void UART1_Handler( void )
\r
307 * \brief Default interrupt handler for SMC.
\r
309 WEAK void TC10_Handler( void )
\r
315 * \brief Default interrupt handler for PIOA Controller.
\r
317 WEAK void PIOA_Handler( void )
\r
323 * \brief Default interrupt handler for PIOB Controller.
\r
325 WEAK void PIOB_Handler( void )
\r
331 * \brief Default interrupt handler for PIOC Controller.
\r
333 WEAK void PIOC_Handler( void )
\r
339 * \brief Default interrupt handler for USART0.
\r
341 WEAK void USART0_Handler( void )
\r
347 * \brief Default interrupt handler for USART1.
\r
349 WEAK void USART1_Handler( void )
\r
355 * \brief Default interrupt handler for USART2.
\r
357 WEAK void USART2_Handler( void )
\r
363 * \brief Default interrupt handler for MCI.
\r
365 WEAK void HSMCI_Handler( void )
\r
371 * \brief Default interrupt handler for TWI0.
\r
373 WEAK void TWI0_Handler( void )
\r
379 * \brief Default interrupt handler for TWI1.
\r
381 WEAK void TWI1_Handler( void )
\r
387 * \brief Default interrupt handler for SPI.
\r
389 WEAK void SPI0_Handler( void )
\r
395 * \brief Default interrupt handler for SSC.
\r
397 WEAK void SSC_Handler( void )
\r
403 * \brief Default interrupt handler for TC0.
\r
405 WEAK void TC0_Handler( void )
\r
411 * \brief Default interrupt handler for TC1.
\r
413 WEAK void TC1_Handler( void )
\r
419 * \brief Default interrupt handler for TC2.
\r
421 WEAK void TC2_Handler( void )
\r
427 * \brief Default SUPC interrupt handler for TC3.
\r
429 WEAK void TC3_Handler( void )
\r
435 * \brief Default SUPC interrupt handler for TC4.
\r
437 WEAK void TC4_Handler( void )
\r
443 * \brief Default SUPC interrupt handler for TC5.
\r
445 WEAK void TC5_Handler( void )
\r
451 * \brief Default SUPC interrupt handler for ADC.
\r
453 WEAK void AFEC1_Handler( void )
\r
459 * \brief Default SUPC interrupt handler for DAC.
\r
461 WEAK void DACC_Handler( void )
\r
467 * \brief Default SUPC interrupt handler for PWM.
\r
469 WEAK void PWM0_Handler( void )
\r
475 * \brief Default SUPC interrupt handler for CRCCU.
\r
477 WEAK void TC9_Handler( void )
\r
483 * \brief Default SUPC interrupt handler for ACC.
\r
485 WEAK void ACC_Handler( void )
\r
491 * \brief Default SUPC interrupt handler for USBD.
\r
493 WEAK void TC11_Handler( void )
\r
498 WEAK void USBHS_Handler(void)
\r
500 // udd_interrupt();
\r