(2) 编辑文件:选择File-New—Source File菜单(或使用其它文本编辑器)编辑好
主程序(*.asm)、头文件(*.asm)及链接命令文件(*.cmd),并保存在D盘DSPLAB\\LAB1文件夹中。
(3) 创建工程项目:选择Project-New,出现—对话框,在project栏(第一行)填
写项目名称,并选定项目的位置(D:\\DSPLAB\\LAB1),然后单击“完成”按钮,这样就新建了一个工程项目,该项目用来管理各种文件,便于编译、调试。 注意:文件夹、文件名中不能含有汉字,且文件名第一个字母不能是数字。
(4) 添加文件:将编辑好的三个文件添加到刚建好的工程项目中,选择Project-Add
Files to Project,出现一个对话框,选择文件夹(D:\\DSPLAB\\LAB1)并选中主程序、头文件、cmd文件,单击“打开”按钮就将这三个文件添加到该工程中了。 注:此步骤可一次加入三个文件,也可重复三次,每次加入一个文件。
(5) 编译汇编程序:选择Project—Compile File,分别编译主程序及头文件,修改程
序中的错误,再编译,直到无错误出现。编译后的文件为OBJ文件。
(6) 链接:选择Project—Build或Rebuild All,链接各OBJ文件,若有错误出现应修
改错误(错误应在cmd文件中),再链接,直到无错误出现。链接生成可执行的out文件。
(7) 下载out文件:选择File—Load Program,在debuge文件夹中选中out文件(文
件名与工程项目同名),单击“打开”按钮,这样out文件就下载到DSP中了。
(8) 调试:选择debuge—Step Into 单步执行代码或者选择debuge—Run连续运行代
码(debuge—Halt停止运行)。单步运行或运行结束后选择View-Memory和View-Registers-CPU Registers/Peripheral Regs查看存储器和寄存器中的数据。如果最后的结果有错误,则应查找原因修改程序并重复步骤5 ~ 步骤8,直到结果正确为止。
五.思考题
1.头文件与主程序为什么要分为两个文件?能合为一个文件吗?
2.链接命令文件包含哪两项?各有什么作用?请试着修改链接命令文件,并编译、运行,看段、变量等的位置是否改变。
3.在单步执行程序中,为什么有些指令执行了,但是结果却没有出来,要等下面一条或几条指令执行了才能得到正确结果?
六.实验报告要求
1.简述实验步骤,填写程序运行中的结果。 2.简述七种数据寻址方式。 3.简要回答思考题。
5
实验二 汇编语言程序设计
一、实验目的
1.掌握算术运算程序的编写方法。
2.进一步了解DSP集成开发环境CCS 5000的使用方法。
二、实验条件
PC机及集成开发环境CCS5000仿真器。
三、上机实验内容
本实验编程调试小数乘法、除法、64位数加法程序。 1. 小数乘法程序参考教材P164 例5.7.1,求y5??aixi,其中:
i?1a1?0.3,a2?0.2,a3??0.4,a4?0.1,a5?0.3, x1?0.6,x2?0.5,x3?0.1,x4??0.2,x5?0.4
2.除法程序参考教材P154 例5.4.4,16384除256。
3.64位数加法程序参考教材P157 例5.4.9,0x1234567887654321+0x2222222222222222。 4.三个算法的链接命令文件及头文件相同,可参考实验一编写。 注:本实验的工程文件及其它文件要保存在D盘DSPLAB\\LAB2文件夹中。
四、实验步骤
本实验分为三个小实验,分别编写小数乘法、除法、64位数加法的主程序,并按实验一的步骤分别编译、链接、调试,记录结果。
五、思考题
1.小数乘法实验中,若x取5,6,7,8,9时,y等于多少?应保留累加器的哪一部分? 2.在DSP算法中,若除数是常数,为加快运算速度该如何实现除法运算?
六、实验报告要求
1. 简述实验步骤。
2. 编写小数乘法、除法及64位数加法的汇编程序,填写程序运行后的结果。 3.简要回答思考题。
6
实验三 FIR滤波器设计
一、实验目的
1.掌握FIR滤波器DSP实现的编程方法。
2.测试FIR滤波器的单位冲击响应,检查FIR滤波器的频率特性。
二、实验条件
1.PC机及集成开发环境CCS5000仿真器(软件、硬件仿真器均可)。 2.线性相位带通FIR滤波器的参数如下: 通带:0.2?~0.8?,带内波动<0.5db
过渡带:0.2?~0.275?,0.725?~0.8?,带内衰减>68db 滤波器级数:N=80
滤波器系数(偶对称,已转换成定点数,前40个系数h(0)~h(39)):
0xFFDC,0x001F,0x0051,0xFFE9,0xFFE6,0xFFBA,0xFFB4,0x004B,0xFFF9,0x0069,0x00A2,0xFF6F, 0xFFFE,0xFF70,0xFEF4,0x00CB,0x000B,0x00E6,0x0187,0xFEE5,0x000B,0xFE7F,0xFDBF,0x0192, 0xFFB5,0x026A,0x0368,0xFDC2,0x00C0,0xFC0A,0xFAA3,0x0347,0xFE3D,0x0747,0x09BB,0xFA3D, 0x052B,0xEB59,0xDC2A,0x2D57
3.线性相位低通FIR滤波器的参数如下: 通带:0~0.35?,阻带:04?~? 滤波器级数:N=40
滤波器系数(偶对称,只列出前20个h(0)~h(19)):
-7*32768/10000, 3*32768/10000, 14*32768/10000, 10*32768/10000, -16*32768/10000, -38*32768/10000, -8*32768/10000, 64*32768/10000, 81*32768/10000, -30*32768/10000, -169*32768/10000,-118*32768/10000, 162*32768/10000, 353*32768/10000, 83*32768/10000, -515*32768/10000,-689*32768/10000, 247*32768/10000, 2051*32768/10000,3523*32768/10000
注:以上两个滤波器至少做一个,还可以用MATLAB中的数字滤波器设计工具得到其它滤波器的系数表。
三、实验内容
除编写头文件、cmd文件外,还要采用混合编程技术编写C语言主程序及FIR滤波器汇编子程序,在C程序中调用汇编子程序(函数),函数有三个参数,即输入、输出序列的首地址及长度,函数返回值为void。
1. 编写滤波器汇编程序
采用循环缓冲区及FIRS指令编写系数对称的FIR滤波器汇编程序,入口参数为输 入序列首地址及长度、滤波器输出序列的首地址。
2. 滤波器单位脉冲响应测试
在C程序中用定义一个长度为240的int型数组,其第一个单元为32768,其余全为0。用该数组作为滤波器的单位脉冲输入,测试滤波器的单位脉冲响应特性。
7
3. 检查滤波器的频率特性
在C程序中编程产生不同频率的序列sin(wn),w=0.1?,0.2?,…,0.9?,调用FIR滤波子程序(函数),对之进行滤波处理,对比滤波器的输入、输出序列的幅度比,检查滤波器的频率特性。
4.编写头文件和cmd文件。
5.学会使用CCS的图形观察窗查看输入、输出序列的波形,具体使用方法见教材第381页图形属性对话框的设置,主要是显示类型(single time)、起始地址(即数组首地址或变量名)、数据类型(16bit signed int)、缓冲区大小(240)、显示数据大小(240)这几栏要设置。
四、实验步骤
CCS的使用方法见教材第九章(9.3节到9.6节)或有关参考书。
(1) 开机:打开计算机电源,进入Win2000系统,双击桌面上的CCS2图标,选择open——c54x simulator ,进入DSP软件集成开发环境,或者选择open——c5416 XDS进入DSP硬件集成开发环境(使用实验箱做实验,先连接好实验箱及仿真器等方可开机)。
(2) 编辑文件:选择File-New—Source File菜单(或其它编辑器)编辑好C程序(*.c)、滤波器子程序(*.asm)、头文件(*.asm)及链接命令文件(*.cmd),并保存在D盘DSPLAB\\LAB3文件夹中。
(3) 创建工程项目:选择Project-New,出现—对话框,在project栏(第一行)填写项目名称(FIRxxx),并选定项目的位置(D:\\DSPLAB\\LAB3),然后单击“完成”按钮,这样就新建了一个工程项目。
注意:文件夹、文件名中不能含有汉字,且文件名第一个字母不能是数字。 (4)
将编辑好的四个文件添加到刚建好的工程项目中:
选择Project-Add Files to Project…,出现一个对话框,选择文件夹(D:\\DSPLAB\\LAB3)并选中各个文件,单击“打开”按钮就将这四个文件就添加到该工程中了。 (5) 编译C及汇编程序:
选择Project—Compile File,分别编译C程序、滤波器汇编子程序及头文件,修改程序中的错误,再编译,直到无错误出现。编译后的文件为obj文件。
(6) 链接:选择Project—Build或Rebuild All,链接各obj文件,若有错误出现应修改错误(错误应在cmd文件中),再链接,直到无错误出现。链接生成可执行的out文件。 (7) 下载out文件:选择File—Load Program,在debuge文件夹中选中out文件(文件名与工程项目同名),单击“打开”按钮,这样out文件就下载到DSP中了。
(8) 调试:选择debuge—Step Into 单步执行代码或者选择debuge—Run连续运行代码(debuge—Halt停止运行)。单步运行或运行结束后选择View-Graph-Time/Frequency和View-Registers-CPU Registers/Peripheral Regs查看序列的波形和寄存器中的数据。
由于算法循环次数较多,单步运行耗时太长,因此可在C程序或汇编程序中适当语句(指令)上设置断点(光标移到某行,鼠标点击工具栏一“手”形按钮),然后连续运行(run),这样程序运行到断点时暂停,此时可查看中间的一些结果。再次运行(run),将从断点继续
8
运行。
可用View-Graph-Time/Frequency观察滤波前后序列的时域波形(single time)及频域幅度特性(FFT magnitude)。通过时域波形或幅度特性分析系统的单位脉冲响应及频率特性。
如果最后的结果有错误,则应查找原因修改程序并重复步骤5—步骤8,直到结果正确为止。
五、思考题
1.比较滤波器的系数与滤波器的单位脉冲响应,看二者是否相同?为什么? 2.混合编程时,C与汇编之间如何传递参数的?哪几个寄存器要进行现场保护? 3.循环缓冲区的起始地址与其长度有何关系?在链接命令文件中如何指明?
4.本实验中是对一个序列进行连续的滤波,即调用一次滤波函数就完成了N个数据的滤 波,而有时需要每采集一个数据x(n)就调用一次滤波函数,得到一个输出数据y(n),此时 滤波器汇编程序如何修改?
六、实验报告要求
1.简述FIR滤波器的特点,写出系数对称滤波器的差分方程。 2.简述实验步骤。
3. 编写FIR滤波器的汇编程序。
4.记录输入、输出序列的时域波形及幅度特性,分析实验结果。 5.简要回答思考题。
9