| //***************************************************************************** | |
| // | |
| // startup.c - Boot code for Stellaris. | |
| // | |
| // Copyright (c) 2005,2006 Luminary Micro, Inc. All rights reserved. | |
| // | |
| // Software License Agreement | |
| // | |
| // Luminary Micro, Inc. (LMI) is supplying this software for use solely and | |
| // exclusively on LMI's Stellaris Family of microcontroller products. | |
| // | |
| // The software is owned by LMI and/or its suppliers, and is protected under | |
| // applicable copyright laws. All rights are reserved. Any use in violation | |
| // of the foregoing restrictions may subject the user to criminal sanctions | |
| // under applicable laws, as well as to civil liability for the breach of the | |
| // terms and conditions of this license. | |
| // | |
| // THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED | |
| // OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF | |
| // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. | |
| // LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR | |
| // CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. | |
| // | |
| //***************************************************************************** | |
| //***************************************************************************** | |
| // | |
| // Forward declaration of the default fault handlers. | |
| // | |
| //***************************************************************************** | |
| void ResetISR(void); | |
| static void NmiSR(void); | |
| void FaultISR(void); | |
| extern void xPortPendSVHandler(void); | |
| extern void xPortSysTickHandler(void); | |
| extern void vUART_ISR( void ); | |
| extern void vPortSVCHandler( void ); | |
| //***************************************************************************** | |
| // | |
| // The entry point for the application. | |
| // | |
| //***************************************************************************** | |
| extern void entry(void); | |
| //***************************************************************************** | |
| // | |
| // Reserve space for the system stack. | |
| // | |
| //***************************************************************************** | |
| #ifndef STACK_SIZE | |
| #define STACK_SIZE 51 | |
| #endif | |
| static unsigned long pulMainStack[STACK_SIZE]; | |
| //***************************************************************************** | |
| // | |
| // The minimal vector table for a Cortex-M3. Note that the proper constructs | |
| // must be placed on this to ensure that it ends up at physical address | |
| // 0x0000.0000. | |
| // | |
| //***************************************************************************** | |
| __attribute__ ((section("vectors"))) | |
| void (* const g_pfnVectors[])(void) = | |
| { | |
| (void (*)(void))((unsigned long)pulMainStack + sizeof(pulMainStack)), | |
| ResetISR, | |
| NmiSR, | |
| FaultISR, //FAULT | |
| 0, // The MPU fault handler | |
| 0, // The bus fault handler | |
| 0, // The usage fault handler | |
| 0, // Reserved | |
| 0, // Reserved | |
| 0, // Reserved | |
| 0, // Reserved | |
| vPortSVCHandler, // SVCall handler | |
| 0, // Debug monitor handler | |
| 0, // Reserved | |
| xPortPendSVHandler, // The PendSV handler | |
| xPortSysTickHandler, // The SysTick handler | |
| 0, // GPIO Port A | |
| 0, // GPIO Port B | |
| 0, // GPIO Port C | |
| 0, // GPIO Port D | |
| 0, // GPIO Port E | |
| vUART_ISR // UART0 Rx and Tx | |
| }; | |
| //***************************************************************************** | |
| // | |
| // The following are constructs created by the linker, indicating where the | |
| // the "data" and "bss" segments reside in memory. The initializers for the | |
| // for the "data" segment resides immediately following the "text" segment. | |
| // | |
| //***************************************************************************** | |
| extern unsigned long _etext; | |
| extern unsigned long _data; | |
| extern unsigned long _edata; | |
| extern unsigned long _bss; | |
| extern unsigned long _ebss; | |
| //***************************************************************************** | |
| // | |
| // This is the code that gets called when the processor first starts execution | |
| // following a reset event. Only the absolutely necessary set is performed, | |
| // after which the application supplied entry() routine is called. Any fancy | |
| // actions (such as making decisions based on the reset cause register, and | |
| // resetting the bits in that register) are left solely in the hands of the | |
| // application. | |
| // | |
| //***************************************************************************** | |
| void | |
| ResetISR(void) | |
| { | |
| unsigned long *pulSrc, *pulDest; | |
| // | |
| // Copy the data segment initializers from flash to SRAM. | |
| // | |
| pulSrc = &_etext; | |
| for(pulDest = &_data; pulDest < &_edata; ) | |
| { | |
| *pulDest++ = *pulSrc++; | |
| } | |
| // | |
| // Zero fill the bss segment. | |
| // | |
| for(pulDest = &_bss; pulDest < &_ebss; ) | |
| { | |
| *pulDest++ = 0; | |
| } | |
| // | |
| // Call the application's entry point. | |
| // | |
| Main(); | |
| } | |
| //***************************************************************************** | |
| // | |
| // This is the code that gets called when the processor receives a NMI. This | |
| // simply enters an infinite loop, preserving the system state for examination | |
| // by a debugger. | |
| // | |
| //***************************************************************************** | |
| static void | |
| NmiSR(void) | |
| { | |
| // | |
| // Enter an infinite loop. | |
| // | |
| while(1) | |
| { | |
| } | |
| } | |
| //***************************************************************************** | |
| // | |
| // This is the code that gets called when the processor receives a fault | |
| // interrupt. This simply enters an infinite loop, preserving the system state | |
| // for examination by a debugger. | |
| // | |
| //***************************************************************************** | |
| void | |
| FaultISR(void) | |
| { | |
| // | |
| // Enter an infinite loop. | |
| // | |
| while(1) | |
| { | |
| } | |
| } |