本帖最后由 johdon23 于 2015-3-5 10:46 编辑
我在调试MSP430F5438A的在线升级功能时,遇到如下问题:
由Datasheet知道,MSP5438A可以将中断向量设置为保存在Flash或者RAM中(由SYSCTL寄存器的SYSRIVECT位来控制,如附图所示)。
为了在Flash不同的BANK区运行中断服务程序, 我将中断向量设置为保存在RAM中,即设置SYSRIVECT = 1。
结果发现程序无**常运行。
通过仿真,跟踪代码发现,当程序运行到使能全局中断 __bis_SR_register(GIE); 之后,
PC跳转到0x0000,接下来执行到0x0004地址时,里面是条跳转指令 JMP (0x0004),
程序最后在0x0004这个地址陷入死循环!!!
同样的程序,如果将中断向量设置为保存在Flash中,即将SYSRIVECT = 1屏蔽,就能够正常运行!
PS:相关代码见附件
|