DSP实验指导书.docx
《DSP实验指导书.docx》由会员分享,可在线阅读,更多相关《DSP实验指导书.docx(26页珍藏版)》请在冰豆网上搜索。
DSP实验指导书
目录
实验一DSP系统软硬件熟悉
实验二数据存储、汇编程序实验
实验三I/O、定时器实验
实验一DSP系统软硬件熟悉
一、实验目的
1、了解DSP开发系统的组成和结构;
2、熟悉DSP开发系统的连接;
3、熟悉CCS的开发界面;
二、实验设备
计算机,CCS2.0版软件,DSP仿真器,实验箱。
三、实验步骤与内容、
项目一:
熟悉系统硬件安装与实验运行
1、系统连接
进行DSP实验之前,先必须连接好仿真器、实验箱及计算机,连接方法如下所示:
2、上电复位
在硬件安装完成后,确认安装正确、各实验部件及电源连接正常后,接通仿真器电源,启动计算机,此时,仿真器上的“红色小灯”应点亮,否则DSP开发系统有问题。
3、运行CCS程序
待计算机启动成功后,实验箱后面220V输入电源开关置“ON”,实验箱上电,启动CCS,此时仿真器上的“绿色小灯”应点亮,并且CCS正常启动,表明系统连接正常;否则仿真器的连接、JTAG接口或CCS相关设置存在问题,掉电,检查仿真器的连接、JTAG接口连接,或检查CCS相关设置是否正确。
注:
如在此出现问题,可能是系统没有正常复位或连接错误,应重新检查系统硬件并复
位;也可能是软件安装或设置有问题,应尝试调整软件系统设置,具体仿真器和仿真
软件CCS的应用方法参见课本第四章。
●成功运行程序后,首先应熟悉CCS的用户界面
●学会CCS环境下程序编写、调试、编译、装载,学习如何使用观察窗口等。
4、修改样例程序,尝试DSP其他的指令。
注:
实验系统连接及CCS相关设置是以后所有实验的基础,在以下实验中这部分内容将不再复述。
5、填写实验报告。
6、样例程序实验操作说明
仿真口选择开关K9拨到右侧,即仿真器选择连接右边的CPU:
CPU2;
启动CCS2.0,在ProjectOpen菜单打开exp01_cpu2目录下面的工程文件“exp01.pjt”
注意:
实验程序所在的目录不能包含中文,目录不能过深,如果想重新编译程序,去掉所有文件的只读属性。
用下拉菜单中Project/Open,打开“exp01.pjt”,双击“Source”,可查看源程序
在FileLoadProgram菜单下加载exp01_cpu2\debug目录下的exp01.out文件:
加载完毕,单击“Run”运行程序;
实验结果:
可见指示灯D1定频率闪烁;单击“Halt”暂停程序运行,则指示灯停止闪烁,如再单击“Run”,则指示灯D1又开始闪烁;
注:
指示灯D1在CPLD单元的右上方
关闭所有窗口,本实验完毕。
项目二:
熟悉CCS软件开发工具
本项目将学习开发一个具备基本信号处理功能的DSP程序的过程。
掌握如何创建一个工程、向工程中添加源文件、浏览代码、编译和运行程序、修改Build选项并更正语法错误、使用断点和Watch窗口等基本应用以及使用探针和图形显示的方法。
Ø基本应用
1.创建一个工程
(1)选择“Project
New(工程
新建)”,弹出工程建立对话框。
(2)在Project栏输入文件名Volume。
默认的工作目录是C:
\ti\myprojects\(假设CCS安装在C:
\ti下),其他两项也选默认即可。
(3)单击“完成”按钮,将在工程窗口的Project下面创建Volume工程。
2.向工程中添加源文件
(1)将“C:
\ti\tutorial\sim54xx\Volume1”(假设CCS安装在C:
\ti下)下全部文件复制到新建的“C:
\ti\myprojects\Volume”目录下。
(2)选择“Project
AddFilestoProject(工程
加载文件)”,在文件加载对话框中选择Volume.c文件,点击打开按钮将Volume.c添加到工程中,如图所示。
(3)用同样方法将Vector.asm添加到工程中。
Vector.asm中包含的是将RESET中断指向C程序入口c_int00的汇编指令和其他中断的入口指令。
如果调试的程序更为复杂,则可在Vector.asm中定义更多的中断矢量。
(4)将Volume.cmd添加到工程文件中。
该文件的作用是将段(Sections)分配到存储器中。
(5)将load.asm添加到工程文件。
该文件包含一个简单的汇编循环程序,被C程序调用。
调用时带有一个参数(argument),执行此程序共需约1000×argument个指令周期。
(6)将“C:
\ti\c5400\cgtools\lib”下的rts.lib加入到工程文件中。
该文件是采用C语言开发DSP应用程序的运行支持库函数。
在工程中双击所有“+”,即可看到整个工程的文件。
在以上的操作中,没有将头文件加到工程中,CCS将在Bulid时自动查找所需的头文件。
3.浏览代码
双击Project视图中的Volume.c,将在代码窗口看到源文件代码。
#include
#include"volume.h"
/*Globaldeclarations*/
intinp_buffer[BUFSIZE];/*processingdatabuffers*/
intout_buffer[BUFSIZE];
intgain=MINGAIN;/*volumecontrolvariable*/
unsignedintprocessingLoad=BASELOAD;/*processingroutineloadvalue*/
structPARMSstr=
{
2934,
9432,
213,
9432,
&str
};
/*Functions*/
externvoidload(unsignedintloadValue);
staticintprocessing(int*input,int*output);
staticvoiddataIO(void);
/*
*========main========
*/
voidmain()
{
int*input=&inp_buffer[0];
int*output=&out_buffer[0];
puts("volumeexamplestarted\n");
/*loopforever*/
while(TRUE)
{
/*
*Readinputdatausingaprobe-pointconnectedtoahostfile.
*Writeoutputdatatoagraphconnectedthroughaprobe-point.
*/
dataIO();
#ifdefFILEIO
puts("beginprocessing")/*deliberatesyntaxerror*/
#endif
/*applygain*/
processing(input,output);
}
}
/*
*========processing========
*
*FUNCTION:
applysignalprocessingtransformtoinputsignal.
*
*PARAMETERS:
addressofinputandoutputbuffers.
*
*RETURNVALUE:
TRUE.
*/
staticintprocessing(int*input,int*output)
{
intsize=BUFSIZE;
while(size--){
*output++=*input++*gain;
}
/*additionalprocessingload*/
load(processingLoad);
return(TRUE);
}
/*
*========dataIO========
*
*FUNCTION:
readinputsignalandwriteprocessedoutputsignal.
*
*PARAMETERS:
none.
*
*RETURNVALUE:
none.
*/
staticvoiddataIO()
{
/*dodataI/O*/
return;
}
从以上代码可以看出:
(1)主程序显示一条提示信息后,进入一个无限循环,不断调用dataIO和processing两个函数。
(2)processing函数将输入buffer中的数与增益相乘,并将结果送给输出buffer,它还调用汇编load例程的参数processingLoad的值计算指令周期的时间。
(3)dataIO函数不执行任何实质操作。
它没有使用C代码执行I/O操作,而是通过CCS中的ProbePoint工具,从PC机文件中读取数据到inp_buffer中,作为processing函数的输入参数。
4.编译和运行程序
(1)选择“Project
RebuildAll(工程
重新编译)”,对工程进行重新编译。
(2)选择“File
LoadProgram(文件
下载程序)”,选volume.out并打开,将Build生成的程序加载到DSP。
(3)选择“View®MixedSource/ASM(查看®混合C程序/汇编)”。
该设置使得C程序与其汇编结果同时显示。
(4)在反汇编窗口中单击汇编指令,按F1键切换到在线帮助窗口,显示光标所在行的关键词的帮助信息。
(5)选择“Debug®GoMain(调试®到主程序首)来使得程序从主程序开始执行。
(6)选择“Debug
Run(调试
运行)”,可以在Output窗口看到“beginprocessing”信息。
(7)选择“Debug®Halt(调试®停止),中止正在执行的程序。
5.修改Build选项并更正语法错误
在以上的程序中由于FILEIO没有定义,因而在编译时将忽略程序中的部分代码,这样在链接生成的DSP程序中也不包括这部分代码。
下面通过更改程序选项来定义FILEIO,从而将这部分代码生成到执行程序中
(1)选择“Project®BuildOptions(工程®编译选项)”。
(2)在Compiler栏的Categroy域,单击Preprocessor。
在右侧的DefineSymbols中键入FILEIO。
这时将在编译参数栏中看到-dFILEIO,如图所示。
在定义FILEIO后,C编译器将对所有的源代码进行编译。
(3)单击确定按钮保存选项设置结果。
(4)选择“Project®RebuildAll(工程®重新编译)”。
在工程选项更改后,重新编译程序是必须的。
在BuildOptions下定义FILEIO
(5)此时output窗口提示源代码中存在语法错误,错误出现在第68行,如图所示。
在该行后加分号后存盘,再重新编译程序并生成新的volume.out文件。
6.使用断点和Watch窗口
(1)选择“File
ReloadProgram(文件
重新下载程序)”,重新下载程序。
(2)在工程视图中双击volume.c,打开源文件编辑窗口。
(3)将光标放在“dataIO();”行。
(4)右击鼠标,在弹出菜单上选择Togglebreakpoint,设置断点。
(5)选择“View®WatchWindow(查看®观察窗口)”,将出现Watch窗口。
程序运行时WatchWindow窗口将显示要查看的变量值。
(6)选择Watch1栏。
(7)在Watch1窗口单击
图标,在name栏输入dataIO。
(8)选择“Debug®GoMain(调试®到主程序首)”。
(9)选择“Debug®Run(调试®运行)”,运行程序,如图所示。
显示出dataIO是一个函数,该函数存放的首地址是0x00001457。
7.使用Watch窗口观察结构体
仿照上面的方法,在Watch窗口中加入str结构体变量。
可以看到在str左边有一个“+”标志,表明str是一个结构体。
双击“+”后将看到str结构体中包含的元素,如图所示,双击每个元素可以更改其数值大小。
在Watch窗口中单击右键,在弹出菜单时还可选择:
移去一个表达式、隐藏Watch窗口等。
可以通过选择“Debug®Breakpoints(调试®断点)”,在该窗口中单击DeleteAll按钮将所有断点去掉。
Ø探针和显示图形的使用
学习创建和测试一个简单数字信号算法的过程,所需处理的数据放在PC机文件中。
学习使用探针和图形显示的方法
ProbePoint是开发算法的一个有用工具,可以使用ProbePoint从PC机文件中存取数据。
即:
●将PC机文件中数据传送到目标板上的buffer,供算法使用。
●将目标板上buffer中的输出数据传送到PC机文件中以供分析。
●更新一个窗口,如由数据绘出的Graph窗口。
ProbePoint与Breakpoints都会中断程序的运行,但ProbePoint与Breakpoints在以下方面不同。
ProbePoint只是暂时中断程序运行,当程序运行到ProbePoint时会更新与之相连接的窗口,然后自动继续运行程序;Breakpoints中断程序运行后,将更新所有打开的窗口,且只能用人工的方法恢复程序运行;ProbePoint可与FILEIO配合,在目标板与PC文件之间传送数据,Breakpoints则无此功能。
下面讲述如何使用ProbePoint将PC机上文件中的内容作为测试数据传送到目标板。
同时使用一个断点以便在到达ProbePoint时自动更新所有打开的窗口。
1.为FILEI/O添加ProbePoint
(1)打开上小节已经完成的程序,并进行编译。
(2)选择“File®LoadProgram(文件®下载程序)”。
选择volume1.out文件,并点击“打开”。
(3)双击volume.c,以便在右边的编辑窗口显示源代码。
(4)将光标放在主函数的dataIO()行上。
(5)单击右键,在弹出菜单中选择“ToggleProbePoint”,添加ProbePoint。
(6)在file(文件)菜单,选择“FileI/O”,出现FileI/O对话框,如图所示,在对话框中选择输入/输出文件
(7)在“FileInput”栏,单击“AddFile”
(8)在volume.c文件所在目录选择sina.dat,并单击打开。
此时将出现一个控制窗口,如图所示。
可以在运行程序时使用这个窗口来控制数据文件的开始、停止、前进、后退等操作。
(9)在FileI/O对话框中,在Address域填入inp_buffer,在length域填入100,同时将WrapAround框选中。
这几部分值含义如下:
9
●Address域指示的是从文件中读取的数据将要存放的地址。
inp_buffer是在volume.c中定义的整型数组,其长度为BUFFSIZE。
●Length域指示的是每次到达ProbePoint时从数据文件中读取多少个样点。
这里取值为100是因为BUFFSIZE=100,即每次取100个样值放在输入缓冲中。
如果Length超过100则可能导致数据丢失。
●选中WrapAround表明读取数据的循环特性,每次读至文件结尾处将自动从文件头开始重新读取数据。
这样将从数据文件中读取一个连续(周期性)的数据流。
(10)单击“AddProbePoint”,将出现“Break/ProbePoints”,如图所示,选中“ProbePoints”栏。
(11)在ProbePoint列表中显示有“VOLUME.Cline61-->NoConnection”行。
表明该第61行已经设置ProbePoint,但还没有和PC文件关联。
(12)在Connect域,单击向下箭头并从列表中选sine.dat。
(13)单击Replace按钮,ProbePoint列表框表示ProbePoint已与sine.dat文件相关联。
(14)单击确定按钮,FileI/O对话框指示文件连至一个ProbePoint。
(15)单击确定按钮,关闭FileI/O对话框。
2.显示图形
如果现在运行程序,将看不到任何程序运行结果。
当然可以设置Watch窗口观察inp_buffer和out_buffer等的值,但需要观察的变量很多,而且显示的也只是枯燥的数据,远不如图形显示直观、友好。
CCS提供很多方法将程序产生的数据图形显示,包括时域/频域波形显示,星座图、眼图等。
在本例中使用时域/频域波形显示功能观察一个时域波形。
(1)选择“ViewGraphTime/Frequency(显示图形时域/频域)”。
弹出GraphProperty对话框,如图所示。
(2)在GraphProperty对话框中,更改GraphTitle(图形标题)、StartAddress(起始地址)、AcquisitionBufferSize(采集缓冲区大小)、DSPDataType(DSP数据类型)、Autoscale(自动伸缩属性)及MaximumY-alue(最大Y值)。
(3)单击OK按钮,将出现一个显示inp_buffer波形的图形窗口。
(4)在图形窗口中单击右键,从弹出菜单中选择ClearDisplay,清除已显示波形。
(5)再次执行“ViewGraphTime/Frequency”。
(6)将GraphTitle修改为outputbuffer,StartAddress修改为out_buffer,其他设置不变。
(7)单击OK按钮,出现一个显示out_buffer波形的图形窗口,同样单击右键从菜单中选ClearDisplay,清除已有显示波形。
3.动态显示程序和图形
到现在为止,我们已经设置了一个ProbePoint。
它将临时中断程序运行,将PC机上数据传给目标板,然后继续运行程序。
但是,ProbePoint不会更新图形显示内容。
本节将设置一个断点,使图形窗口自动更新。
使用Animate命令,使程序到达断点时更新窗口后自动继续运行。
(1)在volume.c窗口,将光标放在dataIO行上。
(2)在该行上同时设置一个断点和一个ProbePoint,这使得程序在只中断一次的情况下执行两个操作:
传送数据和更新图形显示。
(3)重新组织窗口以便能同时看到两个图形窗口。
(4)在Debug菜单单击Animate。
此命令将运行程序,碰到断点后临时中断程序运行,更新窗口显示,然后继续执行程序。
与Run不同的是,Animate会继续执行程序直到碰到下一个断点。
只有人为干预时,程序才会真正中止运行。
可以将Animate命令理解为一个“运行中断继续”的操作。
(5)每次碰到ProbePoint时,CCS将从sine.dat文件读取100个样值,并将其写至输入缓冲inp_buffer。
由于sine.dat文件保存的是40个采样值的正弦波形数据,因此每个波形包括2.5个sine周期波形,如图所示。
(6)选择“DebugHalt(调试停止)”,停止程序运行。
Gain=1时的输入/输出图形显示
4.增益调节
本程序将输入缓冲的数据与增益相乘后送至输出缓冲中:
output++=input++*gain
增益被初始化为MINGAIN,在volume.h中定义为1。
为改变输出值,需改变增益,方法之一是使用Watch功能。
(1)选择“ViewWatchWindow(查看观察窗口)”。
(2)在Watch窗口单击右键,选择“InsertNewExpression”。
(3)键入Gain作为要观察的表达式,单击OK按钮。
(4)如程序已中止运行,单击Animate按钮重新运行程序。
(5)在Watch窗口双击Gain。
(6)在变量编辑窗口将Gain值改为10,单击OK按钮。
(7)注意到输出缓冲图中的幅度值已经变为原来的10倍,如图所示。
Gain=10时的输入/输出图形显示
实验二数据存储、汇编程序实验
一、实验目的
1、掌握TMS320C54的程序空间的分配;
2、掌握TMS320C54的数据空间的分配;
3、熟悉操作TMS320C54数据空间的指令;
4、熟悉汇编语言常用指令
二、实验设备
计算机,CCS2.0版软件,DSP仿真器,实验箱。
三、实验系统相关资源
下面给出TMS32OVC5402的存储器分配表:
对于数据存储空间而言,映射表相对固定。
值得注意的是内部寄存器都映射到数据存储空间内。
因此在编程应用是这些特定的空间不能作其他用途。
对于程序存储空间而言,其映射表和CPU的工作模式有关。
当MP/MC引脚为高电平时,CPU工作在微处理器模式;当MP/MC引脚低电平时,CPU工作在微计算机模式。
具体的存储器映射关系如上如所示。
存储器试验主要帮助用户了解存储器的操作和DSP的内部双总线结构。
并熟悉相关的指令代码和操作等。
四、实验步骤与内容
连接好DSP开发系统,开关K9拨到右边,即仿真器选择连接右边的CPU:
CPU2;
1、运行CCS软件;
2、在CCS的Memory窗口中查找C5402各个区段的数据存储器地址,在可以改变的数据地址随意改变其中内容;
3、在CCS中装载实验示范程序,单步执行程序,观察程序中写入和读出的数据存储单元内容的变化;
4、联系其他寻址方式的使用。
5、样例程序实验操作说明
启动CCS2.0,在ProjectOpen菜单打开exp02_cpu2目录下面的工程文件“exp02.pjt”。
用下拉菜单中Project-->Open,打开“exp02_CPU2\exp02.pjt”,双击“Source”,可查看源程序。
在FileLoadProgram菜单下加载exp02_cpu2\debug目录下的exp02.out文件。
用“View”下拉菜单中的“Memory”查看内存单元;
输入要查看的内存单元地址,本实验要查看0x1000H~0x100FH单元的数值变化,输入地址0x1000H;
查看0x1000H~0x100FH单元的初始值,单击“Run”运行程序,也可以“单步”运行程序;
单击“Halt”暂停程序运行;
查看0x1000H~0x100FH单元内数值的变化;
关闭各窗口,本实验完毕。
本实验说明:
本实验程序将对0x1000开始的8个地址空间,填写入0x55AA的数值,然后读出,
并存储到0X1008开始的8个地址空间。
在CCS中可以观察DATA存储器空间地址
实验三I/O、定时器实验
一、实验目的
1、了解I/O口的扩展;掌握I/O口的操作方法;
2、熟悉在C语言中访问IO口的方法
3、熟悉C54的定时器;
4、掌握C54定时器的控制方法;
二、实验设备
计算机,CCS2.