我有引导程序,在lpc2xxx工作得很好。但是,当我将其复制到lpc4078时,bootloader不会跳转到主程序。
我试过了:
1)使用#define USER_FLASH_START 0x8000
__asm void boot_jump(uint32_t address)
{
LDR SP, [R0]
LDR PC, [R0, #4]
}
main()
{
bool t = true;
while(t)
{
...WORKING CODE...
uart << "Hello, World!!!";
}
uart << "END";
__disable_irq();
__set_CONTROL(0);
__set_MSP(stack_adr);
SCB->VTOR = (USER_FLASH_START & 0x1FFFFF80);
boot_jump(USER_FLASH_START);
}
2)使用#define USER_FLASH_START 0x8000
void JumpToAppAt(unsigned int * vtbp)
{
__disable_irq();
__set_MSP(vtbp[0]); // load SP
((void (*)(void)) vtbp[1])(); // go...
}
main()
{
bool t = true;
while(t)
{
...WORKING CODE...
uart << "Hello, World!!!";
}
uart << "END";
__disable_irq();
__set_CONTROL(0);
__set_MSP(stack_adr);
SCB->VTOR = (USER_FLASH_START & 0x1FFFFF80);
JumpToAppAt((unsigned int *) USER_FLASH_START);
}
主程序无法启动(。
我认为什么不起作用MAIN_PROGRAMM并尝试过:
3)使用#define USER_FLASH_START 0x0
,但没有任何改变。
答案 0 :(得分:0)
LPC2xxx基于ARM7,而LPC4078基于Cortex-M4。关于重置向量,我看到您已经调整为使用向量表的第二项。请确保向量表中存储的地址的LSB设置为1,即 bit [0] = 1 ,因为该位指示Thumb指令,而Cortex-M4处理器仅支持Thumb指令。 (reference)