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.

MSP430F5438A中断向量存放在Flash和RAM的问题!!!

Other Parts Discussed in Thread: MSP430F5438A

我在调试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:相关代码见附件

http://www.deyisupport.com/cfs-file.ashx/__key/communityserver-discussions-components-files/55/2275.main.c

  • 楼主你好,请问你在修改SYSRIVECT=1之前,有没有设置中断向量表在RAM中的地址?如果有设置,是否设置的地址跟已有的其他RAM空间冲突了?

    你的程序看起来似乎是运行出现了内存异常然后复位了。

  •     没有设置过。中断向量表在RAM中的地址不是固定从RAM的TOP地址依次存放的吗?

  • 您好,需要定义位置的。如果不定义,TOP地址可能会用来存放stack,stack的数据可能会跟vector的数据相互干扰,就会导致程序跑飞

  • 这里有一份5438A做IAP的参考代码,相信你也是用这个功能来做IAP功能的吧!

    http://processors.wiki.ti.com/index.php/File:MSP430F5438A_RAM_INT_VECT_CCS.zip

    供参考。

  • 哈。我现在的代码就是参考这个来写的啊!

    而且我把这个参考代码用CCS编译并烧录到5438A的Demo板上,根本跑不起来啊!

  • 楼主你好,你跟踪一下运行设置SYSRIVECT = 1之后,哪块内存发生变化了?看看是否跟堆栈的地址冲突了?

  • 如何定义呢?

    不是设置 SYSRIVECT = 1 之后,RAM的TOP就用来存放中断向量表了吗?Datasheet里面就是这样写的啊

  • 您好,我在做5418A的IAP,有几个问题想请教:

    1、有的资料说,由于MSP430是16位的单片机,做IAP时不支持0xFFFF以上的地址,是这样吗?

    2、5418A的FLASH共128K,

    其中IAP部分占用:0x5c00~0x7BFF,中断放在RAM中。

    APP部分占用其他部分,即:0X7C00~0X25BFF,中断向量放在默认地址,即0xFFE0~0XFFFF中()。

    这样可以不?如果不可以那应该怎么做?

    3、运行后发现IAP程序运行正常,用串口往进灌入APP程序后发现复位地址:0XFFFE中的量居然是0x5c00。即APP程序的0X7C00没有写进去,不知道为什么。

    反正 不能正常运行。

    代码请见附近,您有什么好的建议?

    邮箱:gh_1269@qq.com

    5438_iap.rar
x 出现错误。请重试或与管理员联系。