xref: /btstack/port/apollo2-em9304/example-template/gcc/startup_gcc.c (revision e6c9673776c7f85e24c76da7f4b1b83031102d2b)
1*e6c96737SMatthias Ringwald //*****************************************************************************
2*e6c96737SMatthias Ringwald //
3*e6c96737SMatthias Ringwald //! @file startup_gcc.c
4*e6c96737SMatthias Ringwald //!
5*e6c96737SMatthias Ringwald //! @brief Definitions for interrupt handlers, the vector table, and the stack.
6*e6c96737SMatthias Ringwald //
7*e6c96737SMatthias Ringwald //*****************************************************************************
8*e6c96737SMatthias Ringwald 
9*e6c96737SMatthias Ringwald //*****************************************************************************
10*e6c96737SMatthias Ringwald //
11*e6c96737SMatthias Ringwald // Copyright (c) 2017, Ambiq Micro
12*e6c96737SMatthias Ringwald // All rights reserved.
13*e6c96737SMatthias Ringwald //
14*e6c96737SMatthias Ringwald // Redistribution and use in source and binary forms, with or without
15*e6c96737SMatthias Ringwald // modification, are permitted provided that the following conditions are met:
16*e6c96737SMatthias Ringwald //
17*e6c96737SMatthias Ringwald // 1. Redistributions of source code must retain the above copyright notice,
18*e6c96737SMatthias Ringwald // this list of conditions and the following disclaimer.
19*e6c96737SMatthias Ringwald //
20*e6c96737SMatthias Ringwald // 2. Redistributions in binary form must reproduce the above copyright
21*e6c96737SMatthias Ringwald // notice, this list of conditions and the following disclaimer in the
22*e6c96737SMatthias Ringwald // documentation and/or other materials provided with the distribution.
23*e6c96737SMatthias Ringwald //
24*e6c96737SMatthias Ringwald // 3. Neither the name of the copyright holder nor the names of its
25*e6c96737SMatthias Ringwald // contributors may be used to endorse or promote products derived from this
26*e6c96737SMatthias Ringwald // software without specific prior written permission.
27*e6c96737SMatthias Ringwald //
28*e6c96737SMatthias Ringwald // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
29*e6c96737SMatthias Ringwald // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30*e6c96737SMatthias Ringwald // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31*e6c96737SMatthias Ringwald // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
32*e6c96737SMatthias Ringwald // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
33*e6c96737SMatthias Ringwald // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
34*e6c96737SMatthias Ringwald // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
35*e6c96737SMatthias Ringwald // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
36*e6c96737SMatthias Ringwald // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
37*e6c96737SMatthias Ringwald // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38*e6c96737SMatthias Ringwald // POSSIBILITY OF SUCH DAMAGE.
39*e6c96737SMatthias Ringwald //
40*e6c96737SMatthias Ringwald // This is part of revision v1.2.10-1-gc24dfba-hotfix of the AmbiqSuite Development Package.
41*e6c96737SMatthias Ringwald //
42*e6c96737SMatthias Ringwald //*****************************************************************************
43*e6c96737SMatthias Ringwald 
44*e6c96737SMatthias Ringwald #include <stdint.h>
45*e6c96737SMatthias Ringwald 
46*e6c96737SMatthias Ringwald //*****************************************************************************
47*e6c96737SMatthias Ringwald //
48*e6c96737SMatthias Ringwald // Forward declaration of interrupt handlers.
49*e6c96737SMatthias Ringwald //
50*e6c96737SMatthias Ringwald //*****************************************************************************
51*e6c96737SMatthias Ringwald extern void am_reset_isr(void)        __attribute ((naked));
52*e6c96737SMatthias Ringwald extern void am_nmi_isr(void)          __attribute ((weak));
53*e6c96737SMatthias Ringwald extern void am_fault_isr(void)        __attribute ((weak));
54*e6c96737SMatthias Ringwald extern void am_mpufault_isr(void)     __attribute ((weak, alias ("am_fault_isr")));
55*e6c96737SMatthias Ringwald extern void am_busfault_isr(void)     __attribute ((weak, alias ("am_fault_isr")));
56*e6c96737SMatthias Ringwald extern void am_usagefault_isr(void)   __attribute ((weak, alias ("am_fault_isr")));
57*e6c96737SMatthias Ringwald extern void am_svcall_isr(void)       __attribute ((weak, alias ("am_default_isr")));
58*e6c96737SMatthias Ringwald extern void am_debugmon_isr(void)     __attribute ((weak, alias ("am_default_isr")));
59*e6c96737SMatthias Ringwald extern void am_pendsv_isr(void)       __attribute ((weak, alias ("am_default_isr")));
60*e6c96737SMatthias Ringwald extern void am_systick_isr(void)      __attribute ((weak, alias ("am_default_isr")));
61*e6c96737SMatthias Ringwald 
62*e6c96737SMatthias Ringwald extern void am_brownout_isr(void)     __attribute ((weak, alias ("am_default_isr")));
63*e6c96737SMatthias Ringwald extern void am_watchdog_isr(void)     __attribute ((weak, alias ("am_default_isr")));
64*e6c96737SMatthias Ringwald extern void am_clkgen_isr(void)       __attribute ((weak, alias ("am_default_isr")));
65*e6c96737SMatthias Ringwald extern void am_vcomp_isr(void)        __attribute ((weak, alias ("am_default_isr")));
66*e6c96737SMatthias Ringwald extern void am_ioslave_ios_isr(void)  __attribute ((weak, alias ("am_default_isr")));
67*e6c96737SMatthias Ringwald extern void am_ioslave_acc_isr(void)  __attribute ((weak, alias ("am_default_isr")));
68*e6c96737SMatthias Ringwald extern void am_iomaster0_isr(void)    __attribute ((weak, alias ("am_default_isr")));
69*e6c96737SMatthias Ringwald extern void am_iomaster1_isr(void)    __attribute ((weak, alias ("am_default_isr")));
70*e6c96737SMatthias Ringwald extern void am_iomaster2_isr(void)    __attribute ((weak, alias ("am_default_isr")));
71*e6c96737SMatthias Ringwald extern void am_iomaster3_isr(void)    __attribute ((weak, alias ("am_default_isr")));
72*e6c96737SMatthias Ringwald extern void am_iomaster4_isr(void)    __attribute ((weak, alias ("am_default_isr")));
73*e6c96737SMatthias Ringwald extern void am_iomaster5_isr(void)    __attribute ((weak, alias ("am_default_isr")));
74*e6c96737SMatthias Ringwald extern void am_gpio_isr(void)         __attribute ((weak, alias ("am_default_isr")));
75*e6c96737SMatthias Ringwald extern void am_ctimer_isr(void)       __attribute ((weak, alias ("am_default_isr")));
76*e6c96737SMatthias Ringwald extern void am_uart_isr(void)         __attribute ((weak, alias ("am_default_isr")));
77*e6c96737SMatthias Ringwald extern void am_uart1_isr(void)        __attribute ((weak, alias ("am_default_isr")));
78*e6c96737SMatthias Ringwald extern void am_adc_isr(void)          __attribute ((weak, alias ("am_default_isr")));
79*e6c96737SMatthias Ringwald extern void am_pdm_isr(void)          __attribute ((weak, alias ("am_default_isr")));
80*e6c96737SMatthias Ringwald extern void am_stimer_isr(void)       __attribute ((weak, alias ("am_default_isr")));
81*e6c96737SMatthias Ringwald extern void am_stimer_cmpr0_isr(void) __attribute ((weak, alias ("am_default_isr")));
82*e6c96737SMatthias Ringwald extern void am_stimer_cmpr1_isr(void) __attribute ((weak, alias ("am_default_isr")));
83*e6c96737SMatthias Ringwald extern void am_stimer_cmpr2_isr(void) __attribute ((weak, alias ("am_default_isr")));
84*e6c96737SMatthias Ringwald extern void am_stimer_cmpr3_isr(void) __attribute ((weak, alias ("am_default_isr")));
85*e6c96737SMatthias Ringwald extern void am_stimer_cmpr4_isr(void) __attribute ((weak, alias ("am_default_isr")));
86*e6c96737SMatthias Ringwald extern void am_stimer_cmpr5_isr(void) __attribute ((weak, alias ("am_default_isr")));
87*e6c96737SMatthias Ringwald extern void am_stimer_cmpr6_isr(void) __attribute ((weak, alias ("am_default_isr")));
88*e6c96737SMatthias Ringwald extern void am_stimer_cmpr7_isr(void) __attribute ((weak, alias ("am_default_isr")));
89*e6c96737SMatthias Ringwald extern void am_flash_isr(void)        __attribute ((weak, alias ("am_default_isr")));
90*e6c96737SMatthias Ringwald extern void am_software0_isr(void)    __attribute ((weak, alias ("am_default_isr")));
91*e6c96737SMatthias Ringwald extern void am_software1_isr(void)    __attribute ((weak, alias ("am_default_isr")));
92*e6c96737SMatthias Ringwald extern void am_software2_isr(void)    __attribute ((weak, alias ("am_default_isr")));
93*e6c96737SMatthias Ringwald extern void am_software3_isr(void)    __attribute ((weak, alias ("am_default_isr")));
94*e6c96737SMatthias Ringwald 
95*e6c96737SMatthias Ringwald extern void am_default_isr(void)      __attribute ((weak));
96*e6c96737SMatthias Ringwald 
97*e6c96737SMatthias Ringwald //*****************************************************************************
98*e6c96737SMatthias Ringwald //
99*e6c96737SMatthias Ringwald // The entry point for the application.
100*e6c96737SMatthias Ringwald //
101*e6c96737SMatthias Ringwald //*****************************************************************************
102*e6c96737SMatthias Ringwald extern int main(void);
103*e6c96737SMatthias Ringwald 
104*e6c96737SMatthias Ringwald //*****************************************************************************
105*e6c96737SMatthias Ringwald //
106*e6c96737SMatthias Ringwald // Reserve space for the system stack.
107*e6c96737SMatthias Ringwald //
108*e6c96737SMatthias Ringwald //*****************************************************************************
109*e6c96737SMatthias Ringwald __attribute__ ((section(".stack")))
110*e6c96737SMatthias Ringwald static uint32_t g_pui32Stack[1024];
111*e6c96737SMatthias Ringwald 
112*e6c96737SMatthias Ringwald //*****************************************************************************
113*e6c96737SMatthias Ringwald //
114*e6c96737SMatthias Ringwald // The vector table.  Note that the proper constructs must be placed on this to
115*e6c96737SMatthias Ringwald // ensure that it ends up at physical address 0x0000.0000.
116*e6c96737SMatthias Ringwald //
117*e6c96737SMatthias Ringwald // Note: Aliasing and weakly exporting am_mpufault_isr, am_busfault_isr, and
118*e6c96737SMatthias Ringwald // am_usagefault_isr does not work if am_fault_isr is defined externally.
119*e6c96737SMatthias Ringwald // Therefore, we'll explicitly use am_fault_isr in the table for those vectors.
120*e6c96737SMatthias Ringwald //
121*e6c96737SMatthias Ringwald //*****************************************************************************
122*e6c96737SMatthias Ringwald __attribute__ ((section(".isr_vector")))
123*e6c96737SMatthias Ringwald void (* const g_am_pfnVectors[])(void) =
124*e6c96737SMatthias Ringwald {
125*e6c96737SMatthias Ringwald     (void (*)(void))((uint32_t)g_pui32Stack + sizeof(g_pui32Stack)),
126*e6c96737SMatthias Ringwald                                             // The initial stack pointer
127*e6c96737SMatthias Ringwald     am_reset_isr,                           // The reset handler
128*e6c96737SMatthias Ringwald     am_nmi_isr,                             // The NMI handler
129*e6c96737SMatthias Ringwald     am_fault_isr,                           // The hard fault handler
130*e6c96737SMatthias Ringwald     am_fault_isr,                           // The MPU fault handler
131*e6c96737SMatthias Ringwald     am_fault_isr,                           // The bus fault handler
132*e6c96737SMatthias Ringwald     am_fault_isr,                           // The usage fault handler
133*e6c96737SMatthias Ringwald     0,                                      // Reserved
134*e6c96737SMatthias Ringwald     0,                                      // Reserved
135*e6c96737SMatthias Ringwald     0,                                      // Reserved
136*e6c96737SMatthias Ringwald     0,                                      // Reserved
137*e6c96737SMatthias Ringwald     am_svcall_isr,                          // SVCall handle
138*e6c96737SMatthias Ringwald     am_debugmon_isr,                        // Debug monitor handler
139*e6c96737SMatthias Ringwald     0,                                      // Reserved
140*e6c96737SMatthias Ringwald     am_pendsv_isr,                          // The PendSV handler
141*e6c96737SMatthias Ringwald     am_systick_isr,                         // The SysTick handler
142*e6c96737SMatthias Ringwald 
143*e6c96737SMatthias Ringwald     //
144*e6c96737SMatthias Ringwald     // Peripheral Interrupts
145*e6c96737SMatthias Ringwald     //
146*e6c96737SMatthias Ringwald     am_brownout_isr,                        //  0: Brownout
147*e6c96737SMatthias Ringwald     am_watchdog_isr,                        //  1: Watchdog
148*e6c96737SMatthias Ringwald     am_clkgen_isr,                          //  2: CLKGEN
149*e6c96737SMatthias Ringwald     am_vcomp_isr,                           //  3: Voltage Comparator
150*e6c96737SMatthias Ringwald     am_ioslave_ios_isr,                     //  4: I/O Slave general
151*e6c96737SMatthias Ringwald     am_ioslave_acc_isr,                     //  5: I/O Slave access
152*e6c96737SMatthias Ringwald     am_iomaster0_isr,                       //  6: I/O Master 0
153*e6c96737SMatthias Ringwald     am_iomaster1_isr,                       //  7: I/O Master 1
154*e6c96737SMatthias Ringwald     am_iomaster2_isr,                       //  8: I/O Master 2
155*e6c96737SMatthias Ringwald     am_iomaster3_isr,                       //  9: I/O Master 3
156*e6c96737SMatthias Ringwald     am_iomaster4_isr,                       // 10: I/O Master 4
157*e6c96737SMatthias Ringwald     am_iomaster5_isr,                       // 11: I/O Master 5
158*e6c96737SMatthias Ringwald     am_gpio_isr,                            // 12: GPIO
159*e6c96737SMatthias Ringwald     am_ctimer_isr,                          // 13: CTIMER
160*e6c96737SMatthias Ringwald     am_uart_isr,                            // 14: UART
161*e6c96737SMatthias Ringwald     am_uart1_isr,                           // 15: UART
162*e6c96737SMatthias Ringwald     am_adc_isr,                             // 16: ADC
163*e6c96737SMatthias Ringwald     am_pdm_isr,                             // 17: ADC
164*e6c96737SMatthias Ringwald     am_stimer_isr,                          // 18: SYSTEM TIMER
165*e6c96737SMatthias Ringwald     am_stimer_cmpr0_isr,                    // 19: SYSTEM TIMER COMPARE0
166*e6c96737SMatthias Ringwald     am_stimer_cmpr1_isr,                    // 20: SYSTEM TIMER COMPARE1
167*e6c96737SMatthias Ringwald     am_stimer_cmpr2_isr,                    // 21: SYSTEM TIMER COMPARE2
168*e6c96737SMatthias Ringwald     am_stimer_cmpr3_isr,                    // 22: SYSTEM TIMER COMPARE3
169*e6c96737SMatthias Ringwald     am_stimer_cmpr4_isr,                    // 23: SYSTEM TIMER COMPARE4
170*e6c96737SMatthias Ringwald     am_stimer_cmpr5_isr,                    // 24: SYSTEM TIMER COMPARE5
171*e6c96737SMatthias Ringwald     am_stimer_cmpr6_isr,                    // 25: SYSTEM TIMER COMPARE6
172*e6c96737SMatthias Ringwald     am_stimer_cmpr7_isr,                    // 26: SYSTEM TIMER COMPARE7
173*e6c96737SMatthias Ringwald     am_flash_isr,                           // 27: FLASH
174*e6c96737SMatthias Ringwald     am_software0_isr,                       // 28: SOFTWARE0
175*e6c96737SMatthias Ringwald     am_software1_isr,                       // 29: SOFTWARE1
176*e6c96737SMatthias Ringwald     am_software2_isr,                       // 30: SOFTWARE2
177*e6c96737SMatthias Ringwald     am_software3_isr                        // 31: SOFTWARE3
178*e6c96737SMatthias Ringwald };
179*e6c96737SMatthias Ringwald 
180*e6c96737SMatthias Ringwald //*****************************************************************************
181*e6c96737SMatthias Ringwald //
182*e6c96737SMatthias Ringwald // The following are constructs created by the linker, indicating where the
183*e6c96737SMatthias Ringwald // the "data" and "bss" segments reside in memory.  The initializers for the
184*e6c96737SMatthias Ringwald // "data" segment resides immediately following the "text" segment.
185*e6c96737SMatthias Ringwald //
186*e6c96737SMatthias Ringwald //*****************************************************************************
187*e6c96737SMatthias Ringwald extern uint32_t _etext;
188*e6c96737SMatthias Ringwald extern uint32_t _sdata;
189*e6c96737SMatthias Ringwald extern uint32_t _edata;
190*e6c96737SMatthias Ringwald extern uint32_t _sbss;
191*e6c96737SMatthias Ringwald extern uint32_t _ebss;
192*e6c96737SMatthias Ringwald 
193*e6c96737SMatthias Ringwald //*****************************************************************************
194*e6c96737SMatthias Ringwald //
195*e6c96737SMatthias Ringwald // This is the code that gets called when the processor first starts execution
196*e6c96737SMatthias Ringwald // following a reset event.  Only the absolutely necessary set is performed,
197*e6c96737SMatthias Ringwald // after which the application supplied entry() routine is called.
198*e6c96737SMatthias Ringwald //
199*e6c96737SMatthias Ringwald //*****************************************************************************
200*e6c96737SMatthias Ringwald #if defined(__GNUC_STDC_INLINE__)
201*e6c96737SMatthias Ringwald void
am_reset_isr(void)202*e6c96737SMatthias Ringwald am_reset_isr(void)
203*e6c96737SMatthias Ringwald {
204*e6c96737SMatthias Ringwald     //
205*e6c96737SMatthias Ringwald     // Set the vector table pointer.
206*e6c96737SMatthias Ringwald     //
207*e6c96737SMatthias Ringwald     __asm("    ldr    r0, =0xE000ED08\n"
208*e6c96737SMatthias Ringwald           "    ldr    r1, =g_am_pfnVectors\n"
209*e6c96737SMatthias Ringwald           "    str    r1, [r0]");
210*e6c96737SMatthias Ringwald 
211*e6c96737SMatthias Ringwald     //
212*e6c96737SMatthias Ringwald     // Set the stack pointer.
213*e6c96737SMatthias Ringwald     //
214*e6c96737SMatthias Ringwald     __asm("    ldr    sp, [r1]");
215*e6c96737SMatthias Ringwald #ifndef NOFPU
216*e6c96737SMatthias Ringwald     //
217*e6c96737SMatthias Ringwald     // Enable the FPU.
218*e6c96737SMatthias Ringwald     //
219*e6c96737SMatthias Ringwald     __asm("ldr  r0, =0xE000ED88\n"
220*e6c96737SMatthias Ringwald           "ldr  r1,[r0]\n"
221*e6c96737SMatthias Ringwald           "orr  r1,#(0xF << 20)\n"
222*e6c96737SMatthias Ringwald           "str  r1,[r0]\n"
223*e6c96737SMatthias Ringwald           "dsb\n"
224*e6c96737SMatthias Ringwald           "isb\n");
225*e6c96737SMatthias Ringwald #endif
226*e6c96737SMatthias Ringwald     //
227*e6c96737SMatthias Ringwald     // Copy the data segment initializers from flash to SRAM.
228*e6c96737SMatthias Ringwald     //
229*e6c96737SMatthias Ringwald     __asm("    ldr     r0, =_init_data\n"
230*e6c96737SMatthias Ringwald           "    ldr     r1, =_sdata\n"
231*e6c96737SMatthias Ringwald           "    ldr     r2, =_edata\n"
232*e6c96737SMatthias Ringwald           "copy_loop:\n"
233*e6c96737SMatthias Ringwald           "        ldr   r3, [r0], #4\n"
234*e6c96737SMatthias Ringwald           "        str   r3, [r1], #4\n"
235*e6c96737SMatthias Ringwald           "        cmp     r1, r2\n"
236*e6c96737SMatthias Ringwald           "        blt     copy_loop\n");
237*e6c96737SMatthias Ringwald     //
238*e6c96737SMatthias Ringwald     // Zero fill the bss segment.
239*e6c96737SMatthias Ringwald     //
240*e6c96737SMatthias Ringwald     __asm("    ldr     r0, =_sbss\n"
241*e6c96737SMatthias Ringwald           "    ldr     r1, =_ebss\n"
242*e6c96737SMatthias Ringwald           "    mov     r2, #0\n"
243*e6c96737SMatthias Ringwald           "zero_loop:\n"
244*e6c96737SMatthias Ringwald           "        cmp     r0, r1\n"
245*e6c96737SMatthias Ringwald           "        it      lt\n"
246*e6c96737SMatthias Ringwald           "        strlt   r2, [r0], #4\n"
247*e6c96737SMatthias Ringwald           "        blt     zero_loop");
248*e6c96737SMatthias Ringwald 
249*e6c96737SMatthias Ringwald     //
250*e6c96737SMatthias Ringwald     // Call the application's entry point.
251*e6c96737SMatthias Ringwald     //
252*e6c96737SMatthias Ringwald     main();
253*e6c96737SMatthias Ringwald 
254*e6c96737SMatthias Ringwald     //
255*e6c96737SMatthias Ringwald     // If main returns then execute a break point instruction
256*e6c96737SMatthias Ringwald     //
257*e6c96737SMatthias Ringwald     __asm("    bkpt     ");
258*e6c96737SMatthias Ringwald }
259*e6c96737SMatthias Ringwald #else
260*e6c96737SMatthias Ringwald #error GNU STDC inline not supported.
261*e6c96737SMatthias Ringwald #endif
262*e6c96737SMatthias Ringwald 
263*e6c96737SMatthias Ringwald //*****************************************************************************
264*e6c96737SMatthias Ringwald //
265*e6c96737SMatthias Ringwald // This is the code that gets called when the processor receives a NMI.  This
266*e6c96737SMatthias Ringwald // simply enters an infinite loop, preserving the system state for examination
267*e6c96737SMatthias Ringwald // by a debugger.
268*e6c96737SMatthias Ringwald //
269*e6c96737SMatthias Ringwald //*****************************************************************************
270*e6c96737SMatthias Ringwald void
am_nmi_isr(void)271*e6c96737SMatthias Ringwald am_nmi_isr(void)
272*e6c96737SMatthias Ringwald {
273*e6c96737SMatthias Ringwald     //
274*e6c96737SMatthias Ringwald     // Go into an infinite loop.
275*e6c96737SMatthias Ringwald     //
276*e6c96737SMatthias Ringwald     while(1)
277*e6c96737SMatthias Ringwald     {
278*e6c96737SMatthias Ringwald     }
279*e6c96737SMatthias Ringwald }
280*e6c96737SMatthias Ringwald 
281*e6c96737SMatthias Ringwald //*****************************************************************************
282*e6c96737SMatthias Ringwald //
283*e6c96737SMatthias Ringwald // This is the code that gets called when the processor receives a fault
284*e6c96737SMatthias Ringwald // interrupt.  This simply enters an infinite loop, preserving the system state
285*e6c96737SMatthias Ringwald // for examination by a debugger.
286*e6c96737SMatthias Ringwald //
287*e6c96737SMatthias Ringwald //*****************************************************************************
288*e6c96737SMatthias Ringwald void
am_fault_isr(void)289*e6c96737SMatthias Ringwald am_fault_isr(void)
290*e6c96737SMatthias Ringwald {
291*e6c96737SMatthias Ringwald     //
292*e6c96737SMatthias Ringwald     // Go into an infinite loop.
293*e6c96737SMatthias Ringwald     //
294*e6c96737SMatthias Ringwald     while(1)
295*e6c96737SMatthias Ringwald     {
296*e6c96737SMatthias Ringwald     }
297*e6c96737SMatthias Ringwald }
298*e6c96737SMatthias Ringwald 
299*e6c96737SMatthias Ringwald //*****************************************************************************
300*e6c96737SMatthias Ringwald //
301*e6c96737SMatthias Ringwald // This is the code that gets called when the processor receives an unexpected
302*e6c96737SMatthias Ringwald // interrupt.  This simply enters an infinite loop, preserving the system state
303*e6c96737SMatthias Ringwald // for examination by a debugger.
304*e6c96737SMatthias Ringwald //
305*e6c96737SMatthias Ringwald //*****************************************************************************
306*e6c96737SMatthias Ringwald void
am_default_isr(void)307*e6c96737SMatthias Ringwald am_default_isr(void)
308*e6c96737SMatthias Ringwald {
309*e6c96737SMatthias Ringwald     //
310*e6c96737SMatthias Ringwald     // Go into an infinite loop.
311*e6c96737SMatthias Ringwald     //
312*e6c96737SMatthias Ringwald     while(1)
313*e6c96737SMatthias Ringwald     {
314*e6c96737SMatthias Ringwald     }
315*e6c96737SMatthias Ringwald }
316*e6c96737SMatthias Ringwald 
317