DSP应用系统开发实例:基于TMS320F281x和C语言
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3 实例:用CSS3.3开发一个音频信号采集、处理输出的程序

2.3.1 实例目的

①掌握Code Composer Studio 3.3的安装和配置步骤过程。

②了解DSP开发系统和计算机与目标系统的连接方法。

③了解Code Composer Studio 3.3软件的操作环境和基本功能,了解TMS320C28xx软件开发过程。

a.学习创建工程和管理工程的方法。

b.了解基本的编译和调试功能。

c.学习使用观察窗口。

d.了解图形功能的使用。

2.3.2 实例原理

①软件集成开发环境(Code Composer Studio 3.3):完成系统的软件开发,进行软件和硬件仿真调试。它也是硬件调试的辅助手段。

②开发系统(ICETEK5100USB或ICETEK5100PP):实现硬件仿真调试时与硬件系统的通信,控制和读取硬件系统的状态和数据。

③评估模块(ICETEKF2812-A等):提供软件运行和调试的平台和用户系统开发的参照。

④Code Composer Studio 3.3主要完成系统的软件开发和调试。它提供一整套的程序编制、维护、编译、调试环境,能将汇编语言和C语言程序编译连接生成COFF(公共目标文件)格式的可执行文件,并能将程序下载到目标DSP上运行调试。

⑤用户系统的软件部分可以由CCS建立的工程文件进行管理,工程一般包含以下几种文件。

a.源程序文件:C语言或汇编语言文件(*.ASM或*.C)。

b.头文件(*.H)。

c.命令文件(*.CMD)。

d.库文件(*.LIB,*.OBJ)。

2.3.3 实例步骤

①设置Code Composer Studio 3.3在软仿真(Simulator)方式下运行。

②启动Code Composer Studio 3.3。

③选择菜单Debug→Reset CPU。

成功启动CCS后会出现如图2.18所示窗口。

注:下面窗口是打开了所有CCS软件功能后显示的。

图2.18 CCS软件界面介绍

实际上打开的CCS界面没有图2.18所示的那么多内容。原始的刚打开的CCS界面包含如图2.19所示的基本元素。

图2.19 实际的CCS软件界面

图2.19中的其他部分都是在工作中根据需要打开的。而且图像和图形显示窗口打开时,还要做一些相关的参数设置才能正常使用。

④创建工程。

a.创建新的工程文件。

b.选择菜单“Project”的“New…”项。如图2.20所示。

图2.20 创建工程文件

如图2.21所示,按编号顺序操作建立volume.pjt工程文件。

图2.21 新建工程

展开主窗口左侧工程管理窗口中“Projects”下新建立的“volume.pjt”,其各项均为空。

c.在工程文件中添加程序文件。

选择菜单“Project”的“Add Files to Project”项;在“Add Files to Project”对话框中选择文件目录为C:\ICETEK\F2812\DSP281x_examples\Lab0101-UseCCS,改变文件类型为“C Source Files(*.c;*.ccc)”,选择显示出来的文件“volum.c”;重复上述各步骤,添加C:\ICETEK\F2812\DSP281x_examples\Lab0101-UseCCS\volume.cmd文件到volum工程中;添加C:\CCStudio_v3.3\c2000\cgtools\lib \rts2800_ml.lib。

d.编译连接工程。

选择菜单“Project”的“Rebuild All”项,或单击工具条中的按钮;注意编译过程中CCS主窗口下部“Build”提示窗中显示编译信息,最后将给出错误和警告的统计数。

⑤编辑修改工程中的文件。

a.查看工程文件。

展开CCS主窗口左侧工程管理窗中的工程各分支,可以看到“volume.pjt” 工程中包含“volume.h”、“rts2800.lib”、“volume.c”和“volume.cmd”文件,其中第一个为程序在编译时根据程序中的“include”语句自动加入的。

b.查看源文件。

双击工程管理窗中的“volume.c”文件,可以查看程序内容。可以看到,用标准C语言编制的程序,大致分成几个功能块。

头文件。描述标准库程序的调用规则和用户自定义数据、函数头、数据类型等。具体包含哪一个头文件,需要根据程序中使用了哪些函数或数据而定。比如:如果程序中使用了printf函数,它是个标准C提供的输入/输出库函数,选中“printf”关键字,按“Shift+F1”会启动关于此关键字的帮助,在帮助信息中可发现其头函数为stdio.h,那么在此部分程序中需要增加一条语句:#include "stdio.h"。

工作变量定义。定义全局变量。

子程序调用规则。这部分描述用户编制的子程序的调用规则。也可以写到用户自己编制的.h文件中去。

主程序。即main()函数。它可分为两部分:变量定义和初始化部分、主循环部分。主循环部分完成程序的主要功能。

用户自定义函数。

这个程序是一个音频信号采集、处理输出的程序。程序的主循环中调用自定义的函数read_signals来获得音频数据并存入输入缓存inp_buffer数组;再调用自定义函数write_ buffer来处理音频数据并存入输出缓存;output_signals将输出缓冲区的数据送输出设备;最后调用标准C的显示信息的函数printf显示进度提示信息。整个系统可以完成将输入的音频数据扩大volume倍后再输出的功能。

read_ signal子程序中首先应有从外接AD设备获得音频数据的程序设计,但此例中由于未采用实际AD设备,就未写相应控制程序。此例打算用读文件的方式获得数据,模拟代替实际的AD输入信号数据。

Write_ buffer子程序中首先将输入缓冲区的数据进行放大处理,即乘以系数volume,然后放入输出缓冲区。

output_ signals函数完成将处理后的设备输出的功能,由于此例未具体操作硬件输出设备,故函数中未写具体操作语句。

双击工程管理窗中的“volume.h”文件,打开此文件,可以看到其中有主程序中要用到的一些宏定义如“BUF_ SIZE”等。

volume.cmd文件定义程序所放置的位置,此例中描述了ICETEK-F2812-A评估板的存储器资源,指定了程序和数据在内存中的位置。

比如:它首先将ICETEK-F2812-A评估板的可用存储器分为八个部分,每个区给定起始地址和长度(区域地址空间不允许重叠);然后指定经编译器编译后产生的各模块放到哪个区。这些区域需要根据评估板硬件的具体情况来确定。

c.编辑修改源文件及编译程序。

打开“volume.c”,找到“main()”主函数,将语句“input=inp_buffer;”最后的分号去掉,这样程序中就出现了一个语法错误;重新编译连接工程,可以发现编译信息窗口出现发现错误的提示;双击红色错误提示,CCS自动转到程序中出错的地方;将语句修改正确(将语句末尾的分号加上);重新编译;注意,重新编译时修改过的文件被CCS自动保存。

d.修改工程文件的设置(见图2.22)。

图2.22 修改工程文件

通过以上设置操作,重新编译后,程序中的用户堆栈的尺寸被设置成1024个字。

⑥基本调试功能。

a.下载程序:执行File→Load Program,在随后打开的对话框中选择刚刚建立的C:\ICETEK\F2812\DSP281 x_examples\Lab0101-UseCCS\Debug\volume.out文件。

b.设置软件调试断点:在项目浏览窗口中,双击volume.c激活这个文件,移动光标到main() 行上,单击鼠标右键选择Toggle Breakpoint或按“F9”设置断点(另外,双击此行左边的灰色控制条也可以设置或删除断点标记)。

c.利用断点调试程序:选Debug→Run或按“F5”运行程序,程序会自动停在main()函数上。

按“F10”执行到write_ buffer()函数。

再按“F11”,程序将转到write_ buffer函数中运行。

此时,为了返回主函数,按“Shift+F11”完成write_ buffer函数的执行。

再次执行到write_ buffer一行,按“F10”执行程序,对比与“F11”执行的不同。

提示:在执行C语言的程序时,为了快速地运行到主函数调试自己的代码,可以使用Debug→Go main命令,是较为烦琐的一种方法。

⑦使用观察窗口。

a.执行View→Watch Window打开观察窗口。

b.在volume.c中,用鼠标双击一个变量(比如num),再单击鼠标右键,选择“Quick Watch”,CCS将打开Quick Watch窗口并显示选中的变量。

c.在volume.c中,选中变量num,单击鼠标右键,选择“Add to Watch Window”,CCS将把变量添加到观察窗口并显示选中的变量值。

d.在观察窗口中双击变量,则弹出修改变量窗口。此时,可以在这个窗口中改变变量的值。

e.把st:变量加到观察窗口中,点击变量左边的“+”,观察窗口可以展开结构变量,并显示T结构变量的每个元素的值。

f.把st:变量加到观察窗口中;执行程序进入write_buffer函数,此时num变量超出了作用范围,可以利用Call Stack窗口察看在其他函数中的变量。

选择菜单View→Call Stack打开堆栈窗口。

双击堆栈窗口的main()选项,此时可以察看num变量的值。

⑧文件输入/输出(见图2.23)。

图2.23 设置File I/O文件

下面介绍如何从PC机上加载数据到DSP上。用于利用已知的数据流测试算法。

在完成下面的操作以前,先介绍Code Composer Studio的Probe(探针)断点,这种断点允许用户在指定位置提取/注入数据。Probe断点可以设置在程序的任何位置,当程序运行到Probe断点时,与Probe断点相关的事件将会被触发,当事件结束后,程序会继续执行。在这一节里,Probe断点触发的事件是:从PC机存储的数据文件中的一段数据加载到DSP的缓冲区中。

a.在真实的系统中,read_ signals函数用于读取A/D模块的数据并放到DSP缓冲区中。在这里,代替A/D模块完成这个工作的是Probe断点。当执行到函数read_ signals时,Probe断点完成这个工作。

在程序行read_ signals(input);上单击鼠标右键选择“Toggle breakpoint”,设置软件断点。

再在同一行上单击鼠标右键,选择“Toggle Probe Point”,设置Probe断点。

b.执行以下操作。

此时,已经配置好了Probe断点和与之关联的事件。

⑨图形功能简介。

下面我们使用CCS的图形功能检验音频信号采集、处理输出的程序的结果。首先进行下面的设置操作(见图2.24)。

图2.24 设置图形显示功能

a.在弹出的图形窗口中单击鼠标右键,选择“Clear Display”。

b.按“Alt+F5”运行程序,观察input窗口的内容。

⑩选择菜单File→workspace→save workspace As... ,输入文件名SY.wks。

退出CCS。

2.3.4 实例结果

通过对工程文件“volume”的编译、执行后得到一个音频信号采集、处理输出的程序结果的图形如图2.25所示。

图2.25 实例结果图形