Cortex-M3 Stack problem using a bootloader
I found a problem on the Cortex-M3 port. In the port.c file the MSP (main stack pointer) is initialized assuiming that the vector table is strored at the adress 0x00000000, using a bootloader this is not hte case. For that reason I modified the code as follow:
Line 160: prvSetMSP( *((unsigned portLONG *) portNVIC_VTABLE ) );
The portNVIC_VTABLE must be defined using:
#define portNVIC_VTABLE 0xE000ED08
Hope can help….
Cortex-M3 Stack problem using a bootloader
Very good point. Can we add this to the standard download?
Cortex-M3 Stack problem using a bootloader
Another correction should be done is the systick timer reload value. To be correct the value should be loaded using:
*(portNVIC_SYSTICK_LOAD) = (configCPU_CLOCK_HZ / configTICK_RATE_HZ)-1;
regards
Ravaz
Cortex-M3 Stack problem using a bootloader
I like to make sure I make that mistake over and over again :o) It will be right (for this port at least) in the next version.
Regards.
Cortex-M3 Stack problem using a bootloader
I would take the chance to thank you for the great job and for the perseverance you have to continously improve it….
Cortex-M3 Stack problem using a bootloader
I did the modification for the version 4.8.0 as follow
void vPortStartFirstTask(void)
{
asm volatile(
" ldr r0, =0xE000ED08 n" /* Load the NVIC_TABLE offset address. */
" ldr r0, [r0] n" /* Get the vector table offset. */
" ldr r0, [r0] n" /* Get the stack pointer. */
" msr msp, r0 n" /* Set the msp back to the start of the stack. */
" svc 0 n" /* System call to start first task. */
);
}
Regards
Ravaz