From 5924485defc0bf00f3beba76246d2be5cf588d81 Mon Sep 17 00:00:00 2001 From: Kelvin Lawson Date: Tue, 17 Sep 2013 17:06:06 +0100 Subject: [PATCH] dm36x: Copy vector table from initial 0x80000000 to required location on ARM, 0x00000000. --- ports/arm/platforms/dm36x/atomport-private.c | 10 +++++++--- ports/arm/platforms/dm36x/system.ld | 2 ++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/ports/arm/platforms/dm36x/atomport-private.c b/ports/arm/platforms/dm36x/atomport-private.c index 5cd1758..7986240 100644 --- a/ports/arm/platforms/dm36x/atomport-private.c +++ b/ports/arm/platforms/dm36x/atomport-private.c @@ -37,7 +37,7 @@ /** Imports required by C startup code */ -extern unsigned long _end_text, _start_data, _end_data, _start_bss, _end_bss; +extern unsigned long _start_vectors, _end_vectors, _end_text, _start_data, _end_data, _start_bss, _end_bss; extern int main(void); @@ -61,9 +61,13 @@ extern void _mainCRTStartup (void) __attribute__((weak)); void _mainCRTStartup(void) { unsigned long *src; -#ifdef ROM unsigned long *dst; -#endif + + // Copy vector table from SRAM to IRAM0 (ARM vector table must be at 0x00000000) + src = &_start_vectors; + dst = (unsigned long *)0x00000000; + while(src < &_end_vectors) + *(dst++) = *(src++); #ifdef ROM // Running from ROM: copy data section to RAM diff --git a/ports/arm/platforms/dm36x/system.ld b/ports/arm/platforms/dm36x/system.ld index c6c5219..cacbfeb 100644 --- a/ports/arm/platforms/dm36x/system.ld +++ b/ports/arm/platforms/dm36x/system.ld @@ -24,7 +24,9 @@ SECTIONS .text : { + _start_vectors = .; *(.vectors) + _end_vectors = .; /* Startup assembly */ *(.startup) *(.init)