DSPIC33F 系列单片机是美国微芯公司( Microchip) 推出的一款高性能单片机, 它将数字信号处理器( DIGItal Signal Pr ocessor, DSP) 的高速运算能力与单片机的控制特性无缝地集成在一起, 为嵌入式系统设计提供了高性价比的单芯片、单指令流的解决方案, 在音频处理、视频处理及工业控制等方面得到了广泛应用。但是在实际应用中, 由于客户需求变化或程序BU G 修改等原因, 经常出现需要使单片机应用程序升级的情况, 本文利用dsPIC33F 单片机运行时的自编程( RunTime SelfProgr amming , RTSP) 特性, 实现了基于该单片机应用程序的升级功能。
1 基本原理
dsPIC33F 系列单片机提供了两种方式用于对其内部程序存储器进行编程: 在线串行编程( InCir cuit Serial Progr amming , ICSP ) 和运行时自编程( RunTimeSelfProg ramming, RT SP)。ICSP 使用5 根线对单片机编程, 主要用于产品调试或生产过程中, 显然不适合用于产品运行时的程序升级。RTSP 是通过使用TBLRD ( 表读) 和T BLWT ( 表写) 指令来完成的, 使用RT SP 可以一次将64 条指令( 192 B) 的块( 或" 行") 或单个程序存储字写入程序存储器, 也可以一次擦除512 条指令( 1 536 B) 的块( 或"页") , 由于该方法采用程序指令实现了自编程, 可应用于产品运行时的程序升级, 因此本文采用RT SP 方法实现基于dsPIC33F 系列单片机的应用程序升级功能。程序升级的实质是对程序存储器内容的更新, 所以有必要先了解一下dsPIC33F 单片机的程序存储器内部结构。
1. 1 dsPIC33F 单片机的程序存储器内部结构
dsPIC33F 单片机的程序存储器结构如图1 所示。
一般情况下," 复位地址"的内容为全0, 单片机复位后均从程序存储器地址0 的位置上开始执行, 即从图1中的"GOTO 指令"位置开始执行。在这里存放了一个跳转指令, 直接指向用户程序的首址, 默认情况下该位置的指令为" GOT O 0x 200" , 即默认跳转到首址为0x 200 的用户程序( 图1 中的"用户程序存储空间") 开始执行。dsPIC33F 单片机具有2 个中断向量表, 即"中断向量表"和"备用中断向量表" , 地址分别从0x 000004~ 0x0000FF 和0x 000100~ 0x0001FF 这两个中断向量表允许使用不同的中断服务程序来处理每个中断源。程序升级功能正是基于程序存储器内部结构的以上特性而实现。