boot 0
->app
->boot 1
跳转
芯片:LPC54608 J512
测试平台: EasyArm LPC54608
SDK: LPCXpresso54608-usart_polling 2.7.0
详细资料:请关注公众号《跳跃的影子》并发送“ lpc54608双boot跳转 ”获取。
核心代码
/*
* 跳转到指定的地址
*/
void boot_app_exec(const void *addr)
{
const uint32_t *app_vectors;
uint32_t app_sp;
void (*app_entry)(void);
app_vectors = (const uint32_t *)addr;
app_sp = app_vectors[0];
app_entry = (void (*)(void))app_vectors[1];
/* disable all interrupt sources */
NVIC->ICER[0] = 0xFFFFFFFF;
NVIC->ICER[1] = 0xFFFFFFFF;
/* clear all pending interrupts */
NVIC->ICPR[0] = 0xFFFFFFFF;
NVIC->ICPR[1] = 0xFFFFFFFF;
/* diable sytick and clear interrupt */
SysTick->CTRL = 0;
SCB->ICSR |= SCB_ICSR_PENDSTCLR_Msk;
/* set up vector table */
SCB->VTOR = (uint32_t)app_vectors;
/* set up stack pointer */
__set_MSP(app_sp);
__enable_irq();
app_entry();
}
- 代码参考:
程序说明
Boot 0
- 起始地址:0x0000 0000U。
- 代码范围:0x0000 0000U - 0x0x0000 FFFFU。
- 打印调试信息,延时 3秒 后跳转到
APP
。
APP
- 起始地址: 0x0002 0000U。
- 代码范围: 0x0002 0000U - 0x0007 FFFFU。
- 打印调试信息,实现串口自收发。
- 当检测到指定字符(
b
)后,跳转到BOOT1
。
Boot 1
- 打印调试信息后啥也不干。
评论区