MSP430程序升级方案
到工程中。编译后的代码即可作为升级代码。
3.3 升级程序的编写
新建一个工程,按上述方法将升级代码定位到与应用程序不重叠的区域(如F800h~FFFFh),此时不修改:一Z(CONST)INTVEC=FFE0-FFFF
在升级程序中,将除复位中断外的所有中断映射到应用程序中。一种方法是嵌入汇编,采用汇编的定位指令ORG;另一种是写15个中断映射函数。例如:
//重新映射中断向量地址
另外也可采用动态确定中断入口地址的方法,即将中断向量地址放入约定好的RAM中。例如:
然后在应用程序中进行中断向量的映射,例如:mtvecl[TIMERA0_VECTOR/2]=Timer_A_O;即在TIMERA0中断时执行Timer_A_0()函数。这样做的优点是可在运行时动态决定中断函数的入口,如高级语言中的虚函数(Virtual Function)。
这两个函数块编写完毕后即可进行工程测试。
3.4 应用程序与升级程序同时完成
如果需要两个函数在一个工程里完成,那么除了修改链接文件外,还须注意以下几点:
①将升级程序的所有函数定位到升缴程序空间,即在甬数前面加如下定位指令:
#pragma locanon="UPDATECODE" //UPDATECODE为升级程序所在段的名称
②修改函数返回调用的例程。当函数返回时会调用弹出寄存器的默认例程,而这些例程可能并不在升级程序的地址空问内。一种解决方法是利用编译环境生成的LST文件(汇编代码),逐个修改函数返回时调用的弹出寄存器例程,即可保证两者代码独立。这样做的缺点是每次更改C语言代码后,须重新修改汇编代码,比较繁琐。另一种方法是考虑到升级程序的工作就是接收和发送数据,一般无须使用中断。这样就可以在升级函数前加入一monitor编译指令.指明该函数为原子操作。这类函数入口处先压入SR并禁止中断,返回时使用RETI返回。此时编译器并不调用例程弹出保存的寄存器,而是根据进栈情况逐个弹出寄存器。
③更改switch语句。使用switch语句时编译器也会产生默认例程调用。很难屏蔽掉,故只有将switch修改为多个判断语句。
结语
本文对MSP430列单片机的升级方案进行了详细介绍,读者只须按照一定步骤,即可轻松实现远程程序升级,这在实际应用中具有重要意义;而且本文的升级方法并不仅限于MSP430系列,也可应用到类似的单片机系列中。
- 功率器件IGBT在不间断电源(UPS)中的应用 (06-26)
- 功率电子技术在汽车系统中的应用(05-11)
- 车用电控设备(50w)散热器的设计与测试(05-14)
- 专家分享:高效高可靠LED驱动设计的心得(04-12)
- 变频器逆变模块损坏的起因及处理方法(05-02)
- 功率元器件应用秘诀,采用专用MOSFET提高效率(02-22)