DSP实验指导书.docx
- 文档编号:27264649
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:74
- 大小:916.71KB
DSP实验指导书.docx
《DSP实验指导书.docx》由会员分享,可在线阅读,更多相关《DSP实验指导书.docx(74页珍藏版)》请在冰豆网上搜索。
DSP实验指导书
《DSP技术及应用》
实验指导书
吴冬梅吴延海编
西安科技大学通信学院
2017.8
目录
实验一CCS开发环境练习
实验二16位定点DSP加、减、乘、除法运算
实验三数据块传送程序
实验四算术运算程序
实验五数据的输入、输出(探针及图形的使用)
实验六方波发生器
实验七FIR数字滤波器
实验八BSP串口操作实验
实验一CCS开发环境练习
实验目的:
学习CCS开发环境的使用方法。
实验内容:
熟悉各菜单功能及使用方法;熟悉CCS调试C54汇编程序的方法。
实验步骤:
1.CCS安装及设置
(1)CCS2.0系统的安装
运行setup.exe应用程序,弹出一个安装界面,选择CodeComposerStudio项,就可以开始CCS2.0的安装,按照屏幕提示完成系统的安装后,将出现如图1.1所示的两个图标。
图1.1CCS快捷图标
(2)系统配置
为使CCSIDE能工作在不同的硬件或仿真目标上,要首先为它配置相应的配置文件。
双击桌面上的SetupCCS2(’C5000)图标,启动CCS配置。
如图1.2所示。
在弹出对话框中单击“Clear”按钮,清除以前定义的配置。
从列出的配置文件中,选择能与使用的目标系统相匹配的配置文件。
单击加入系统配置“inport”按钮,将所选中的配置文件输入到当前正在创建的系统配置中,所选择的配置显示在系统配置栏目的MySystem目录下。
单击“Save”按钮,将配置保存在系统寄存器中。
(3)系统启动
双击桌面上CCS2(’C5000)图标,启动CCSIDE,将自动利用刚创建的配置打开并显示CCS主界面。
2.CCS的窗口、菜单和工具条
(1)窗口
一个典型的CCS集成开发环境窗口如图1.3所示。
图1.2设置窗的系统配置栏目
图1.3CCS集成开发环境窗口
●工程窗口:
用来组织用户的若干程序构成一个项目,用户可以从工程列表中选中需要编辑和调试的特定程序。
●源程序编辑窗口:
用户既可编辑程序,又可设置断点、探针调试程序。
●反汇编窗口:
帮助用户查看机器指令,查找错误。
●内存单元显示窗口:
可以查看、编辑内存单元。
●寄存器显示窗口:
可以查看、编辑寄存器
●图形显示窗口:
据用户需要直接或经过处理后显示数据。
(2)菜单
●File菜单:
提供了与文件相关的命令,如New、Load等。
●Edit菜单:
提供了与编辑有关的命令,如Register等。
●View菜单:
是否显示工具栏、窗口和各种对话框。
●Project菜单:
使用工程管理设计文档,如 Compile、Biuld等。
●Debug菜单:
提供常用调试命令,如Breakpoints、ProbePoints等。
●Profiler菜单:
CCS在调试程序时,统计某一块程序执行所需要的CPU时钟周期数、子程序被调用数和中断发生次数等统计信息。
●Option菜单:
提供CCS的一些设置选项。
(3)工具条
●StandardToolbar:
包括新建、保存、复制、粘贴、查找、打印和帮助等。
●ProjectToolbar:
包括编译文件、设置和移去断点/ProbePoint等功能。
●EditToolbar:
提供一些常用的查找和设置标签命令。
●GELToolbar:
提供了执行GEL函数的一种快捷方法。
●ASM/SourceSteppingToolbar:
提供了单步调试C或汇编源程序的方法
●TargetControlToolbar:
提供了目标程序控制的一些工具
●DebugWindowToolbar:
提供了调试窗口工具
3.CCS工程管理
CCS对程序采用工程(Project)的集成管理方法。
工程保持并跟踪在生成目标程序或库过程中的所有信息。
典型工程文件包括:
源程序文件名和目标库;头文件;编译器、汇编器和链接器选项。
以下是建立新工程,并完成编译和链接,形成可执行文件的步骤:
(1)创建一个工程
通过“Project→New”,创建一个工程,输入自定的工程名,在工程窗口的Projects下面可看到工程名(*.pjt)。
(2)创建新的源文件:
选择“File→New→SourceFile(文件→新文件→源文件)”,将打开一个新的源文件编辑窗口;在新的源代码编辑窗口输入代码;选择“File→Save(文件→保存)”或“File→SaveAs(文件→另存为)”,保存文件。
(3)向工程中添加源文件
通过“Project→AddFilestoProject”,将源文件(如aaa.asm)添加到工程中;用同样方法将复位向量Vectors.asm添加到工程中;再将链接命令文件(如aaa.cmd)添加到工程文件中。
此时,使用工程观察窗口(单击工程文件夹、工程名和各个文件夹上的“+/-”号)即可查看添加的文件。
(4)工程的编译和链接
通过“Project→RebuildAll”,对工程进行编译。
此时,主窗口将显示编译和链接过程中出现的错误,打开源文件修改后保存,再通过“Project→RebuildAll”,对工程进行重新编译,生成可执行的目标文件(如aaa.out)。
4.程序运行和调试
(1)通过“File→LoadProgram”,选中目标文件(aaa.out)并打开,将程序加载到DSP。
(2)复位(CCS提供3种方法)
●Debug→ResetCPU,初始化所有R并停止运行程序。
●Debug→Restart,将PC恢复到当前载入程序的入口地址,但不执行当前程序。
●Debug→Gomain,提供一种快速运行用户应用程序的方法。
(3)程序执行方式(3类)
① 单步执行操作
●单步进入:
Debug→StepInto:
每操作一次,执行一条指令;
●单步执行:
Debug→StepOver:
每操作一次,执行一条指令(函数,子程序看作一条);
●单步调出:
Debug→StepOut:
从子程序跳出;
●执行到光标处:
Debug→RuntoCursor:
程序运行到光标所在语句。
②连续运行操作(实时运行)
●运行程序:
Debug→Run:
从当前PC所指位置开始执行到结束或断点;
●停止程序:
Debug→Halt:
暂停程序的执行;
●自由运行:
Debug→Runfree:
全速执行用户程序,忽略所有断点。
③断点运行程序(动画)
在执行各个命令前应当预先设置好程序断点,每按一次按钮,从当前程序位置执行到所有遇到的第一个断点。
●设置断点命令:
Debug→Breakpoints程序执行到断点时将停止运行。
●设置探测点:
Debug→ProbePoints允许更新观察窗口并在设置ProbePoints处将PC文件数据读至存储器或将存储器数据写入PC文件,此时应设置FileI/O属性。
●动画运行程序命令:
Debug→animate;当碰到断点时程序暂时停止运行,在更新未与任何ProbePoints相关联的窗口后程序继续执行。
该命令的作用是在每个断点处显示处理器的状态,可以在Option菜单下选择AnimateSpeed来控制其速度。
(4)存储器、寄存器、变量的操作
①存储器:
●拷贝数据块:
Edit→Memory→Copy:
拷贝某段内存到一新位置(在对话框填入相应参数);
●填充数据块:
Edit→Memory→Fill:
用特定数据填充某段内存;
●察看/编辑内存:
View→Memory,:
检查和修改某特定区域内存单元数据;
●编辑某一内存单元方法:
在内存窗口鼠标左键双击。
②寄存器
●显示寄存器:
View→CPURegisters;
●编辑寄存器:
Edit→CPURegisters或双击或右键弹出菜单;
③变量
●加入观察变量:
View→WatchWindow
●删除观察变量:
●观察数组或结构变量:
某些变量可能包含多个单元,如:
数组、结构或指针等,当加入到观察窗口时,会有“+”或“-”的前缀,分别表示已展开或未展开。
●编辑变量:
Edit→EditVariable对话框中填入变量名和新值;变量名前应加“*”前缀,否则显示的是变量地址;
(5)数据输入/输出
●数据读入/写出功能命令:
File→Data(Lode/Save),用于偶尔的手工读入/写出场合
●利用探针功能:
适用于自动调入和输出数据场合。
(6)图形窗口分析数据
CCS提供了四类9种显示功能:
每种显示所需的设置参数各不相同。
●时频图
●
●星座图:
信号的相位分布;
●眼图:
信号码间干扰情况;
●图像显示:
YUV或RGB;
(7)评估代码性能
用户完成一个算法设计和编程后,一般需要测试程序效率以便进一步优化代码。
CCS提供了“代码性能评估”工具来帮助用户评估代码性能。
基本方法:
在适当的语句位置设置断点。
当程序执行通过断点时,有关代码执行的信息被收集并统计信息评估代码性能。
实验要求:
1.叙述CCS开发软件安装过程。
2.写出CCS调试C54汇编程序的一般方法。
实验设备:
1.PC机一台;
2.CCS开发软件一套;
3.DSP教学实验系统一套。
实验二定点DSP加、减、乘、除法运算
实验目的:
学习使用16位定点DSP的基本编程方法及调试步骤。
实验原理:
1.定点DSP中的数据表示方法
C54X是16位的定点DSP。
一个16位的二进制数既可以表示一个整数,也可以表示一个小数。
DSP表示整数时,分为有符号数和无符号数两种格式。
作为有符号数表示时,其最高位表示符号,最高位为0表示其为正数,为1表示其为负数;次高位表示
,次低位表示
,最低位表示
。
例如,有符号数所能够表示的最大的正数为07FFFh,等于32767,而0FFFFh表示最大的负数-1(负数用2的补码方式显示)。
作为无符号数表示时,最高位仍然作为数值位计算,为
。
无符号数能够表示的最大的数为0FFFFh,等于十进制数的65535。
在后面的实验中,除非有特别说明,我们指的都是有符号数。
2.16位定点加、减、乘、除法的实现方法
C54X中提供了多条用于加法的指令,如ADD,ADDC,ADDM和ADDS;其中ADDS用于无符号数的加法运算,ADDC用于带进位的加法运算(如32位扩展精度加法),而ADDM专用于立即数的加法。
C54X中提供了多条用于减法的指令,如SUB,SUBB,SUBC和SUBS。
其中SUBS用于无符号数的减法运算,SUBB用于带进位的减法运算(如32位扩展精度的减法),而SUBC为移位减,DSP中的除法就是用该指令来实现的。
在TMS320C54x中提供大量的乘法运算指令,其结果都是32位的,放在A或B累加器中。
乘数在TMS320C54x的乘法指令中很灵活,可以是T寄存器、立即数、存储单元和A或B累加器的高16位。
若是无符号数乘,使用MPYU指令,这是一条专用于无符号数乘法运算的指令,而其他指令都是有符号数的乘法。
在C54X中没有提供专门的除法指令,一般有两种方法来完成除法。
一种是用乘法来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。
这种方法对于除以常数特别适用。
另一种方法是使用SUBC指令,重复16次减法完成除法运算。
为了实现两个数相除,先将被除数装入A或B的低16位,接着重复执行SUBC指令,用除数重复减16次后,除法运算的商在累加器的低16位,余数在高16位。
实验内容:
使用C54X汇编语言编写16位定点DSP加、减、乘、除法实验程序,在仿真器上调试运行,并记录分析运算结果。
实验步骤:
1.编写实验程序代码
本实验需编写3个程序文件:
(1)完成定点加法、减法、乘法和除法的源程序(*.asm);
(2)复位向量源程序(Vector.asm);
(3)链接命令文件(*.cmd)。
2.创建工程并编译/连接(详细步骤见实验一)
创建一个工程(*.pjt),将源文件(*.asm)、Vector.asm、链接命令文件(*.cmd)添加到工程文件中。
使用ccs进行编译/连接,得到(*.out)文件后,就可以在simulator上调试运行。
3.调试运行并观察结果
运算程序之间有一条需要加断点的标志语句:
NOP;当执行到这条加了断点的语句时,程序将自动暂停。
这时可以通过“存贮器窗口”或“寄存器窗口”检查计算结果(十六进制数)。
实验源程序参见附录。
调试步骤如下:
(1)点击file→loadprogram,找到*.out并装入。
这时可在反汇编窗口看到程序代码。
(2)在反汇编窗口中,在每个“nop”指令处都设一个断点,方法是:
将鼠标停在该指令处,点击鼠标右键,选中“Togglebreakpoint”,则该指令左端将出现一个红色圆点,表明已设好断点。
也可在菜单栏中选择debug→breakpoint,然后在弹出的对话框中键入欲加断点的地址即可(注意地址的格式)。
(3)通过“View→Memory”打开存贮器窗口,并在其中选择要查看的存贮器”data”,地址段:
0x060-0x080。
(4)通过“View→CPUReqisters”打开CPU寄存器窗口,可查看A的内容。
(5)复位:
通过Debug→ResetCPU,初始化所有R并停止运行程序
(6)单击Run快捷键(或者F5按钮),启动执行基本算术运算程序,程序在执行完加法运算后自动暂停。
通过register窗口可以看到寄存器A的内容为0x0035,这正是加法运算的结果。
(7)继续单击Run快捷键(或者F5按钮),程序从当前PC继续运行,完成减法运算。
当程序再次暂停时,查看寄存器A的内容。
(8)按照类似的方法,可完成乘法、除法等运算,并记录结果。
(9)如果以上程序运行不正确,请检查代码是否输入正确,还可以在源代码中插入断点调试,也可采用单步执行的方式调试。
实验要求:
1.写出调试通过的实验程序,包括源程序和链接命令文件。
2.写出实验结果。
实验设备:
1.PC机一台;
2.CCS开发软件一套;
3.DSP教学实验系统一套。
附参考程序:
*=====================================*
****实现16位定点加/减/乘/除法*********
*=====================================*
.title“exp17.asm”
.mmregs
.defstart
.def_c_int00
DAT0.set60h
DAT1.set61h
DAT2.set62h
DAT3.set63h
.text
ADD3.macroP1,P2,P3,ADDRP;三数相加宏定义:
ADDRP=P1+P2+P3
LDP1,A
ADDP2,A
ADDP3,A
STLA,ADDRP
.endm
_c_int00:
Bstart
start:
LD#000h,DP;置数据页指针
STM#1000h,SP;置堆栈指针
SSBXINTM;禁止中断
bk0:
ST#0012h,DAT0
LD#0023h,A
ADDDAT0,A;加法操作:
A=A+DAT0
NOP
bk1:
ST#0054h,DAT0
LD#0002h,A
SUBDAT0,A;减法操作:
A=A-DAT0
NOP
bk2:
ST#0345h,DAT0
STM#0002h,T
MPYDAT0,A;乘法操作:
A=DAT0*T
NOP
bk3:
ST#1000h,DAT0
ST#0041h,DAT1
RSBXSXM;无符号除法操作:
DAT0÷DAT1
LDDAT0,A
RPT#15
SUBCDAT1,A
STLA,DAT2
STHA,DAT3;结果:
商在DAT2;余数在DAT3
NOP
bk4:
ST#0333h,DAT0
SQURDAT0,A;平方操作:
A=DAT0*DAT0
NOP
bk5:
ST#0034h,DAT0
ST#0243h,DAT1
ST#1230h,DAT2
ADD3DAT0,DAT1,DAT2,DAT3;宏调用DAT3=DAT0+DAT1+DAT2
NOP
.end
---------------/复位向量/-----------------------------
.title"vectors.asm"
.refstart
.sect".vectors"
rst:
Bstart
.end
---------------/链接命令exp17.cmd/--------------------
MEMORY
{
PAGE0:
EPROM:
org=0E000hlen=01F80h
VECS:
org=0FF80hlen=00080h
PAGE1:
SPRAM:
org=00060hlen=00030h
DARAM:
org=00090hlen=01380h
}
SECTIONS
{
.text:
>EPROMPAGE0
.data:
>EPROMPAGE0
.bss:
>SPRAMPAGE1
.vectors:
>VECSPAGE0
}
――――――――――――/程序运行结果参考/――――――――――――――
加法:
寄存器A的内容为0000000035h。
减法:
寄存器A的内容为FFFFFFFFAEh。
乘法:
寄存器A的内容为000000068Ah。
除法:
商在DAT2(0062h)=003Fh;余数在DAT3(0063h)=0001h。
平方:
寄存器A的内容为00000A3C29h。
三数相加宏调用:
DAT3(0063h)=14A7h。
实验三数据块传送程序
实验目的:
学习将存储器中的一批数据传送到存储器的另一个地址空间,实现数据块的搬移。
实验原理:
C54x有10条数据传送指令,共有4种类型:
(1)程序存储器←→数据存储器(MVPD,MVDP)。
重复执行MVPD指令,实现程序存储器至数据存储器的数据传送,在系统初始化过程中是很有用的。
这样,就可以将数据表格与文本一道驻留在程序存储器中,复位后将数据表格传送到数据存储器,从而不需要配置数据ROM,使系统的成本降低。
(2)数据存储器←→数据存储器(MVDK,MVKD,MVDD)。
在数字信号处理(如FFT)时,经常需要将数据存储器中的一批数据传送到存储器的另一个地址空间,上述指令可实现数据块的搬移。
(3)数据存储器←→MMR(MVMD、MVDM,MVMM)
(4)程序存储器(由ACC寻址)←→数据存储器(READA,WRITA)
这些指令的特点如下:
●传送速度比加载和存储指令要快;
●传送数据不需要通过累加器;
●可以寻址程序存储器;
●与RPT指令相结合时,这些指令都变成单周期指令,实现数据块传送。
实验内容:
使用C54X汇编语言编写一段源程序,首先对数组x[20]赋值(初始值在程序存储器),再将数据存储器中的数组x[20]复制到数组y[20],在仿真器上调试运行,并记录分析运算结果。
实验步骤:
1.编写实验程序代码
编写汇编源程序代码(*.asm)。
实验源程序请参见附录。
编写链接命令文件(*.cmd),要求实现20个数据先从程序存储器EPROM传送到数据存储器SPRAM的0060h~0073h单元,实现数据的初始化,再从0060h~0073h单元传送到0074h~0087h单元,实现数据搬移。
注意,实际看到的是十六进制数。
2.创建工程并编译/连接
创建一个工程(*.pjt),将源文件(*.asm)、Vector.asm、链接命令文件(*.cmd)添加到工程文件中。
使用ccs进行编译/连接,得到(*.out)文件。
3.调试运行并观察结果
点击file→loadprogram,找到*.out并装入。
这时可在反汇编窗口看到程序代码。
运行程序,这时可以通过“存贮器窗口”检查运行结果(十六进制数)。
●通过“View→Memory”打开存贮器窗口,并在其中选择要查看的存发贮器”data”,地址段从0x060开始。
●再通过“View→Memory”打开存贮器窗口,并在其中选择要查看的存贮器”Program”,地址段从0xE000开始。
如果以上程序运行不正确,请检查代码是否输入正确,还可以在源代码中插入断点调试,注意对中间结果的观察。
实验要求:
1.写出调试通过的实验程序,包括源程序和链接命令文件。
2.写出实验结果。
实验设备:
1.PC机一台;
2.CCS开发软件一套;
3.DSP教学实验系统一套。
思考题:
在程序中使用了辅助寄存器AR1,AR2,AR3,请说明在执行完程序后辅助寄存器AR1,AR2,AR3的值分别为多少?
附参考程序:
*=========================================================*
*首先对数组x[20]赋值,再将数据存储器中的数组x[20]复制到数组y[20]*
*=========================================================*
.title“exp15.asm”
.mmregs
.def_c_int00
STACK.usect“STACK”,30h
.bssx,20
.bssy,20
.data
table:
.word1,2,3,4,5,6,7,8,9,10
.word11,12,13,14,15,16,17,18,19,20
.defstart
.text
_c_int00:
Bstart
start:
STM#x,AR1
RPT#19
MVPDtable,*AR1+;程序存储器传送到数据存储器
STM#x,AR2
STM#y,AR3
RPT#19
MVDD*AR2+,*AR3+;数据存储器传送到数据存储器
end:
Bend
.end
-----------------/链接命令exp15.cmd/--------------------
MEMORY
{
PAGE0:
EPROM:
org=0E000hlen=01F80h
VECS:
org=0FF80hlen=00080h
PAGE1:
SPRAM:
org=00060hlen=00030h
DARAM:
org=00090hlen=01380h
}
SECTI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 实验 指导书