TI中文支持网
TI专业的中文技术问题搜集分享网站

msp430 复位问题

msp430复位方式有多种,这些复位方式的结果不一样。

平台430f5659,我在其上做一个boot程序与应用程序跳转的实验,boot程序使用430的物理中断,应用程序另开辟中断向量表,应用程序的起始点为0x8000,即flash的起始点。

在应用程序中使用asm("mov &0xFFFE, PC");汇编指令产生系统复位从而跳转到boot程序,在boot中擦除flash然后用串口重新下载应用程序。

这时问题来了,从应用程序跳转到boot后,擦除flash时只能擦一个segment,后面程序就跑飞了。

如果我在应用程序中采用掉电复位的方式,则进入boot后擦除flash就没有这个问题。

我怀疑两种复位方式的不同导致结果的差别,具体原因我想不明白。

请大家看看这个怎么解决?

kqian0327:

你好,

我看你描述有点模糊,你的boot程序和应用程序都是在main flash

应用程序起始地址是0x8000?

那boot程序起始地址是?

你所谓的boot程序是自己的boot程序还是5XX的BSL程序?

你描述的两个不同跳转方式我还是没看明白,可不可以用个框图说明问题?

John C Smith:

回复 kqian0327:

boot程序与app(应用程序)都在main flash,boot是自己写的,不是bsl。

将flash地址的0xe000到0xffff这一段给boot用,其余的给app用。

boot程序实际是系统的主程序,系统复位后会先进入boot,再从boot跳转到app,可以认为app是boot的一个子程序。

问题出在擦除flash那一步,不同的复位方式导致擦除的不同结果。

kqian0327:

回复 John C Smith:

你好,

我怀疑是不是在不同boot方式下,reset复位向量已经被修改的原因造成。

不知道你这边方便把你的工程文件发给我在实验室调试一下吗?

John C Smith:

回复 kqian0327:

其实这个问题的核心就是软件复位与掉电复位的区别,我没有找到区别。或许我关注的点是错的?

怪异的地方是软件复位后(比如软件bor),擦除flash时擦完第一个segment就会停止,这个问题目前还没有解决。

kqian0327:

回复 John C Smith:

你好,

其实我也很奇怪为什么擦写完一个segment就会停止。

看起来怪怪的。

shui liu1:

回复 kqian0327:

我也遇到一个类似问题,就是先把整个Flash擦除,第一次通过串口升级可以写入成功,但是写完Flash后跳转到应用程序那条语句asm(" mov &0xF9FE, PC;");就没有跳转,其中0xF9FE是应用程序的复位地址,不知道什么原因,单片机用的MSPF5340,BOOT程序如附件所示,请大侠们分析下原因,不胜感激。

John C Smith:

回复 shui liu1:

可否一并上传你的xcl文件

shui liu1:

回复 John C Smith:

升级程序和应用程序的xcl文件均已上传,麻烦您帮忙看看问题何在,谢谢。

John C Smith:

回复 shui liu1:

1  应用程序复位向量地址是

-Z(CODE)INTVEC=F980-F9FF-Z(CODE)RESET=F9FE-F9FF

看你原来是这样设置的,没有问题。

2 你下载速率太高了,改成2400bps试试,应该没啥问题。

Lichen Wang:

John C Smith

msp430复位方式有多种,这些复位方式的结果不一样。…

在应用程序中使用asm("mov &0xFFFE, PC");汇编指令产生系统复位从而跳转到boot程序,…

從軟件迫使復位,使用 asm("mov &0xFFFE, PC") 不是一個很好的辦法。

我建議你設置在 PMMCTL0 寄存器中的 PMMSWBOR 或 PMMSWPOR。

赞(0)
未经允许不得转载:TI中文支持网 » msp430 复位问题
分享到: 更多 (0)