如何在lpc4078上跳转到Keil的ADDRESS?

时间:2015-07-23 14:34:47

标签: arm keil lpc

我有引导程序,在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,但没有任何改变。

1 个答案:

答案 0 :(得分:0)

LPC2xxx基于ARM7,而LPC4078基于Cortex-M4。关于重置向量,我看到您已经调整为使用向量表的第二项。请确保向量表中存储的地址的LSB设置为1,即 bit [0] = 1 ,因为该位指示Thumb指令,而Cortex-M4处理器仅支持Thumb指令。 (reference