cortex-m0芯片中断向量表重映射问题

士兰微sc32f5664芯片,cortex-m0内核;在做bootloader时需要进行中断向量表重映射,但是这个芯片没有这个功能;

目前是把应用程序中断向量表保存到RAM区,也没有像32芯片SYSCFG->CFGR1寄存器,告知芯片到RAM区寻找中断源;

想问一下该如何告知内核发生中断时,去RAM区寻找保存的中断向量源;在boot loader与应用程序都可以使用中断

在bootloader的中断里读取中断号,自己加一个偏移地址然后跳转到app的向量表
如果bootloader也要用中断的话,加一个标志位判断使用app的向量表还是bootloader的向量表
M0没办法,只能这么麻烦,而且速度也慢。
下面是一个例子

#define InterruptVectorTableOffset 0x20000000

__asm void IRQHandlersRemap(void)
{
    MRS        R0, IPSR
    LSLS    R0, R0, #0x02
    LDR        R1, =InterruptVectorTableOffset
    ADDS    R1, R1, R0
    LDR        R1, [R1]
    BX        R1
    nop
}

#define ALIAS(x) __attribute__ ((alias (#x)))
void NMI_Handler(void) ALIAS(IRQHandlersRemap);
void HardFault_Handler(void) ALIAS(IRQHandlersRemap);
void SVC_Handler(void) ALIAS(IRQHandlersRemap);
void PendSV_Handler(void) ALIAS(IRQHandlersRemap);
void SysTick_Handler(void) ALIAS(IRQHandlersRemap);
void EXTI0_IRQHandler(void) ALIAS(IRQHandlersRemap);
void EXTI1_IRQHandler(void) ALIAS(IRQHandlersRemap);
void EXTI2_IRQHandler(void) ALIAS(IRQHandlersRemap);
void EXTI3_IRQHandler(void) ALIAS(IRQHandlersRemap);
void EXTI4_IRQHandler(void) ALIAS(IRQHandlersRemap);
void EXTI5_IRQHandler(void) ALIAS(IRQHandlersRemap);
......

在跳转到 app 之前需要,将中断向量表定义在 app 运行的起始位置比如 0x00006000