DSP原理与应用实验讲义精.docx
- 文档编号:13965136
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:98
- 大小:3.12MB
DSP原理与应用实验讲义精.docx
《DSP原理与应用实验讲义精.docx》由会员分享,可在线阅读,更多相关《DSP原理与应用实验讲义精.docx(98页珍藏版)》请在冰点文库上搜索。
DSP原理与应用实验讲义精
-1-
前言
随着数字电子技术不断发展,人们对数字信号处理的要求也越来越高,传统意义上的微处理器已不能满足现代数字电子技术发展的要求,而数字信号处理器(DSP)在近20多年的发展与普及后,应用领域几乎涵盖了所有的行业:
通信、信息处理、自动控制、雷达、航空航天、医疗、日常消费品等。
目前大多数学校都是理论结合实验进行教学,围绕该课程所开的实验课程皆为阶段性理论的验证实验,实验设备也仅是为验证某些算法和理论所使用,实验的项目相对来说比较单一和固定,实验设备的利用效率低下,其实验设备缺少研发和形成一个数字信号处理产品的能力。
目前,我校的通信工程专业开设了《数字信号处理》、《语音信号处理》、《数字图像处理》等信号处理相关课程,但尚缺乏一个动手实践和灵活应用的实验平台。
数字信号处理器由于其优异的运算能力和独特的硬件结构,是一个理想的选择。
结合当前的情况,本实验讲义从培养应用型人才的角度出发,并充分借鉴各大高校的先进试验教学管理技术,开发并设计了相应的DSP实验项目。
本实验讲义将实验分为三个模块,即基础实验、应用实验、扩展实验,以满足不同能力和需求的学生的需要。
本实验讲义在《DSP原理及应用实验教学改革课题》支持下编写完成。
不足之处,请广大师生指正。
目录
基础实验1CCS软件的使用............................................-4-基础实验2:
简单应用程序的调试.....................................-16-应用实验1:
DSP数据存取实验........................................-20-应用实验2:
GPIO控制实验...........................................-23-应用程序3:
定时器控制实验.........................................-26-应用实验4:
DMA读写实验............................................-30-应用实验5:
UART控制实验...........................................-35-应用实验6:
A/D采样实验............................................-40-应用实验7:
有限冲击响应滤波器(FIR)算法实验.........................-43-应用实验8:
快速傅立叶变换(FFT)算法实验............................-48-扩展实验1:
语音回声实验...........................................-54-扩展实验2:
语音和声实验...........................................-56-扩展实验3:
交通灯实验.............................................-59-附录A..............................................................-64-附录B..............................................................-73-
-3-
基础实验1CCS软件的使用
1.实验目的:
1.熟悉CCS集成开发环境,掌握工程的生成方法;
2.熟悉SEED-DEC5502实验环境;
3.掌握CCS集成开发环境的调试方法。
2.实验内容:
1.DSP源文件的建立;
2.DSP程序工程文件的建立;
3.学习使用CCS集成开发工具的调试工具。
3.实验背景知识:
3.1CCS简介
CCS提供了配置、建立、调试、跟踪和分析程序的工具,它便于实时、嵌入式信号处理程序的编制和测试,它能够加速开发进程,提高工作效率。
CCS提供了基本的代码生成工具,它们具有一系列的调试、分析能力。
CCS支持如下所示的开发周期的所有阶段
-4-
CCS构成及接口见下图
CCS窗口介绍:
-5-
3.2使用CCS常遇见文件简介:
1.program.c:
C程序源文件
2.program.asm:
汇编程序源文件
3.filename.h:
C程序的头文件,包含DSP/BIOSAPI模块的头文件
4.filename.lib:
库文件
5.project.cmd:
连接命令文件
6.program.obj:
由源文件编译或汇编而得的目标文件
7.program.out:
经完整的编译、汇编以及连接后生成可执行文件
8.program.map:
经完整的编译、汇编以及连接后生成空间分配文件
9.project.wks:
存储环境设置信息的工作区文件
保存配置文件时将产生下列文件:
1.programcfg.cmd:
连接器命令文件
2.programcfg.h54:
汇编头文件
3.programcfg.s54:
汇编源文件
(一)CMD文件简介
cmd文件用于DSP代码的定位。
由3部分组成:
1.输入/输出定义:
.obj文件:
链接器要链接的目标文件。
.lib文件:
链接器要链接的库文件。
.map文件:
链接器生成的交叉索引文件。
.out文件:
链接器生成的可执行代码;链接器选项。
2.MEMORY命令:
描述系统实际的硬件资源。
3.SECTIONS命令:
描述"段"如何定位。
下面例子则可说明其基本格式:
-osample.out
-msample.map
-stack100
sample.objmeminit.obj
-lrts.lib
MEMORY
{
PAGE0:
VECT:
origin=0xff80,length0x80
PAGE0:
PROG:
origin=0x2000,length0x400
PAGE1:
DATA:
origin=0x800,length0x400
}
SECTIONS
{
.vectors:
{}>PROGPAGE0
.text:
{}>PROGPAGE0
.data:
{}>PROGPAGE0
.cinit:
{}>PROGPAGE0
.bss:
{}>DATAPAGE1
}
-6-
下面介绍一下CMD文件中常用的程序段名与含义
1..cinit存放C程序中的变量初值和常量;
2..const存放C程序中的字符常量、浮点常量和用const声明的常量;
3..text存放C程序的代码;
4..bss为C程序中的全局和静态变量保留存储空间;
5..far为C程序中用far声明的全局和静态变量保留空间;
6..stack为C程序系统堆栈保留存储空间,用于保存返回地址、函数间的参
数传递、存储局部变量和保存中间结果;
.sysmem用于C程序中malloc、calloc和realloc函数动态分配存储空间。
(二)vecs.asm文件简介
vecs.asm是DSP的中断向量表文件。
中断服务程序的地址(中断向量)要装载到存储器的合适区域。
一般中断向量表文件是采用汇编语言编写;在文件中一般汇编指令.sect来生成一个表。
这个表包含中断向量的地址和跳转指令。
因为中断读物的标志符在汇编语言模块外部使用,所以标志符用.ref或.global。
(三)GEL文件简介
GEL文件的功能同cmd文件的功能基本相同,用于初始化DSP。
但它的功能比cmd文件的功能有所增强,GEL在CCS下有一个菜单,可以根据DSP的对象不同,设置不同的初始化程序。
以下面的例子介绍一下GEL文件的构成。
例:
#defineDEC5502_CTL0x60000//定义DEC5502_CTL寄存器
#defineDEC5502_INT0x60001//定义DEC5502_INT寄存器
#defineDEC5502_STA0x60002//定义DEC5502_STA寄存器
StartUp();开始函数
{
GEL_MapReset();;存储空间复位
GEL_MapAdd(0x0000,0,0x7fff,1,1);定义程序空间0000-7fff可读写
GEL_MapAdd(0x8000,0,0x7000,1,1);定义程序空间8000-f000可读写
GEL_MapAdd(0x0000,1,0x1000,1,1);定义数据空间0000-f000可读写
GEL_MapAdd(0xffff,2,1,1,1);定义I/O空间0xffff可读写
GEL_MapOn();存储空间打开
GEL_MemoryFill(0xffff,2,1,0x40);在I/O空间添入数值40h
}
3.3CCS常用指令简介
1.设置断点。
将光标放置在需要设置断点的程序行前,选择Debug→Breakpoints,即完成可一个断点的设置。
2.CCS提供3种方法复位目标板
1)ResetDSP:
Debug→ResetD,初始化所有的寄存器内容并暂停运行中的程
序。
使用此命令后,要重新装载.out文件后,再执行程序。
2)Restart:
Debug→Restart,将PC值恢复到当前载入程序的入口地址。
3)Gomain:
Debug→Gomain,将程序运行到主程序的入口处暂停。
3.CCS提供4种执行操作
-7-
1)执行执行:
Debug→Run,程序运行直到遇到断点为止。
2)暂停执行:
Debug→Halt,程序停止运行。
3)动画执行:
Debug→Animate,用户反复运行程序,直到遇到断点为止。
4)自由执行:
Debug→RunFree,禁止所有断点运行程序。
4.CCS提供4种单步执行操作
1)单步进入:
快捷键F8,Debug→stepinto,当调试语句不是基本的汇编指
令时,此操作进入语句内部。
2)单步执行:
Debug→stepOver,此命令将函数或子函数当作一条语句执
行,不进入内部调试。
3)单步跳出:
Debug→stepOut,此命令作用为从子程序中跳出
4)执行到光标处:
快捷键crtl+F10,Debug→RuntoCursor,此命令作用为
将程序运行到光标处。
5.内存、寄存器与变量的操作
1)查看变量:
使用view→WatchWindow命令
2)查看寄存器:
使用view→Registers→CPURegisters命令
3)查看内存:
使用view→memory命令
6.Graph的设置即图形显示
1)选择View→Graph→Time/Frequency。
2)在弹出的GraphPropertyDialog对话窗中,将GraphTitle,StartAddress,
AcquisitionBufferSize,DisplayDataSize,DSPDataType等的属性可改变为如下图所示(也可根据具体需要设置属性)。
向下滚动右侧的滚动条或调整dialog框的大小可看到所有的属性。
示例(A)将起始地址为0x2c28的数组进行图形显示
-8-
3)点击OK,将出现所设的图形窗口。
如:
在滤波实验中,用以上方法设定的图
形窗口,在运行滤波程序后,最终的显示结果如下图所示
4)可以在图形上单击右键,选择“FloatInMainTable”,这时图形将浮现在主窗口
中,以便观察。
4.实验准备:
1.将DSP仿真器与计算机连接好;
2.将DSP仿真器的JTAG插头与SEED-DEC5502单元的J1相连接;
3.启动计算机,当计算机启动后,打开SEED-DTK5502的电源。
观察
SEED-DTK_MBoard单元的+5V,+3.3V,+15V,-15V的电源指示灯灯以及SEED-DEC5502的电源指示灯D2、D4是否均亮;若有不亮的,请断开电源,检查电源。
下面按照原文件、工程文件以及编译条件的设置来分别介绍一下CCS的使用。
-9-
5.实验步骤:
5.1创建源文件
1.双击
图标进入CCS环境。
2.打开CCS选择File→New→SourceFile命令
3.编写源代码并保存
4.保存源程序名为math.c,选择File→Save
-10-
5.创建其他源程序(如.cmd)可重复上述步骤。
5.2创建工程文件
1.打开CCS,点击Project-->New,创建一个新工程,其中工程名及路径可任意指定
弹出如下对话框:
2.在Project中填入工程名,Location中输入工程路径;其余按照默认选项,点击完
-11-
成即可完成工程创建;
3.点击Project选择addfilestoproject,添加工程所需文件;
4.在弹出的对话框中的下拉菜单中分别选择.c点击打开,即可添加源程序math.c添
加到工程中;
5.同样的方法可以添加文件math.cmd、rts.lib到工程中;在下面窗口中可以看到
math.c、math.cmd、rts.lib文件已经加到工程文件中。
-12-
5.3设置编译与连接选项
1.点击Project选择BuildOpitions;
2.在弹出的对话框中设置相应的编译参数,一般情况下,按默认值就可以;
3.在弹出的对话框中选择连接的参数设置,设置输出文件名(可执行文件与空间分配
文件),堆栈的大小以及初始化的方式。
-13-
5.4工程编译与调试
1.点击Project→Buildall,对工程进行编译,如正确则生成out文件;若是修改程序,
可以使用Project→Build命令,进行编译连接,它只对修改部分做编译连接工作。
可节省编译与连接的时间。
编译通过,生成.out文件;
2.点击File→loadprogram,在弹出的对话框中载入debug文件夹下的.out可执行
文件;
3.装载完毕;
-14-
4.点击debug→GoMain回到C程序的入口;
5.打开File→Workspace→SaveWorkspace保存调试环境,以便下次调试时不需要
重新进行设置。
只要File→Workspace→LoadWorkspace即可恢复当前设置。
6.思考题
1.DSP软件开发与常规的软件开发(如:
VC++等)有何区别?
2.仿真器在DSP软件开发中的作用是什么?
-15-
基础实验2:
简单应用程序的调试
1.实验目的:
1.熟悉CCS集成开发环境,掌握工程的生成方法;
2.熟悉SEED-DEC5502实验环境;
3.掌握CCS集成开发环境的调试方法。
2.实验内容:
1.编译与链接的设置,生成可执行的DSP文件;
2.进行DSP程序的调试与改错;
3.学习使用CCS集成开发工具的调试工具;
3.实验程序,包含文件:
本实验中主要包括以下文件:
1.math.c这个文件中包含了实验中关于DSP运算的主要函数。
主要包含有:
fixed_add(intx,inty):
定点加法运算;
fixed_sub(intx,inty):
定点减法运算;
fixed_mul(intx,inty):
定点乘法运算;
fixed_div(intx,inty):
定点除法运算;
float_add(doublex,doubley):
浮点加法运算;
float_sub(doublex,doubley):
浮点减法运算;
float_mul(doublex,doubley):
浮点乘法运算;
float_div(doublex,doubley):
浮点除法运算;
float_fixed(doublex):
浮点转定点运算;
fixed_float(intx):
定点转浮点运算;
2.math.cmd这是DSP的链接文件。
它的主要功能是将DSP的每段的程序链接到相
应的DSP的存贮区中。
3.rts55x.lib这是一个库文件,主要包含了有关C的运行环境与相应的函数的代码。
4.实验准备:
首先将光盘下03.ExamplesofProgram\04.SEED-DTK5502实验程序目录下的
3.1.5Math文件夹拷贝到D:
盘根目录下。
1.将DSP仿真器与计算机连接好;
2.将DSP仿真器的JTAG插头与SEED-DEC5502单元的J1相连接;
3.打开SEED-DTK5502的电源。
观察SEED-DTK_MBoard单元的+5V,+3.3V,
+15V,-15V的电源指示灯以及SEED-DEC5502的电源指示灯D2、D4是否均亮;若有不亮的,请断开电源,检查电源。
-16-
5.实验步骤
4.双击
图标进入CCS环境。
5.点击Project→open命令,在弹出的对话框中添加math.pjt文件;
6.按照下图所示的方法添加GEL文件,即右键点击工程视窗中的GELfiles,在弹出的
菜单中选择laodgel命令。
7.按照下图所示添加.out文件,即使用File→LoadProgram菜单命令。
.out文件一
般存放在math文件下的debug文件夹中。
-17-
8.使用projiect→Bulid命令编译当前程序。
使用projiect→Bulidall命令编译整个工程
程序。
注意:
在这个实验中,为了加深对CCS的了解,分别在编译与链接过程中设置了的错误行。
这些错误行都是在程序调试中经常遇到的。
⏹源程序错误:
◆在函数fixed_add()中的z的定义未加“;”号;
◆函数float_add()的{}号缺右边而未完整
⏹链接错误;
◆DSP的空间分配重叠;
在进行此实验时,只有将上述的程序错误改正后才能正确的编译与链接。
产生MATH.out。
链接错误修改方法如下:
链接错误存在于CMD文件中:
⏹MMR:
origin=0000000h,length=00000d0h
修改为:
MMR:
origin=0000000h,length=00000c0h
9.点击debug→GoMain回到C程序的入口main()函数处。
-18-
10.使用F5快捷键,运行程序,在Stdout观察窗中查看程序运行结果。
6.思考题
1.当编译或链接过程中出现了错误或告警时,如何利用编译窗口提示的信息来修改程序?
-19-
应用实验1:
DSP数据存取实验
1.实验目的:
1.了解TMS320VC5502的内部存储器空间的分配及指令寻址方式;
2.学习用CodeComposerStudio修改、填充DSP内存单元的方法;
3.学习操作TMS320VC5502内存空间的指令。
2.实验内容:
1.读写DSP内存单元数据;
2.复制内存单元的数据。
3.实验背景知识:
TMS320VC55xx系列DSP基于增强的哈佛结构,可以通过三组并行总线访问多个存储空间。
它们分别是:
程序地址总线(PAB)、数据读地址总线(DRAB)和数据写地址总线(DWAB)。
由于总线工作是独立的,所以可以同时访问程序和数据空间。
4.实验程序功能与结构说明:
1.Memory.c:
这是实验的主程序,包含了系统初始化,读写、复制DSP内存单元等;
2.SEED_DEC5502.gel:
系统初始化文件
3.SEED_DEC5502.cmd:
声明了系统的存储器配置与程序各段的连接关系。
5.实验准备
首先将光盘下03.ExamplesofProgram\04.SEED-DTK5502实验程序目录下的
3.2.1DEC5502_Memory的文件夹拷贝到D:
盘根目录下。
1.将DSP仿真器与计算机连接好;
2.将DSP仿真器的JTAG插头与SEED-DEC5502单元的J1相连接;
3.打开SEED-DTK5502的电源。
观察SEED-DTK_MBoard单元的+5V,+3.3V,
+15V,-15V的电源指示灯以及SEED_DEC5502的电源指示灯D2、D4是否均亮;若有不亮的,请断开电源,检查电源。
6.实验步骤
1.
2.
3.
4.打开CCS,进入CCS的操作环境。
装入Memory.pjt工程文件,添加SEED_DEC5502.gel文件。
装载程序Memory.out,进行调试。
程序区的观察和修改
运行到main函数入口:
选择菜单Debug->GoMain,当程序运行并停止在
main函数入口时,展开“Disassembly”反汇编窗口,发现main函数入口地址为028CH,也就是说从此地址开始存放主函数的程序代码。
显示程序区:
-20-
修改程序区的存储单元:
程序区单元的内容由CCS的下载功能填充,但也能用手动方式修改;双击“Code”窗口地址“0x028C:
”后的第一个数,显示“EditMemory”窗口,在“Data”中输入0x20,单击“Done”按钮,观察“Code”窗口中相应地址的数据被修改,同时在反汇编窗口中的反汇编语句也发生了变化,当前语句被改成了“NOP”。
将地址0x028C上的数据改回0x4e,程序又恢复成原样。
5.观察修改数据区
显示片内数据存储区:
同样打开窗口Data1,起始地址在0x4100。
修改数据单元:
数据单元可以单个进行修改,只需双击想要改变的数据单元即可,与修改程序区单元的操作相同。
填充数据单元:
选择Edit->Memory->Fill…
-21-
观察“Data”窗口中的变化。
同样将0x4100开始的头16个单元的值用0填充。
6.运行程序观察结果
在Memory.c程序的第36行”for(i=0,pz=py;i<16;i++,pz++)”,第38行”for(i=0;i<16;i++,px++,py++)”,第42行”}”处设置断点。
运行程序,程序会停在断点处,此时可观察到Data窗口中前16个单元的值被写入0000至000F。
继续运行程序,程序会停在第二个断点处,此时可观察到Data1窗口中前16个单元的值被均被写入1234。
继续运行程序,程序结束,此时0x4080前16个单元的值复制到0x4100的前16个单元。
7.思考题
1.查看指令与查看数据有何不同之处?
2.查看程序中的某个变量主要有哪些方法,试列举两种方法。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 原理 应用 实验 讲义
![提示](https://static.bingdoc.com/images/bang_tan.gif)