DSP实验指导书.docx

上传人:b****8 文档编号:10461168 上传时间:2023-02-13 格式:DOCX 页数:54 大小:155.43KB
下载 相关 举报
DSP实验指导书.docx_第1页
第1页 / 共54页
DSP实验指导书.docx_第2页
第2页 / 共54页
DSP实验指导书.docx_第3页
第3页 / 共54页
DSP实验指导书.docx_第4页
第4页 / 共54页
DSP实验指导书.docx_第5页
第5页 / 共54页
点击查看更多>>
下载资源
资源描述

DSP实验指导书.docx

《DSP实验指导书.docx》由会员分享,可在线阅读,更多相关《DSP实验指导书.docx(54页珍藏版)》请在冰豆网上搜索。

DSP实验指导书.docx

DSP实验指导书

 

《DSP技术及其应用》

实验指导书

 

邢海涛,郑佳春编著

 

集美大学信息工程学院

通信技术实验室

2011年5月4日

 

目录

实验一CCS集成开发环境2

实验二汇编语言程序设计9

实验三FIR数字滤波器的‘C54X实现11

实验四C程序设计实验14

实验五TIDSPUSB开发系统和XM5402评估板的使用19

实验六中断系统实验22

实验七综合应用实验27

*实验八设计实验37

 

实验一CCS集成开发环境

一、实验目的

1.熟悉CCS开发软件的环境界面;学会开发环境的设置;

2.掌握DSP开发的构建工程,程序的编辑、编译、链接、运行、调试的方法;

3.学会数据的输入和结果分析、查看。

二、实验内容

1、CCS配置

单击桌面上的“CCSsetup”图标,打开CCS开发环境设置界面如图1-1,对于软件仿真,仅选择软件仿真器即可(图中选择的是芯片为5409的仿真器),点击“Import”导入系统,点击“saveandquit”保存退出设置界面,启动CCS即可进入编辑界面。

图1-1CCS配置对话框

2、建立工程文件

(1)工程的创建、打开和关闭。

选择菜单“Project\New”,弹出如图1-2对话框,在Project后的文本框里输入工程名即可创建新工程(这里设定工程名为lab1)。

在实验中我们规定文件名统一选为“姓_学号”(用拼音)。

选择菜单“Project\Open”和“Project\Close”,即可完成工程的打开和关闭。

(2)在工程中添加/删除文件

在当前工程窗口,以下任一操作都能添加文件到工程中:

a、选择命令ProjectAddFilestoproject...

b、在工程视图中右键单击调出关联菜单,选择AddFiles...

在工程视图中右键单击要删除的文件名,选择Removefromproject即可删除文件。

图1-2创建工程对话框

3、构建工程

工程所需文件编辑完成后,可以对该工程进行编译链接,产生可执行文件,为调试作准备。

(1)编译文件:

命令ProjectCompile或单击工程工具条“编译当前文件”按钮,仅编译当前文件,不进行链接。

(2)增量构建:

单击工程工具条“增量构建”按钮则只编译那些自上次构建后修改过的文件。

增量构建(incrementalbuild)只对修改过的源程序进行编译,先前编译过、没有修改的程序不再编译。

(3)重新构建:

命令ProjectRebuild或单击工程工具条“重新构建”按钮重新编译链接当前工程。

(4)停止构建:

命令ProjectStopBuild或单击工程工具条“停止构建”按钮停止当前的构建进程。

4、调试

(1)载入可执行程序

命令FileLoadProgram载人编译链接好的可执行程序。

用户也可以修改“ProgramLoad”属性,使得在构建工程后自动装入可执行程序。

设置方法为选择命令OptionsProgramLoad。

(2)使用反汇编工具

用户的执行程序(不论是C程序或是汇编程序)载入到目标板或仿真器时,CCS调试器自动打开一个反汇编窗口。

对每一条可反汇编的语句,反汇编窗口显示对应的反汇编指令(某些C语句一条可能对应于几条反汇编指令),语句所处地址和操作码(即二进制机器指令)。

当前程序指针PC(ProgramPoint)所在语句用彩色高亮表示。

(3)程序执行控制

A.复位——4种方法

(1)ResetDSP:

DebugResetDSP命令初始化所有的寄存器内容并暂停运行中的程序。

如果目标板不响应命令,并且用户正在使用一基于核的设备驱动,则DSP核可能被破坏,用户需要重新装入核代码。

对仿真器,CCS复位所有寄存器到其上电状态。

(2)LoadKernel:

如果用户使用一基于核的调试器(不是JTAG),则DSP核应负责与主机的通信。

若DSP核被破坏,则设备驱动程序将无法与目标板通信。

在这种情况下,用户应当重新装入DSP核。

命令:

DebugLoadKernel。

(3)Restart:

DebugRestart命令将PC恢复到当前载入程序的人口地址。

此命令不执行当前程序。

(4)GoMain:

DebugGoMain命令在主程序入口处设置一临时断点,然后开始执行。

当程序被暂停或遇到一个断点时,临时断点被删除。

此命令提供了一快速方法来运行用户应用程序。

B.执行——4种程序执行操作

(1)执行程序。

命令为DebugRun或单击调试工具条“执行”按钮,程序运行直到遇见断点为止。

(2)暂停执行。

命令为DebugHalt或单击调试工具条上的“暂停执行”按钮。

(3)动画执行。

命令为Debug,Animate或单击调试工具条上的“动画执行”按钮。

用户可以反复运行执行程序,直到遇到断点为止。

(4)自由运行。

命令为DebugRunFree。

此命令禁止所有断点,包括探针断点和Profile

断点,然后运行程序。

C.单步执行操作

(1)单步进入(快捷键F8)。

命令为DebugStepInto或单击调试工具条上的“单步进入”按钮。

当调试语句不是最基本的汇编指令时,此操作将进入语句内部(如子程序或软件中断)调试。

(2)单步执行(快捷键F1O)。

命令为DebugStepOver或单击调试工具条上的“单步执行”按钮。

此命令将函数或子程序当作一条语句执行,不进其内部调试。

(3)单步跳出(快捷键Shift+F7)。

命令为DebugStepOut或单击调试工具条上的“单步跳出”按钮。

此命令将从子程序中跳出。

(4)执行到当前光标处(快捷键Ctrl+F10)。

命令为DebugRuntoCursor或单击调试工具条上的“执行到当前光标处”按钮。

此命令使程序运行到光标所在的语句处。

5、内存、寄存器操作

(1)查看、编辑内存

CCS允许显示特定区域的内存单元数据。

方法为:

选择ViewMemory或单击调试工具条上的“显示内存数据”按钮。

在弹出对话框中输入内存变量名(或对应地址)、显示方式即可显示指定地址的内存单元。

编辑某一内存单元的方法为:

在内存窗口中鼠标左键双击需要修改的内存单元,或者选择命令EditMemoryEdit,在对话框中指定需要修改的内存单元地址和内存空间类型,并输入新的数据值即可。

注意输人数据前面加前缀“0x”为十六进制,否则为十进制。

查看:

程序代码;变量位置。

编辑链接命令文件,加入工程;重新构建工程;重复上述过程。

比较结果,体会链接命令文件的作用。

(2)CPU寄存器

选择命令ViewCPURegistersCPURegister或单击调试工具条上的CCS将在CCS窗口下方弹出一寄存器查看窗口。

有3种方法可以修改寄存器的值:

a、命令EditEditRegister。

b、在寄存器窗口双击需要修改的寄存器。

c、在寄存器窗口单击右键,从弹出的菜单中选择需要修改的寄存器。

三种方法都将弹出一编辑对话框,在对话框中指定寄存器(如果在“Register"栏中不是所期望的寄存器)和新的数值即可。

6、调试一个程序

试调试乘法累加运算程序(教材例4P95)。

(1)创建一个工程;

(2)在工程里编辑源程序文件、中断向量文件、链接命令文件,加入到工程并保存;

(3)编译、查错、链接生成可执行文件,并加载文件;

(4)查看列表文件、存储器映像文件,体会它们的作用。

(5)单步运行程序,在反汇编窗口观察程序的运行情况;观察程序的控制和转移以及加、减、乘运算;同时从存储器窗口、CPU寄存器窗口查看、分析程序运行结果,并判断结果是否正确。

(6)系统复位,观察程序的运行情况。

(7)若算法中滤波器的系数改变为:

0.9,0.7,0.5,0.3

请问:

程序如何修改?

调试程序,查看运行结果。

(8)若算法中滤波器的阶数改变为7阶,系数为:

0.9,0.8,0.7,0.6,0.5,0.4,0.3

请问:

程序如何修改?

调试程序,查看运行结果,分析判断结果的正确性。

三、实验报告要求

1.简述实验目的;

2.按实验内容附上实验结果,并对结果进行分析;

3.附上修改后的程序代码;

4.实验进行总结和讨论。

四、思考题

1.实验时你的程序代码和变量加载在什么存储器的什么位置?

2.简述列表文件和存储器映像文件包含哪些信息?

3.简述链接命令文件的作用。

附录一:

链接命令文件

*************************************************

*******dspsy1.cmd*******

*************************************************

-odsp_ccs.out

-mdsp_ccs.map

-estart

MEMORY

{

PAGE0:

EPROM1:

org=0FF80h,len=80h

EPROM2:

org=0E000h,len=100h

PAGE1:

SPRAM:

org=0060h,len=0020h

DARAM:

org=0080h,len=100h

}

SECTIONS

{

VECTOR:

>EPROM1PAGE0

.text:

>EPROM2PAGE0

.bss:

>SPRAMPAGE1

.data:

>DARAMPAGE1

STACK:

>DARAMPAGE1

}

附录二:

中断向量文件

*************************************************

******dspsy_vect.asm******

*************************************************

;========vectors.asm========

;PlugintheentrypointatRESETintheinterruptvectortable

;========unused========

 

.sect"VECTOR"

.refstart;Centrypoint

 

RESET:

;resetvector

BDstart;branchtoCentrypoint

NOP

NOP;stacksizeof200

nmi:

RETE;enableinterruptsandreturnfromone

NOP

NOP

NOP;NMI~

;softwareinterrupts

sint17.space4*16

sint18.space4*16

sint19.space4*16

sint20.space4*16

sint21.space4*16

sint22.space4*16

sint23.space4*16

sint24.space4*16

sint25.space4*16

sint26.space4*16

sint27.space4*16

sint28.space4*16

sint29.space4*16

sint30.space4*16

int0:

RETE

NOP

NOP

NOP

int1:

RETE

NOP

NOP

NOP

int2:

RETE

NOP

NOP

NOP

tint:

RETE

NOP

NOP

NOP

rint0:

RETE

NOP

NOP

NOP

xint0:

RETE

NOP

NOP

NOP

rint1:

RETE

NOP

NOP

NOP

xint1:

RETE

NOP

NOP

NOP

int3:

RETE

NOP

NOP

NOP

.end

实验二汇编语言程序设计

一、实验目的

1.在熟悉工程创建调试的基础上,进一步熟悉汇编语言程序结构、编写方法;

2.学会程序的控制、转移、子程序调用;

3.学会加、减、乘运算的编程和实现。

4.学会使用CCS的图形显示工具。

二、实验内容

1.熟悉汇编命令

熟悉2-1中常用的汇编命令,熟练区分块的类别(未初始化块、已初始化块、自定义块等)。

表2-1常用的汇编命令

汇编命令

作用

举例

.title

紧跟其后的是用双引号括起的源程序名

.title“lab2.asm”

.end

结束汇编命令

放在汇编语言源程序的最后

.text

紧随其后的是汇编语言的正文

例程中,.text段是源程序正文。

经汇编后,紧随.text后的是可执行程序代码

.data

紧跟其后的是已初始化数据

有两种数据形式:

.int和.word

.int

.int用来设置16位无符号整型量常数

table:

.word1,2,3,4

.word8,6,4,2

表示在程序存储器标号为table开始的8个单元中存放初始化数据1,2,3,4,8,6,4,2

.word

.word用来设置16位带符号整型量常数

.bss

为未初始化变量保留存储空间

.bssx,4表示在数据存储器中空出4个存储单元存放:

x1,x2,x3,x4

.sect

建立包含代码和数据的自定义段

.sect“vectors”定义向量表,紧随其后的是复位和中断向量,名为vectors

.usect

为未初始化变量保留存储空间的子定义段

STACK.usect“STACK”,10h在数据存储器中保留出16个单元作为堆栈区,名为STACK

2.程序设计

编写程序实现:

利用子程序计算0~45度(间隔0.5度)的正余弦值,再利用倍角公式求出0~90度(间隔1度)的正弦值;然后,通过复制,获得0~360度的正弦值,以获得正弦波。

3.调试程序

单步运行程序,在反汇编窗口观察程序的运行情况;体会程序的控制和转移以及加、减、乘运算;同时从存储器窗口、CPU寄存器窗口查看、分析程序运行结果是否正确。

4.图形显示结果

利用CCS的图形显示工具显示得到的正弦波。

三、提高实验

*1.完成浮点乘法运算

调试教材P96例5程序。

四、实验报告要求

1.简述实验目的;

2.按实验内容附上实验结果,并对结果进行分析;

3.对实验进行总结和讨论。

4.回答思考题。

五、思考题

1.如果要将.text定位到2000H,程序如何修改?

2.如果将.data定位到Page1程序能正常运行吗?

如果不能,请问如何修改,以调试出正确结果?

3.子程序调用时,压入堆栈的是什么内容?

实验三FIR数字滤波器的‘C54X实现

一、实验目的

1.学会FIR滤波器的DSP程序设计和实现。

二、实验内容

1.程序算法

系数对称的FIR滤波器,由于具有线性相位特性,因此应用很广,特别是对相位失真要求很高的场合,如调制解调器(MODEM)。

一个N=8的FIR滤波器,若a(n)=a(N-1-n),就是对称FIR滤波器,其输出方程为:

y(n)=aox(n)+alx(n-1)+a2x(n-2)+a3x(n-3)+a4x(n-4)+a5x(n-5)+a6x(n-6)+a7x(n-7)

总共有8次乘法和7次加法。

如果改写成:

y(n)=ao[x(n)+x(n-7)]+al[x(n-1)+x(n-6)]+a2[x(n-2)+x(n-5)]+a3[X(n-3)+x(n-4)]

变成4次乘法和7次加法。

可见乘法运算的次数减少了一半。

这是对称FIR的又一个优点。

对称FIR滤波器’C54x,实现要点如下:

(1)在数据存储器中开辟两个循环缓冲区:

New循环缓冲区存放N/2=4个新数据;

O1d循环缓冲区中存放老数据。

循环缓冲区的长度为N/2。

(2)设置循环缓冲区指针:

AR2指向New缓冲区中最新的数据;AR3指向O1d缓冲区中最老的数据。

(3)在程序存储器中设置系数表。

数据存储器程序存储器

New循环缓冲区O1d循环缓冲区系数表

80hx(n)←AR288hx(n-4)COFFa0低地址

81hx(n-3)89hx(n-5)a1

82hx(n-2)8Ahx(n-6)a2

83hx(n-1)8Bhx(n-7)←AR3a3高地址

(4)(AR2)+(AR3)→AH(累加器A的高位)

(AR2)-1→AR2,(AR3)-1→AR3

(5)将累加器B清零,重复执行4次(i=0,1,2,3,):

(AH)*系数ai+(B)→B,系数指针(PAR)加1,

(AR2)+(AR3)→AH,AR2和AR3减1

(6)保存和输出结果(结果在BH中)。

(7)修正数据指针,让AR2和AR3分别指向New缓冲区最新数据和O1d缓冲区中最老的数据。

(8)用New缓冲区中最老的数据替代Old缓冲区中最老的数据。

O1d缓冲区指针减1。

(9)输入一个新数据替代NeW缓冲区中最老的数据。

重复执行第(4)~(9)步。

2.程序代码

在编程中要用到FIRS(对称有限冲激响应滤波器)指令,其操作如下:

FIRxmem,Ymem,Pmad

执行Pmad→PAR

当(RC)≠0

(B)+(A(31~16))×(由PAR寻址Pmem)→B

((Xmem)+(Ymem))<<16→A

(PAR)+1→PAR

(RC)-1→RC

FIRS指令在同一个机器周期内,通过C和D总线读2次数据存储器,同时通过D总线读一个系数。

对称FIR滤波器(N=8)的源程序清单如下:

.mmregs

.defstart

.bssy,1

x_new.usect“DATAl”,4

x_o1d.usect“DATA2”,4

size.set4

PA0.set0

PAl.set1

.data

COEF.word1*32768/10,2*32768/10

.word3*32768/10,4*32768/10

.text

Start:

LD#y,DP

SSBXFRCT

STM#x_new,AR2;AR2指向新缓冲区第1个单元

STM#x_o1d+(size-1),AR3;AR3指向老缓冲区最后1个单元

STM#size,BK;循环缓冲区长度=Size

STM#-1,AR0;仿效*ARn-%

LD#x_new,DP

PORTRPAl,#x_new;输入X(n)

FIR:

ADD*AR2+0%,*AR3+0%,A;AH=x(n)+x(n-7)(第一次)

RPTZB,#(size-1);B=0,下条指令执行size次

FIRS*AR2+0%,*AR3+0%,COEF;B+=AH*a0,AH=X(n-1)+x(n-6),…

STHB,@y;保存结果

PORTW@y,PA0;输出结果

MAR*+AR2

(2)%;修正AR2,指向NEW缓冲区最老的数据

MAR*AR3+%;修正AR3,指向OLD缓冲区最老的数据

MVDD*AR2,*AR3+0%;新缓冲区向老缓冲区传送一个数

BDFIR

PORTRPAl,*AR2;输入新数据至新缓冲区

.END

3.试用窗函数法设计一线性相位数字低通滤波器,其技术指标为:

3dB截止频率为:

0.2PI;

阻带截止频率为:

0.4PI;阻带最小衰减为-30dB;

并编程用DSP实现。

要求:

1)设计出FIR滤波器,并制成DSP可用的数据文件;(可使用MATLAB)

2)编写出所有的DSP程序(.asm、.cmd等);

3)生成输入数据;(可使用MATLAB)

4)调试程序,显示滤波结果,验证结果的正确性。

三、实验报告要求

1.简述实验目的;

2.按实验内容附上实验结果,并对结果进行分析;

3.实验进行总结和讨论。

4.回答思考题。

四、思考题

1.如何对设计出FIR滤波器的系数处理成在DSP可用的数据文件?

写出处理步骤。

2.如果设计结果滤波器的阶数N为100,请问程序应如何修改?

3.写出以下指令的具体操作:

RPTZB,#(size-1)

FIRS*AR2+0%,*AR3+0%,COEF

MAR*+AR2

(2)

 

实验四C程序设计实验

一、实验目的

1.学会DSP的C语言程序设计的基本方法;

2.学会DSP的C语言程序初始化。

3.学会DSP的C语言程序中断编程及调试方法。

二、实验内容

1.C程序中断、定时器实验

编写程序实现外部中断、定时器中断响应,中断响应时输出提示信息。

2.如果要将中断向量要配置到:

2080~20FFh,请问程序如何修改?

请修改程序,调试出正确的结果。

3.如果要使用外部中断1,实现输出:

“你的学号、姓名”,请修改程序,调试出正确的结果。

4.修改程序实现10000微妙的定时,请修改程序,调试出正确的结果。

 

*5.FFTC编程实现

离散付氏变换DFT是可以用数字方式来实现的时域到频域的变换,FFT是DFT的一种高效运算方法,它把N2次运算减少为(n/2)log2N。

使DFT的运算大大简化,运算时间一般可以缩短一、二个数量级。

一般情况下,都假定输入序列为复数。

本实验主要是编写一个可以执行8~1024复数点FFT的实用程序并上机调试。

用C语言编程实现FFT,调试、分析结果。

三、实验报告要求

1.简述实验目的;

2.按实验内容附上实验结果,并对结果进行分析;

3.实验进行总结和讨论。

四、思考题

1.如果要使用软件中断#18,实现输出:

“你的学号、姓名”,请问如何修改程序代码?

写出程序代码。

2.如果要实现1秒定时,请问如何修改程序代码?

写出程序代码。

 

主要参考程序清单:

***************************************************************************

/*cexam.C*/

/*TMS320C5409DSP*/

/*INT2INTERRUPTff80~ffffH*/

/*PROGRAMDARAM5000H*/

/*DATADARAM1000H*/

/***************************************************************************/

#include

#defineSWWSR(volatileunsignedint*)0x0028

#defineBSCR(volatileunsignedint*)0x0029

#definePRD(volatileunsignedint*)0x0025

interruptvoidint2_handler()

{

longintj;

puts("INT

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1