MCU中断向量表的重映射

Coretx M0 和 Cortex M3/4 的中断向量表映射有所不同。
M3/M4 可以通过设置 SCB->VTOR 寄存器完成向量表的映射,而M0 没有这样的寄存器。

M0 中断向量表的映射,就是从哪里执行APP。
如果APP 在FLASH中基于XIP执行,即将FLASH 的基地址重映射到0x00000000地址上,则中断向量表就在Flash中。
如果APP 在RAM中运行,(前提是RAM APP 是ROM 中的bootloader搬运过去的)即将RAM的基地址重映射到0x00000000地址上,则中断向量表就在RAM中。

M3/4 修改SCB->VTOR寄存器实现向量的重映射。
他的优势在于,可以将向量表映射到任意自定义的合理地址上。
举例说明:
Bootloader 放置在Flash的0x80000000地址。
APP 放置在Flash的0x80002000地址或者放置在0x80004000地址。

APP中地址向量表中映射如下:

点击查看代码
/* APP 放置在Flash的0x80002000地址 */
void SystemInit(void)
{
  SCB->VTOR = 0x80002000 | VECT_TAB_OFFSET;
}

/* APP 放置在Flash的0x80004000地址 */
void SystemInit(void)
{
  SCB->VTOR = 0x80004000 | VECT_TAB_OFFSET; 
}
posted @ 2024-07-12 13:16  蜗牛等等  阅读(105)  评论(0)    收藏  举报