对MSP430系列单片机进行编程的办法有以下3种:运用JTAG接口,运用BSL固件和运用用户自定义的晋级固件。因为运用自定义晋级固件进行程序晋级的办法比较灵敏,且用处广泛,因而本文将对其作要点介绍。
1 运用JTAG接口
MSP430系列的单片机都集成了JTAG接口,该接口完结了遵从IEEE STD1149.1规则的测验拜访端口状况机(TAP Controller)。它运用一个4线串行接口(TEST用于引脚较少的芯片)。数据或指令从TDI(测验数据输入)移入;串行数据从TDO(测验数据输出)移出;TCK(测验时钟)作为时钟信号输入;TMS(测验形式挑选)信号操控TAP操控器的状况。运用该接口可移入指令和数据,然后操控方针芯片的地址线和数据线,到达读/写方针芯片Flash和仿真调试的意图。别的,TI公司推出了新式的调试接口——SPY-BI-WIRE。它选用两线制,一根为数据线(双向),另一根为时钟线。
运用该接口的长处是,无须规划额定的电路和程序,选用仿真器即可下载程序。缺陷是一旦用户为了确保代码的安全,烧断了JTAG的熔丝,那么就永久性地破坏了该接口,也就不能再运用该接口了。
2 运用BSL固件
BSL是Bootstrap Loader的缩写,中文称号是“程序装载器”。它本质是固化在芯片中的一段通讯程序(占用OC00h~1000h的地址空间),运用它可完结对Flash的擦除和读/写。因为它是固化在芯片中的,因而不用忧虑被更改或丢掉。
该接口运用5根线:GND、TX(P1.1/P1.0)、RX(P2.2/P1.1)、RST和TCK(TEST)。在RST和TCK(TEST)上加特定的电平时序信号,即可发动BSL程序,然后完结与方针芯片的通讯。通讯的字符格局是8个数据位、1个中止位和1个偶校验位。开始波特率为9 600 bps(BSL 1.6版别可更改为38 40O bps)。BSL协议要求首要接纳一个80h字符用于同步时钟;然后发送应对字符90h;最终接纳8个字符,并依据指令跳转到相应的处理例程。BSL程序的C言语描绘如下:
其完结细节或许因版别不同而有所改变。若用户想运用它来完结程序晋级,则可见参考文献[2]和[3]。运用BSL程序进行晋级,长处是节约代码空间,用户无须完结自己的晋级固件,并且现在已有许多现成的BSL晋级东西;缺陷是须预留BSL接口,且需求现场接线。
3 运用用户自定义晋级固件
MSP430系列单片机的Flash存储器模块是一个可独立操作的物理存储单元。悉数模块安排在同一个线性地址空间中,存储器被分为多个512字节的段(信息段巨细为128/64字节)。各段可独自擦除,并且在正常作业电压下程序可对Flash进行擦写操作,因而特别合适在线程序晋级(In Systerrl Programming)。
自定义晋级固件便是在程序中内置一段用于晋级使用程序的代码,即可运用现有通讯接口进行长途代码的晋级。其完结原理是在方针芯片中放置两段代码:一段为使用程序;另一段为晋级程序。两者的地址段不堆叠,这样就能够运用晋级程序擦除使用程序,并写入新的代码。
3.1 引导程序
复位后先进入引导程序,由它来决议进入晋级程序或使用程序。引导程序的含义在于当使用程序不存在或呈现错误时能直接进入晋级程序,然后确保若晋级不成功则可进行再次晋级。
引导程序的描绘如下:
其间:ResetVectorvalid()函数用于检测使用程序是否存在或是否有用。完结能够检测EnterApplication的进口地址是否合法,一种简略的完结是:
#define ResetVectorValid() (RcsctVector!=FFFF)
其间:ResetVetor为使用程序的进口地址,该地址一般放在一个固定的地址中,晋级程序后再修正该进口地址。Application()为使用程序,它若正常履行则不会回来,只要在接纳到晋级指令后才返同。可在Application()中运用return句子进入晋级程序。
Updata()为晋级程序,其进口处有必要加检测指令,以承认正常进入晋级程序。进入晋级程序后,通讯端应先发送擦除指令,擦除原有代码;然后发送晋级代码更新Flash。假如具有外部扩展存储器或用户程序较小,那么可先接纳整个程序段,若校验正确再写入,这样可靠性会更高。
这里有个战略便是,最早擦除包括ResetVector的块,最终写入Resetvector的值,这样能够尽量确保不会进入不完整的使用程序。
3.2 使用程序的编写
使用程序的编写投有大的改变,只需在通讯协议中参加自定义的一个晋级指令,以进入晋级程序。别的,须更改链接文件(*.XCL),指定使用程序的地址规模。地址规模为2500h~F7DCh的使用程序如下(用//注释掉的为默许设置):
修正结束后将该文件添加到工程中。编译后的代码即可作为晋级代码。
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系列,也可使用到相似的单片机系列中。