我想把程序放在RAM中运行,通过在IAR中设置ICF文件已经达到目的。
目前想把中断向量表一并放入RAM。我在MAIN函数中增加语句,SCB->VTOR|=(1<<29)。发现没有效果,请问这是BUG还是有其他地方需要设置?(MSP430的寄存器是SYSCTL,在MSP432中就变成了VTOR)
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.
我想把程序放在RAM中运行,通过在IAR中设置ICF文件已经达到目的。
目前想把中断向量表一并放入RAM。我在MAIN函数中增加语句,SCB->VTOR|=(1<<29)。发现没有效果,请问这是BUG还是有其他地方需要设置?(MSP430的寄存器是SYSCTL,在MSP432中就变成了VTOR)
谢谢您的关心。
我目前就是更改了一个寄存器的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前不能有中断来)