2、TMS320F240链接时所需的中断矢量表文件-达内教育负责整理
TMS320F240的目标文件在链接时要用到中断矢量表,中断矢量表用汇编语言编写,和具体的DSP芯片有关,假设TMS320F240的中断矢量表对应的汇编程序为BOOT.ASM,汇编后的文件名为BOOT.OBJ.
下面是一个典型的矢量表文件(假设程序名为BOOT.ASM).
.port /* 定义中断函数的名字 */
.globl _c_int0 /* 中断0对应的函数名 */
.globl _c_int1 /* 中断1对应的函数名 ,以下语句的意义相同*/
.globl _c_int2 /* 可以将中断函数名看作中断入口地址 */
.globl _c_int3 /* 矢量表的存放不需程序员干预 */
.globl _c_int4
.globl _c_int5
.globl _c_int6
.globl _c_int7
.globl _c_int8
.sect ".vectors"/*用.sect命令自定义一个块,用于存放中断矢量表 */
RSVECT B _c_int0 /* 中断0发生后,程序的跳转目的地址 */
INT1 B _c_int1 /* 中断1发生后,则跳到c_int1()函数处 */
INT2 B _c_int2 /* 意义同上,下同 */
INT3 B _c_int3
INT4 B _c_int4
INT5 B _c_int5
INT6 B _c_int6
用汇编器汇编该程序,命令形式:DSPA BOOT.ASM –V2XX 生成BOOT.OBJ文件供链接器使用.
这样,我们就可以按如下形式在C源程序中编写中断函数:
void c_intx() /* x为1-8中之一 */
{
中断程序的C语句系列;
}
注意事项:c_int0()是系统入口函数,用户不能编写.
经过上面对命令文件(CMD文件)和中断矢量表的介绍,接下来可以链接命令文件来生成所需要的OUT文件供DSP芯片执行或进行软仿真.
命令形式:DSPLNK CMD文件名 例如:DSPLNK EX1.CMD
另一种情况是,不使用CMD文件,使用缺省配置,简单介绍如下:
命令形式:DSPLNK OBJ文件名 参数
例如 DSPLNK EX1.OBJ BOOT.OBJ –O XX1.OUT –M XX1.MAP
四、程序的仿真
EMURST 仿真器复位命令
EMU2XXW EX1.OUT 载入COFF格式的二进制代码仿真运行,有关调试器的使用限于篇幅在此就不做讨论了.
五、程序的固化
程序仿真运行正确后,需要固化到FLASH ROM中,TMS320F240内部有16K字的FLASH ROM可以用来固化程序,而不需要外扩EPROM(程序不大于16K字的情况下).
TI公司提供有固化程序的软件,可以通过仿真器经JTAG口将程序写入芯片内.目前发展了一种新的固化技术,可以通过串口写入DSP芯片,特别适合于现场调试.下面介绍通过JTAG口的固化方法.
首先用EMURST命令复位调试器,然后执行下面三个批处理文件.
第一步,执行BC0.BAT 批处理文件,将FLASH ROM 清除(CLEAR),使全为0.
第二步,执行 BE0.BAT 批处理文件,将FLASH ROM 擦除(ERASE),使全为1.
以上两步不需要修改软件包中自带的这两个BAT文件.
第三步,执行BP16K.BAT 批处理文件,将自己的OUT文件写入到DSP内部的FROM中.
执行这一步之前,要先修改BP16K.BAT,将待写入的OUT文件替换成自己的OUT文件,下面看一下这个批处理文件.假设软件包的安装目录为C:\DSP,该目录下有一个子目录SRC.
prg2xx -p 240 -m 0x0006 -w 6 src\c2xx_bpx.out 要写入的OUT文件
如果要将EX1.OUT写入到DSP的FLASH中,则执行下面的命令:
prg2xx -p 240 -m 0x0006 -w 6 src\c2xx_bpX.out c:\dsp\EX1.out
经过以上步骤既完成了程序固化,可以将系统放到现场实验了.
注意:固化程序时,CPU的一定要工作在20MHz的频率下.在SRC子目录下有一个配置文件C240_CFG.I文件,读者可以根据程序说明并结合自己系统的外部晶振频率将CPU的工作频率设为20MHz(写入时的频率).
结论
本文以TMS320F240的开发为例,介绍了怎样用C语言开发DSP系统的全过程,希望对读者会有所启发和帮助.有关怎样用C语言编程使用 TMS320F240内部其他资源(如:定时/比较器、ADC、SCI、SPI、中断器)和怎样扩展DSP的外围电路等编程技术见后面的叙述.
直到接触到DSP,由于使用TI的库文件例程的缘故,对结构体,联合体等有了进一步的了解,也对一个工程变量的使用有了更深的认识.
下面对谈谈对DSP C刚入门者的一些建议:
DSP程序的定位配置--CMD文件,要求熟悉DSP的存储器结构.这一部分对接触硬件多一些的新手很容易,其实也就是配置一般的C语言编译器的一部分,比如AVR单片机的头文件,cpu选择等在DSP中就是这一部分完成.另外还要注意TI例程中对加密位,看门狗的处理.
当然是C语言的一些基础了:运算符,优先级,几个基本流程控制语句.这些无论是什么C平台运行都一样的,基础中的基础.但是也很容易因为这些基础的简单的问题,导致一些很郁闷的结果.也是因为对这些基础的概念的理解深入程度影响你的软件思想.
结构体,联合体,位域的运用,最好能有一个对比,了解运用的场合及优缺点.有了这些基础,就很容易明白TI例程的一些基本结构.
变量的作用域以及生存期,这样才能从最初的单个的C文件过渡到C工程,才能更好地了解模块化编程地基本要素,实现基础.
Q格式等的应用,因为大多数DSP都是定点的,而做运算处理的很多时候都不可避免要用到浮点数.使用Q格式才能更好的发挥dsp高速的特性.所以有人说"不会使用Q格式的DSP程序员不是优秀的程序员"!
另外我觉得如果用DSP参与控制的话,最好能熟悉一些面向对象的程序语言,比如C++.要能了解用C实现面向对象的方法.为什么呢?一是面向对象我个人觉得在写程序方面模块化等要好一些,特别是控制领域,我看过一些高手的PLC程序也是采用的面向对象的思想构件模块的,从那以后我的单片机程序才开始这样靠拢,也确实发现了一些好处.比如对那些c流程中多次要操作的资源,有时候会出现一些共用操作的位置错误.二是TI的例程中有好多地方用到了这些思想,要明白这些东西,你才能更容易理解那些例程.这一部分我推荐一本书《DSP C2000程序员高手进阶》.
数据结构知识,DSP要做运算,肯定要涉及到一些好的数据结构.才能更好的优化算法.
matlab的运用.matlab提供了强大的数学运算能力,还能对DSP结合CCS进行仿真.可以把程序员从繁琐的底层编程中解放出来.个人感觉matlab给编程思想和底层程序提供了一个连接,一个平台.
以上就是达内教育给大家做的内容详解,更多关于C++的学习,请继续关注达内教育