dsp实验1.docx
- 文档编号:4119388
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:12
- 大小:546.44KB
dsp实验1.docx
《dsp实验1.docx》由会员分享,可在线阅读,更多相关《dsp实验1.docx(12页珍藏版)》请在冰豆网上搜索。
dsp实验1
DSP程序的调试和分析方法
1、实验目的
1.了解TMS320C5400系列汇编语言程序的基本格式,以及编译、连接的基本过程;
2.熟悉CodeComposerStudio的使用;
3.了解C5400中标志位对计算的影响,以及计算对标志位的影响;
4.熟悉CCS集成开发环境,掌握工程的建立、编译、链接等方法;
5.掌握DSP程序调试的基本方法;
6.利用DSP实现DFT算法对离散信号进行频谱分析。
二、实验设备
1.集成开发环境CCS;
2.实验代码;
3.PC一台;
4.实验开发板以及所需电源线和导线。
三、实验原理
1、DSPCPU基础实验
与运算相关的标志位:
SXM:
当SXM置1时,数据读写按照符号扩展的方式,因此A=0xffffffff80;当SXM置0时,数据读写为无符号扩展的方式,因此A=0x000000ff80。
OVM:
当OVM置1时,数据运算的结果将按照32位饱和,因此A=0xff80000000;当OVM
置0时,数据运算不饱和,因此B=0x00fffe0000;C16:
双16位计算比较;FRCT:
乘法移位比较;TC:
比特测试比较;C:
进位、借位和大小比较;OVA,OVB:
溢出标志比较;SMUL:
(软件仿真器无法模拟该标志位,需用DSK开发板观察该位的影响)乘法饱和。
2、DSP程序的调试和分析方法
输入信号的构造方法:
离散时间信号可以用若干个幅值不同的正弦信号叠加而成,单个正弦信号的离散时间表示方式为:
,其中f表示信号频率,sf表示采样频率。
离散傅里叶变换公式:
离散傅里叶变换的目的是把信号由时域变换到频域,在频域分析信号信号特征,是数字信号处理领域常用的方法。
4、实验内容
1、DSPCPU基础
(1).基本操作
运行CCS,选择C54xxSimulator
建立一个新的项目,并加入文件cpu_basic.s54和cpu_basic.cmd
载入cpu_basic.gel
在Project→Option中加入适当的编译和连接的选项
Build整个项目,产生可执行代码(.out)
File→LoadProgram,装载可执行代码,并运行。
(2).基本调试
设置断点
单步执行
(3).练习
观察并理解程序和数据空间安排
测试SXM、OVM、C16、FRCT对计算结果的影响
测试计算和逻辑运算对TC、C、OVA、OVB的影响
(4).DSK仿真练习
a)测试SMUL标志对计算的影响
b)测试MP/MC、OVLY、DROM对计算结果的影响
MP/MC=0,切换DROM的数值,观测0xfc00地址存放的A、U律数据是否存在
MP/MC=0,OVLY=1,观测0x1000地址存放程序是否存在(改变该处为只读)
2、DSP程序的调试和分析方法
(1)、输入信号的模拟;
(2)、输出信号的图形显示和分析;
(3)、对DSP程序进行剖析。
五、实验步骤
1、DSPCPU基础实验
将实验开发板接到PC上,运行CCS,新建项目,并在保存目录下编写ccs_basic.s54和ccs_basic.cmd,并将其加入到当前工程中进行操作。
根据要求,在Project→Option中加入适当的编译和连接的选项,点击Bulid图标,编译整个项目,产生可执行代码(.out),编译无误后,File→LoadProgram,装载可执行代码,并运行。
View下拉菜单中,Graph---Time/Frequency,打开图形分析窗口在时域或频域显示信号,首先弹出的是”GraphProperty”对话框,将其中StartAddress改为0xfe00。
正弦表的长度为0x0100即256。
AcquisitionBufferSize和DisplayDatasize设为256,点击确定后生成图形。
改变MP/MC、OVLY、DROM等的值观察图形的变化并分析结果。
2、DSP程序的调试和分析方法
(1).选择Project→New命令,设置保存路径、工程名(如DFT),建立一个工程。
(2).选择File→New→SourceFile命令,建立源代码文件,编写DFT函数源代码。
(3).保存源文件到当前工程所在的文件夹,然后在工程窗口选择当前工程,调用右键菜单,选择AddFilestoProject命令,打开一个文件选择对话框,选择刚保存的源文件加入工程中。
(4).把CCS安装目录下的C5400\cgtools\librts_ext.lib文件加入工程,选择Project→BuildOptions命令,打开BuildOptions对话框,在Compiler选项卡的Advanced页选择使用远调用,即设置编译选项使用远调用(-mf)。
(5).编写链接配置文件,可参照课本3.4.4节所示CMD文件,保存到当前工程所在的文件夹,并加入工程中。
(6).根据需要调用BuildOptions对话框,对工程的编译、链接选项进行相应的设置,特别注意在Compiler选项卡的Advanced中选择远调用(-mf)。
(7).对当前工程进行编译、链接,生成可执行程序。
(8).选择File→LoadProgram命令,选择生成的.out文件下载到开发平台中并运行。
(9).定义探测点,利用FileI/O工具将准备好的数据文件输入到输入信号存储数组。
(10).在CCS中利用图形分析工具显示输入信号、输出信号,并分析输出信号是否符合DFT算法输出。
可以修改输入信号的图形分析类别为“FFTMagnitude”,根据输入信号的频谱图与输出信号比较,可以判断DFT算法编写是否正确。
(11).选择File→Data→Load/Save命令,对输入信号数据输入模拟信号,并将输出信号写入主机上的一个数据文件,然后刷新CCS中的图形显示窗口。
注意,可以在第3章的实验中对输入信号数组使用File→Data→Save命令,存储的数据文件作为本实验的输入数
据。
(12).编写GEL文件,利用GEL文件修改DSP程序中的全局变量以及模拟输入信号,然后刷新CCS中图形分析窗口。
(13).对DFT函数进行剖析,分析剖析结果。
需要从Profile菜单中选择StartNewSession,会出现测试窗口。
该窗口有4个表单:
Files表单说明项目中每个文件的测试范围信息;Functions表单一般用于统计C函数的测试信息;Ranges用于统计“测试区域”信息;Setup表单用于建立“测试段”。
设置测试
区域最方便的方法时在源文件中选中感兴趣的代码段,然后将其拖入Ranges表单即可。
运行程序,程序运行时间的数据在窗口中显现。
Count表示该段程序在运行停止之前所运行过的次数,其他的各项均表示运行时间信息,以指令周期为单位。
注意:
单句无法作Profile统计,只能用Clock来看执行所耗费的时钟周期。
.保存工作区。
6、实验结果及分析
1、DSPCPU基础实验
MP/MC=0时,实验图像为:
说明片内ROM可访问,片内ROM映射到数据空间。
若MC为0,DROM为0,page设为data,则无数据显示。
说明片内ROM不映射到数据空间。
MP/MC=1时,实验图形为:
2、DSP程序的调试和分析方法
输入信号:
输出信号:
输入信号频域分析:
附录(主要程序代码):
1、DSPCPU基础实验
源文件代码:
;Target:
;BefamilarwiththeuseofCCS(CodeComposerStudio)
;******************************************************************************
;Anexampletoshowhowtowriteanassemblylanguagesourcefile
;y=a1*x1+a2*x2
;******************************************************************************
;-----------Constdefinition
STACK_ADDR.set0x0500;bottomofstack
;allocatedatain.bsssection
.bssa,2;allocate5wordforvariates
.bssx,2
.bssy,1
;allocatedatain.datasection
.data
table:
;datafollows...
.word10,3
.word8,6
.mmregs;enablememorymappedregisters
.globalmain;defineglobalsymbols
;------------------------------------------------------------------------------
.text
main:
stm#STACK_ADDR,SP;setstack
stm#0x00a8,PMST;relocateInterruptVectorTable
stm#0x0000,SWWSR;nosoftwarewaitforallmemory
;================================================
stm#a,AR2;AR1pointtoa
stm#table,AR3
rpt#1;move2aivalues
mvdd*AR3+,*AR2+;fromdatamemoryintodatamemory
stm#x,AR2;AR1pointtoa
rpt#1;move2xivalues
mvdd*AR3+,*AR2+;fromdatamemoryintodatamemory
callSUM;callfunctiontodosum
;deadloopparttolockPCinaknowareawhenprogramends
dead_loop:
nop
nop
nop
bdead_loop
;================================================
;y=a1*x1+a2*x2
SUM:
stm#a,AR3
stm#x,AR4
rptzA,#1
mac*AR3+,*AR4+,A
stlA,*(y)
ret
;------------------------------------------------------------------------------
;InterruptVectorTable,forsimplicityOnlyRESETinterruptisdefined
.sect"vectors"
int_RESET:
bmain;whenreset,jumptomain
nop
nop
.space124*16;nootherinterruptused,keepthemspace
;endoflab1.s54
2、DSP程序的调试和分析方法
源文件代码:
#include
#include
#include"dft.h"
#defineFILEIO//可以屏蔽dataIn函数中的赋值
main()
{
while
(1)
{
dataIn();//此处缺分号
processing(in);
}
}
voiddataIn()
{
#ifndefFILEIO
inti;
for(i=0;i in[i]=(3.0*sin(2.0*pi*i*F1/FS)+sin(2.0*pi*i*F2/FS))*1024; #endif } voidDFT(int*p_in,int*p_out,intn) { COMPLEXdft1;inti,j;floatarg; for(i=0;i { dft1.re=0;dft1.imag=0; for(j=0;j { arg=-2*pi*i*j/n; dft1.re+=p_in[j]*cos(arg); dft1.imag+=p_in[j]*sin(arg); } p_out[i]=sqrt(dft1.re*dft1.re+dft1.imag*dft1.imag)/512; }//此处缺掉一个},使括号不对应 } voidprocessing(int*input) { intn=N,x; while(n--){ x=*input*gain; *input++=x; } DFT(in,out,N); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- dsp 实验