这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » MSP430 关于MSP430自编程的实现

共2条 1/1 1 跳转至

MSP430 关于MSP430自编程的实现

院士
2006-09-17 18:14:16     打赏
MSP430 关于MSP430自编程的实现



关键词: MSP430     关于     编程     实现    

院士
2006-12-22 22:43:00     打赏
2楼
问 这几天仔细搜索了坛子里关于程序在线升级的实现方法,觉得网友提出的将程序分成BIOS和用户程序两个区域的方法比较符合实际。参考这个思路,我基本成功实现了在线升级功能。
0x1100~0x11ff 用户程序中断向量表备份区
0x1200~0x13ff BIOS程序中断向量表备份区,中断向量表实际范围是0xffe0~0xffff共32个字节
0x1400~0x19ff BIOS程序,运行升级程序用的通信协议,包括加密算法。
0x2000~0xfdff 用户程序
0xfe00~0xffff 这512字节属于最后一个页,除了中断向量实际程序长度也没有到这里。
BIOS程序和 用户程序需要用两个工程文件分别编译,我是在AQ430下编译的,分别修改AQL文件,定义程序起始地址为0x1400和0x2000。
裸机下,通过JTAG或BSL写入BIOS程序。如果在BIOS程序下,通过串口将用户程序从0x2000逐一写入,注意奖接收到的用户程序的中断向量表先写到地址0x1100~0x11ff。从BIOS程序跳到用户程序之前,做如下判断:
a.检查用户程序中断向量表备份区0x1100~0x11ff 中断向量表是否正确,如果正确进行下一步;
b.将当前BIOS程序中断向量表0xffe0~0xffff共32个字节读出并且备份到0x1200~0x13ff;
c.将0x1100~0x11ff用户程序中断向量表写到0xffe0~0xffff,最后是放狗,死循环。

用户程序下进入BIOS,是根据串口接收到相应命令执行的,例如收到“UPDATE”,那么做如下准备工作:
a.检查BIOS程序中断向量表备份区0x1200~0x13ff 中断向量表是否正确,如果正确进行下一步;
b.将当前用户程序中断向量表0xffe0~0xffff共32个字节读出并且备份到0x1100~0x11ff;
c.将0x1200~0x13ff用户程序中断向量表写到0xffe0~0xffff,最后是放狗,死循环。

最后实际运行结果是,由BIOS程序进入用户程序每次都成功。但从用户程序进入BIOS则不顺利,有时可以顺利跳转,但更多则不能自动进入BIOS,需要断电后再上电才可以进入BIOS。这说明中断向量表的处理是正确的,就是复位不知有什么问题,非要断电才能确保每次成功。不知谁有类似经历?帮助指点一下。 1: 现场升级不都是要从用户程序到BIOS,再从BIOS到用户程序吗?这个才是最主要的吧?
还有定义程序起始地址为0x1400是怎么做的?谢谢

这么好的帖子,倘若别人看不到,那么不是浪费楼主的心血吗?下定决心,我要把这个帖子一直往上顶,往上顶!顶到所有人都看到为止! 2: 从用户程序进入bios程序不用这么复杂吧,为什么要这么写?我觉得可以用函数调用来实现嘛,
main()
{
while(1)
{
........
.......
if(UPDATE)
downsoft();
.......
....}



void downsoft()
{

在这设置串口参数,进行更新程序的接收嘛!
}

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]