This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

有关MSP432中断向量重定义问题



我想把程序放在RAM中运行,通过在IAR中设置ICF文件已经达到目的。

目前想把中断向量表一并放入RAM。我在MAIN函数中增加语句,SCB->VTOR|=(1<<29)。发现没有效果,请问这是BUG还是有其他地方需要设置?(MSP430的寄存器是SYSCTL,在MSP432中就变成了VTOR)

  • 建议上传下你的工程。看你的这句代码,貌似直接用的CMSIS的寄存器

  • 谢谢您的关心。

    我目前就是更改了一个寄存器的TBLBASE位,然后调用IAR的SIMULATOR,发现中断向量表仍然在0X00000000的位置,也有尝试修改TBL0FF位,表示偏移量,也没有任何变化。是不是还需要在别的地方设置下?(VTOR Register见图片附件)

    代码就是一个IAR自带例程,

    #include "msp.h"

    unsigned int view;
    void main(void)
    {
    volatile uint32_t i;

    WDT_A->CTL = WDT_A_CTL_PW | WDT_A_CTL_HOLD; // Stop watchdog timer
    SCB->VTOR|=(1<<29);   //这句话是我新增加的,其中SCB的定义是IAR已经定义好的,即#define SCB                 ((SCB_Type       *)     SCB_BASE      )  

    // The following code toggles P1.0 port
    P1->DIR |= BIT0; // Configure P1.0 as output

    while(1)
    {
    P1->OUT ^= BIT0; // Toggle P1.0
    for(i=10000; i>0; i--); // Delay
    }
    }

  • 后来自己解决了,VTOR寄存器确实有效。中断表设置后,表格不会自动复制到所在的RAM区,需要在ICF文件中定义。那么问题来了,RESET_HANDLE凭什么一上电进RAM的中断向量表?其实可以,因为在IAR硬件仿真中,IAR会根据ICF中的VECTOR区自动设置PC指针,所以IAR仿真时,跳开硬件,直接进入RESET HANDLE函数,所以可以在事后设置VTOR寄存器,更改中断向量表位置(前提是在设置VTOR前不能有中断来)