The problem was that I was initializing 256-2 vector table positions while only allocating space for 76. So I made the following changes
1) IE_stm32_ivt.S
.global stm32_ivt .global stm32_ivt_end .extern main .equ STM32_SRAM_BASE,0x20000000 .data stm32_ivt: .word STM32_SRAM_BASE + (20 * 1024) .word (main + 1) .skip (14 * 4) .skip (240 * 4) stm32_ivt_end: .text
2) IE_stm32.c
/* ********************************************************************** *install handlers for all vector positions *skip positions 0 = thread stack and 1 = reset address *dont hardcode size of table - determine it with stm32_ivt and _end ********************************************************************** */ ptrTemp = (volatile unsigned int *)STM32_NVIC_IVT_BASE; wdTemp = (&stm32_ivt_end - &stm32_ivt); for(wdCount=2; wdCount<wdTemp; wdCount++) { if(wdCount <= 6) ptrTemp[wdCount] = ((unsigned int)(stm32_nvic_fault_isr)\ | 0x1); else { if(wdCount == 15) ptrTemp[wdCount] = ((unsigned int)(stm32_nvic_systick_isr)\ | 0x1); else ptrTemp[wdCount] = ((unsigned int)(stm32_nvic_unknown_isr)\ | 0x1); } }
3) IE_stm32.ld
MEMORY { STM32_RAM : ORIGIN = 0x20000000, LENGTH = (20480 - 1024) } SECTIONS { .data : { *(.data); } > STM32_RAM .text : { *(.text); *(.rodata*); } > STM32_RAM .bss : { *(.bss); } > STM32_RAM }
No comments:
Post a Comment