DSP实验报告_百度文库(精)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验0 实验设备安装才CCS调试环境
实验目的:
按照实验讲义操作步骤,打开CCS软件,熟悉软件工作环境,了解整个工作环境内容,有助于提高以后实验的操作性和正确性。

实验步骤:
以演示实验一为例:
1.使用配送的并口电缆线连接好计算机并口与实验箱并口,打开实验箱电源;
2.启动CCS,点击主菜单“Project->Open”在目录
“C5000QuickStart\sinewave\”下打开工程文件sinewave.pjt,然后点击主菜单“Project->Build”编译,然后点击主菜单“File->Load Program”装载debug目录下的程序sinewave.out;
3.打开源文件exer3.asm,在注释行“set breakpoint in CCS !!!”语句的NOP处单击右键弹出菜单,选择“Toggle breakpoint”加入红色的断点,如下图所示;
4.点击主菜单“View->Graph->Time/Frequency…”,屏幕会出现图形窗口设置对话框
5.双击Start Address,将其改为y0;双击Acquisition Buffer Size,将其改为1;DSP Data Type设置成16-bit signed integer,如下图所示;
6.点击主菜单“Windows->Tile Horizontally”,排列好窗口,便于观察
7.点击主菜单“Debug->Animate”或按F12键动画运行程序,即可观察到实验结果:
心得体会:
通过对演示实验的练习,让自己更进一步对CCS软件的运行环境、编译过程、装载过程、属性设置、动画演示、实验结果的观察有一个醒目的了解和熟悉的操作方法。

熟悉了DSP实验箱基本模块。

让我对DSP课程产生了浓厚的学习兴趣,课程学习和实验操作结合为一体的学习体系,使我更好的领悟到DSP课程的实用性和趣味性。

实验二基本算数运算
2.1 实验目的和要求
加、减、乘、除是数字信号处理中最基本的算术运算。

DSP 中提供了大量的指令来
实现这些功能。

本实验学习使用定点DSP 实现16 位定点加、减、乘、除运算的基本方法
和编程技巧。

本实验的演示文件为exer1.out。

2.2 实验原理
1 定点DSP 中的数据表示方法
C54X 是16 位的定点DSP。

一个16 位的二进制数既可以表示一个整数,也可以表
示一个小数。

当它表示一个整数时,其最低位(D0)表示20,D1 位表示21,次高位(D14)
表示214。

2 实现16 位定点加法
C54X 中提供了多条用于加法的指令,如ADD,ADDC,ADDM 和ADDS。

其中
ADDS 用于无符号数的加法运算,ADDC 用于带进位的加法运算(如32 位扩展精度加
法),而ADDM 专用于立即数的加法。

3 实现16 位定点减法
C54X 中提供了多条用于减法的指令,如SUB,SUBB,SUBC 和SUBS。

其中SUBS
用于无符号数的减法运算,SUBB 用于带进位的减法运算(如32 位扩展精度的减法),
而SUBC 为移位减,DSP 中的除法就是用该指令来实现的。

4 实现16 位定点整数乘法
在C54X 中提供了大量的乘法运算指令,其结果都是32 位,放在A 或B 寄存器
中。

乘数在C54X 的乘法指令很灵活,可以是T 寄存器、立即数、存贮单元和A 或B
寄存器的高16 位。

5 实现1
6 位定点小数乘法
在C54X 中,小数的乘法与整数乘法基本一致,只是由于两个
有符号的小数相乘,
其结果的小数点的位置在次高的后面,所以必须左移一位,才能得到正确的结果。

C54X
中提供了一个状态位FRCT,将其设置为1 时,系统自动将乘积结果左移一位。

但注意
整数乘法时不能这样处理,所以上面的实验中一开始便将FRCT 清除。

两个小数(16 位)
相乘后结果为32 位,如果精度允许的话,可以只存高16 位,将低16 位丢弃,这样仍可
得到16 位的结果。

6 实现16 位定点整数除法
在 C54X 中没有提供专门的除法指令,一般有两种方法来完成除法。

一种是用乘法
来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。

这种方法对于
除以常数特别适用。

另一种方法是使用SUBC 指令,重复16 次减法完成除法运算。

7 实现16 位定点小数除法
在 C54X 中实现16 位的小数除法与前面的整数除法基本一致,也是使用循环的
SUBC 指令来完成。

但有两点需要注意:第一,小数除法的结果一定是小数(小于1),
所以被除数一定小于除数。

2.3 实验内容
本实验需要使用C54X 汇编语言实现加、减、乘、除的基本运算,并通过DES 的存
贮器显示窗口观察结果。

1 编写实验程序代码
2 用ccs simulator 调试运行并观察结2.4 实验结果
1、加法结果
2、乘法结果
3、减法结果
4、除
2.5 思考题(0.5、0.25)
实验三C54X的浮点数的算术运
一、实验目的
1 练习TMS320C54X 汇编程序的编写与调试方法,重点练习C54X 程序流程控制的方法。

2 学习并掌握应用TMS320C54X 来进行浮点数的各种算术运算的算法实现。

3 练习并掌握TMS320C54X 的汇编语言的汇编指令系统的使用方法,重点练习具有C54X 特点的一些在功能上有所扩展的特殊指令,并了解这些指令在进行算术运算或各种控制时所带来的方便。

4 练习并掌握用CCS 调试程序的一些基本操作。

二.实验原理
1 浮点数的表示方法
在定点运算中,小数点是在一个特定的固定位置。

例如,如果一个32-bit 的数把小数点放在最高有效位(也就是符号位)之后,那么就只有分数(绝对值小于1)才能被显示。

在定点运
算系统中,虽然在硬件上实现简单,但是表示的操作数的动态范围要受到限制。

3 浮点数运算的步骤
程序代码分成四个 ASM 文件输入,通过编译生成.obj 文件,连接生成.out 文件后就可以在DES320PP-U 实验系统上调试运行(先要创建一个工程文件,然后加入四个工程文件,并且一起编译,连接。

因为每个文件都对下一个文件作了引用)。

步骤如下:
a. 首先启动 setup CCS C5000,在其中设置目前需要的CCS 的工作状态为C54xxsimulator,保存这一设置并退出。

然后再启动CCS 实验系统软件CCS C5000。

b. 在下拉菜单中选择“File”->“Load Program”以装入所要调试的程序f
c.out,这时,在反汇编窗口中能看到程序的源代码。

c. 在下拉菜单中选择“View”->“CPU Registers”->“CPU Register”,可以看见在CCS 界面下部份会出现CPU 中的相关寄存器;选择“View”->“Memory…”,在弹出的“Memory Window Options”窗口中选择要观察的区域为数据区,地址开始为0x80h,然后就可以看见出现一个Data Memory 窗口,其中显示了从0x80h 开始的.bss 区。

d. 在反汇编窗口中需要观察的地方设置断点:在这条指令处双击将其点为红色即可。

比如在加法程序中有指令nop 的位置都可以加一个断点。

e. 在下拉菜单中选择“调试”——“连续运行”(或直接点击“运行程序”按钮)运行浮点数程序。

如果编写程序时在计算完毕后遇到一个断点,那么程序到此会自动停止。

f. 当示范程序在第一个断点处停下来时,此时就可以看见程序初始化后的情况:被加数12.0 以浮点数的格式放在内存区0x08a-0x08b 中,其值为4140h 和0000h。

加数12.0 放在内存区0x08c-0x08d 中,其值也为4140h 和0000h。

g. 再点击“运行程序”按钮,之后程序会在下一个断点处停下来,这时可以看见被加数被格式转换后的变量op1hm、op1lm 和op1se 的值在内存区0x084-0x086 中,分别为00c0h、0000h 和0082h。

同样加数被格式转换后的变量op2se、op2hm 和op2lm的值在内存区0x087-0x089 中,分别为0082h、00c0h 和0000h。

h. 再点击“运行程序”按钮,程序停下来时就可以观察到在存储器窗口中表示结果的变量rlthm、rltlm、rltsign 和rltexp 的值在内存区0x080-0x083 中,其值分别为0040h、0000h、0180h 和0083h。

i. 这时可以看到 A 寄存器中的值为AH=41c0h,AL=0000h 这就是最后的以浮点数的格式表示的结果值24(=12+12)。

加法运算到此结束。

j. 继续点击“运行程序”按钮,当程序再次停下来时就可以看见在A 寄存器中显示的13.0 与12.0 进行减法运算的结果:AH=3f80h,AL=0000h。

这是用浮点数格式表示的数1(=13-12)。

减法运算的程序到此结束。

k. 继续点击“运行程序”按钮,当程序再次停下来时就可以看见在A 寄存器中显示的12.0 与12.0 进行乘法运算的结果:AH=4310h,AL=0000h。

这是用浮点数格式表示的数144
(=12*12)。

乘法运算的程序到此结束。

l. 继续点击“运行程序”按钮,当程序再次停下来时就可以看见在A 寄存器中显示的12.0 与4.0 进行除法运算的结果:AH=4040h,AL=0000h。

这是用浮点数格式表示的数3
(=12/4)。

至此加、减、乘、除四种运算都运行完毕。

m. 如果程序运行不正确,请检查源程序是否有误,必要时可以在源程序中多插入断点语句。

程序在执行到断点语句时自动暂停,此时可以通过检查各个寄存器中的值以及内存单元中的值来判断程序执行是否正确。

三.在 CCS 的C54xx simulator 上调试观察实验结果
浮点加法断点一:
浮点加法断点二:
浮点加法断点三:
浮点减法
浮点数乘法浮点数除法
四心得体会
通过学习C54X的浮点数的算术运算,以及实验结果的观察,使我了解了浮点数运算的原理,学习并掌握用
TMS320C54X来进行浮点数的各种算术运算的算法实现。

实验四用定时器实现数字振荡器
实验四用定时器实现数字振荡器
4.1 实验目的
在数字信号处理中,会经常使用到正弦/余弦信号。

通常的方法是将某个频率的正弦/余弦值预先计算出来后制成一个表,DSP 工作时仅作查表运算即可。

在本实验中将介绍另一种获得正弦/余弦信号的方法,即利用数字振荡器用叠代方法产生正弦信号。

本实验除了学习数字振荡器的DSP 实现原理外,同时还学习C54X 定时器使用以及中断服务程序编写。

另外,在本实验中我们将使用汇编语言和C 语言分别完成源程序的编写。

4.2
本实验利用定时器产生一个 2kHz 的正弦信号。

定时器被设置成每25uS 产生一次中断(等效于采样速率为40K)。

利用该中断,在中断服务程序中用叠代算法计算出一个SIN值,并利用CCS 的图形显示功能查看波形。

4.3 实验原理
1 数字振荡器原理
sinkωT
,其
z 变换为
H(z=
其中,A=2cosωT, B=-1, C=sinωT。

设初始条件为0,求出上式的反Z 变换得:
y[k]=Ay[k-1]+By[k-2]+Cx[k-1]
2 C54X 的定时器操作
C54X 的片内定时器利用CLKOUT 时钟计数,用户使用三个寄存器(TIM,PRD,TCR)来控制定时器,参见表4-1。

在表4-2 中列出了定时器控制寄存器的各个比特位的具体定义。

‘VC5402 的另一个定时器(定时器1)的控制寄存器分别为:0x30
TIM1),0x31(PRD1),0x32(TCR1)。

3 C54X 中断的使用
C54X 中用户可以通过中断屏蔽寄存器IMR 来决定开放或关闭一个中断请求。

图4-1 给出了C5402 的IMR 寄存器的各个比特位的定义。

图 4-1 ‘C5402 的IMR 寄存器
其中,
表示HPI 接口中断,INT3-INT0 为外部引脚产生的中断,TXINT 和TRINT 为TDM 串口的发送和接收中断,BXINT0 和BRINT0 BSP 串口的发送和接收中断,14
为定时器0 中断。

在中断屏蔽寄存器IMR 中,1 表示允许CPU 响应对应的中断,0 表示禁止。

当然要CPU 响应中断,
INTM 还应该为0(允许所有的中断)。

本实验的初始化程序读取中断向量表的启始地址,然后设置的高
DSP 能正确响应中断,代码如下:
ld #0,dp ;设置DP 页指针
ssbx intm ;关闭所有中断
ld #vector, a ;读出中断向(地址vector 在中断向量表程序中定义)
and #0FF80h, a ;保留高9 位(IPTR)
andm #007Fh, pmst ;保留PMST 的低7 位
or pmst, a ;
stlm a, pmst ;设置PMST(其中包括IPTR)
4.4 实验内容
C54X 汇编语言或C 语言实现数字振荡器,并通过CCS 提供的图形显示窗口观察出信号波形以及频谱。

实验分下面几步完成:
1 根据确定数字振荡器的频率,确定系数。

2 启动 CCS,新建工程文件。

选择 Project 菜单中的Options 选项,或使用鼠标右键单击工程文件名(如sinewave.pjt)并选择build options 项来修改或添加编译、连接中使用的参数。

选择Linker Output Filename”栏中写入输出OUT 文件的名字,如sine.out,你还可以设置生成的MAP 文件名。

4 完成编译、连接,正确生成OUT 文件。

5 选 View→Graph→
15…打开图形显示设置窗口。

6 在汇编源程序的中断服务程序(_tint)中的“nop”语句处设置断点。

7 用右键单击图形显示窗口,并选择“Proporties”项以便修改显示属性。

8 清除所有断点,关闭除波形显示窗口外的所有窗口,并关闭工程文件。

9 完成编译、连接,正确生成OUT 文件。

10打开 C 源程序(timer.c)窗口,在中断服务程序(函数tint()的“con_buf=0
Start Address”改为buf;“Acquisition Buffer Size”改为“Display Data Size 128,“DSP DataType”为“32-bit floating point”
11选择Debug→Animate,运行程序,观察输出波形。

相关文档
最新文档