dsp实验1.docx

上传人:b****3 文档编号:4119388 上传时间:2022-11-28 格式:DOCX 页数:12 大小:546.44KB
下载 相关 举报
dsp实验1.docx_第1页
第1页 / 共12页
dsp实验1.docx_第2页
第2页 / 共12页
dsp实验1.docx_第3页
第3页 / 共12页
dsp实验1.docx_第4页
第4页 / 共12页
dsp实验1.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

dsp实验1.docx

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

dsp实验1.docx

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);

}

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

当前位置:首页 > 小学教育 > 语文

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

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