X-Git-Url: http://git.asbjorn.biz/?p=rapper.git;a=blobdiff_plain;f=bitbucket_lpc1768%2Fstartup.c;fp=bitbucket_lpc1768%2Fstartup.c;h=b1c6418e587026daa33f58c0bc062e16e49697ee;hp=0000000000000000000000000000000000000000;hb=4c765357d3685985fea2c360e681025c772e0472;hpb=81d357a0d5a52c468daa3b088028b04eb8b25db5 diff --git a/bitbucket_lpc1768/startup.c b/bitbucket_lpc1768/startup.c new file mode 100644 index 0000000..b1c6418 --- /dev/null +++ b/bitbucket_lpc1768/startup.c @@ -0,0 +1,91 @@ +/* + * This is an ARM Cortex-M3 startup file for the NXP LPC1768. + * + * TODO: Add vendor (NXP) specific interrupt vectors. + * + * See also: http://bitbucket.org/jpc/lpc1768/ + * + * Copyright (c) 2010 LoEE - Jakub Piotr Cłapa + * This program is released under the new BSD license. + */ +#include "CMSIS/LPC17xx.h" + +// Dummy handler. +void Default_Handler (void) { while (1); } + +// Weakly bind all interrupt vectors to the dummy handler. +void __attribute__((weak)) Reset_Handler(void); +void __attribute__((weak)) NMI_Handler(void); +void __attribute__((weak)) HardFault_Handler(void); +void __attribute__((weak)) MemManage_Handler(void); +void __attribute__((weak)) BusFault_Handler(void); +void __attribute__((weak)) UsageFault_Handler(void); +void __attribute__((weak)) SVC_Handler(void); +void __attribute__((weak)) DebugMon_Handler(void); +void __attribute__((weak)) PendSV_Handler(void); +void __attribute__((weak)) SysTick_Handler(void); +#pragma weak NMI_Handler = Default_Handler +#pragma weak HardFault_Handler = Default_Handler +#pragma weak MemManage_Handler = Default_Handler +#pragma weak BusFault_Handler = Default_Handler +#pragma weak UsageFault_Handler = Default_Handler +#pragma weak SVC_Handler = Default_Handler +#pragma weak DebugMon_Handler = Default_Handler +#pragma weak PendSV_Handler = Default_Handler +#pragma weak SysTick_Handler = Default_Handler + +// Start of the stack (last RAM address; exported in the linker script) +extern void _sstack; + +// The signature of Cortex-M3 interrupt handlers. +typedef void (* const Interrupt_Handler_P)(void); + +// Interrupt vectors table +__attribute__ ((section(".cs3.interrupt_vector"))) +Interrupt_Handler_P interrupt_vectors[] = { + &_sstack, // the first word contains the initial + // stack pointer the hardware loads it + // to the SP register before the first + // instruction + // Standard Cortex-M3 interrupts: + Reset_Handler, + NMI_Handler, + HardFault_Handler, + MemManage_Handler, + BusFault_Handler, + UsageFault_Handler, + 0xefff7d26, + 0, + 0, + 0, + SVC_Handler, + DebugMon_Handler, + 0, + PendSV_Handler, + SysTick_Handler, + // Vendor specific interrupts for LPC1768: +}; + +extern int main (void); + +extern uint32_t _etext, _sdata, _edata, _sbss, _ebss; + +void +Reset_Handler(void) +{ + // Initialize clocks + SystemInit (); + + uint32_t *s, *d; + // Copy initialization data to RAM (.data section) + s = &_etext; + d = &_sdata; + while (d < &_edata) *d++ = *s++; + // Zero the remaining allocated RAM (.bss section) + d = &_sbss; + while (d < &_ebss) *d++ = 0; + + // Everything is ready. Run the user program. + main(); + while (1); +}