DSP原理及应用实验报告.docx
《DSP原理及应用实验报告.docx》由会员分享,可在线阅读,更多相关《DSP原理及应用实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
![DSP原理及应用实验报告.docx](https://file1.bdocx.com/fileroot1/2023-1/30/cb6a9549-0b2c-4dce-9db2-fc905b06c80e/cb6a9549-0b2c-4dce-9db2-fc905b06c80e1.gif)
DSP原理及应用实验报告
学号:
DSP原理及应用实验报告
实验课程名称:
DSP原理及应用
开课学院:
指导教师姓名:
学生姓名:
学生专业班级:
2011-2012学年第一学期
利用CCS开发一个简单的应用程序
1DSP芯片介绍
TI是全球DSP的主要供应商,其DSP芯片已经发展了好几代。
其发展过程如下:
1)C2x是技术比较成熟的一代DSP处理器,在我国有着广泛的应用。
不过它已逐渐退出历史舞台。
2)C2XX是TI公司的一代高性能、低价位定点DSP处理器。
主要有TMS320C203/C204/C205,TMSC209.TMS320F206/F207,时钟频率达40M,它是TI最早使用片内内存的一代DSP芯片。
3)C54x是TI推出的又一代高性能、低功耗定点DSP处理器。
包括541,542,545,548。
C54X满足实时嵌入设备的要求。
如电信设备,无线通线设备。
4)TMS320C62XX系列是新一代超高性能DSP处理器。
例如TMS320C6201.它的最大处理能力高达1600MIPS,即16亿次每秒定点运算,是当前市场中所有的定点DSP芯片中速度最快、处理能力最强的DSP处理器。
用于移动式无线基站、调制解调器、语音压缩、多媒体系统、家电领域。
TMS320系列中同一代芯片具有相同的CPU结构,但是片内存储器和片内外设的配置是不同的。
TMS320C54xDSP具有如下的优点:
1)具有哈佛结构的CPU,具有高度的并行性;
2)包含定点,浮点,多CPU;
3)主要用于实时处理;
4)灵活的指令集;
5)高速;
6)并行;
7)性价比高;
8)c编程。
TMS320C54xDSP芯片的总体结构如下:
图1-1DSP芯片总体结构
从上图可以看出,DSP芯片具有计算,存储,和通信的功能。
这恰好与数字思想是吻合的。
只要对数字比特进行运算和存储及传输就能完成任何复杂的功能,这就是数字化的思想。
在此CPU充当计算功能,而片内存储起数据缓存作用,另外片内外围电路则是传输通道。
除上述结构特征外,DSP芯片还具有适合于数字信号处理的特点:
1)改进的哈佛结构。
冯·诺依曼结构,其特点是程序和数据共用一个存储空间。
统一编址依靠令计数器提供的地址进行区分。
由于对数据和程序进行分时读写,执行速度慢。
哈佛结构是程序和数据具有独立的存储空间,有着各有的独立总线。
由于可同时对数据和程序进行寻址,它大大地提高了数据处理能力。
改进型哈佛结构是在数据总线和程序总线之间建立交叉连接。
这样允许数据存放在程序存储器内,另外指令可存储在CACHE中。
2)流水线操作。
一个指令是分为取指令、译码、取操作数、执行。
显然是顺序的,但如果有多条这样的流水同时进行,将会大大减少指令执行时间。
3)采用硬件乘法器。
4)一套专门为数字信号处理而设计的指令系统。
5)快速的指令周期。
6)良好的多机并行运行特性,提供了并行运行的通信接口。
一个相对完备的DSP系统框图如下所示
图1-2DSP系统框图
DSP系统具有如下特点:
1)精度高,相比R/L/C网络只要提高A/D和D/A的精度将有效提高整体精度。
2)可靠性强。
由数字电路的特点所决定。
3)集成度高。
4)接口方便。
对于系统集成接口设计是关键。
5)灵活性好。
可编程。
6)保密性好。
2实验内容
2.1实验目的
1、熟悉CC(或CCS)的各种功能;(能在开发系统上,对现有汇编及C语言程序进行编译、调试及运行;能利用软件工具,观察调试过程及运行结果;能利用CC或CCS对数据进行波形分析。
)
2、能读懂程序,能将所读结果与软件仿真系统的观察结果,进行比较;
2.2实验步骤
主要包括如下步骤:
2.2.1创建工程环境
CCS提供工程文件来管理应用程序,所有有关的应用程序的信息保存在工程文件中。
工程文件记录生成一个目标DSP程序和库程序需要的所有文件和运行库。
它也包含了为编译,汇编,链接目标代码而配置的开关参数。
在这部分学习到如何创建工程文件,添加源程序文件和库文件到工程中,以及编辑源程序文件和编译连接生成目标代码。
1)创建新工程:
执行Project|NEW命令,显示文件选择对话框。
改变目录到c:
\ti\myprojects,输入“hello”做为工程文件名并保存。
2)添加源程序文件:
执行“Project|AddFletoProjects”命令,打开添加文件对话框。
反复使用这个命令,添加下文件到目录中(注意修改对话框下的文件类型):
hello.c(路径:
C:
\programfiles\ccs\tutorial\sim54xx\hello1)
vectors.asm(路径:
C:
\programfiles\ccs\tutorial\sim54xx\hello1)
hello.cmd(路径:
C:
\programfiles\ccs\tutorial\sim54xx\hello1)
rts.lib(路径:
c:
\ti\c5400\cgtools\lib\)
3)改变工程设置:
执行“Project|BuildOptions”命令,显示“BuildOptions”对话框。
这个对话框用于配置编译,汇编和链的开关。
a:
点击Compiler属性页;
b:
在Preprocesser栏选择DefineSymbles框中键入FILEIO并按Tab键。
c:
选择“确定”修改并保存这个对话框。
4)编译工程:
执行“Project|Build”命令完成对工程的编译。
5)改正源程序的错误:
事实上,程序在一处语法错误,此时可以使用编译选项定位错误类型和位置。
图2-2-1-1编译窗口
a:
双击编译窗口的第一行红字,hello.c将自动被激活。
b:
在光标所在的上一行加上“;”,改正这个错误。
c:
执行“File|Save”保存修改后的程序。
d:
再次编译工程,这次,工程将正确的编译和链接。
2.2.2基本调试功能
我们将熟悉CCS的一些基本调试功能,使用断点和观察窗口。
1)选择File|loadProgram。
2)选择View|CPURegistersCPURegisters,在CCS的右下方将出现CPU寄存器的显示框。
3)双击ProjectView中的文件hello.c,并选择Window|TileHorizontally,以便能看到源代码和反汇编代码。
4)把光标放到以下行上:
puts(“实验步骤:
\n”);
5)按F9,该行前端显示出红色光圈。
6)选择Debug|Run或按F5。
7)程序运行到光圈处停止后,按F10单步运行,同时观察CCS下面的程序运行结果输出和CPU寄存器中的变化。
图2-2-2-1运行结果
2.2.3使用观察窗口
这一节介绍如何在CCS中观察修改程序变量。
1)执行View|Watchwindow打开观察窗口。
2)在hellol.c中,选择任意一个变量,右击鼠标,选择“Quickwatch”,CC将打开Quickwatch窗口并显示选中的变量。
3)在hellol.c中,选择任意一个变量,又击鼠标,选择“Addtowatchwindow”,CC将把变量添加到观察窗口并显示选中的变量。
4)在观察窗口中双击变量,则弹出修改变量窗口,此时,可以在这个窗口中改变程序变量的值。
5)把str变量加到观察窗口中,点击变量左边的“+”,观察窗口可以展开结构变量,并且显示结构变量的每个元素的值。
图2-2-3-1观察窗口
6)把str变量加到观察窗口中,执行程序进入write_buffer函数,此时num函数超出了作用范围,可以利用stackcall窗口查看在不同作用范围的变量。
a:
执行View|CallStack打开堆栈窗口
b:
双击堆栈窗口的main()选项,此时可以查看num变量的值。
2.2.4文件的输入/输出
这一介绍如何从PC机上加载数据到目标机上。
这是一个很好的方法使用已知数据流测试算法的正确性。
在完成下面的操作以前,先介绍CodeComposer的Probe断点,这种断点允许用户在指定位置提取/注入数据Probe断点可以设置在程序的任何位置。
当程序运行到Probe断点时,与Probe断点相关的事件将被触发。
当时间结束后,程序会继续执行,在这一节里,Probe断点触发的事件是:
从PC机的数据文件加载数据到目标系统的缓冲器中。
1)在真实的系统中,read_signals函数用于读取A/D模块的数据并放到DSP缓冲区中。
在这里,代替A/D模块完成这个工作的是Probe断点。
当执行到函数read_signals时,Probe断点完成这个工作。
a:
在程序行read_signals(input)上设置断点。
b:
右击鼠标,选择ToggleProbePoint,设置Probe断点。
2)执行File|FileI/O,打开对话框。
3)点击AddFile把sine2.dat文件加到对话框中。
4)完成设置:
a:
在Address中,输入inp_buffer。
b:
在Length中,输入0x64。
c:
保证warparound被选中。
5)关联事件和Probe断点
a:
点击AddProbePoint按钮,打开对话框。
b:
点击ProbePoint中的内容,使之被选中。
c:
在Connect中选择sine2.dat文件。
d:
点击Replace按钮确认设置。
e:
点击“确认”关闭对话框。
6)点击“确认”关闭对话框,此时,已经配置好了Probe断点和与之关联的事件。
进一步的结果在下一节显示。
2.2.5图形功能简介
这一节使用CC图形功能检验上一节的结果
1)执行View|Graph|Time/Frequency打开GraphPropertyDialog窗口
2)修改属性为如下值并确定:
GraphTitle:
InputBuffer
SatrtAddress:
inp_buffer
Length:
100
AcquisitionBufferSize:
100
DSPType:
16-bitsignalinteger
图2-2-5-1图形属性设置
3)按F12运行程序,观察inputBuffer窗口的内容。
图2-2-5-2InputBuffer窗口内容
2.2.6实验程序
/*****************************************************************/
/*hello.c*/
/*BasicCstandardI/Ofrommain.*/
/****************************************************************/
#include
#include"hello.h"
#defineBUFSIZE30
structPARMSstr=
{
2934,
9432,
213,
9432,
&str
};
/*========main========*/
voidmain()
{
#ifdefFILEIO
inti;
charscanStr[BUFSIZE];
charfileStr[BUFSIZE];
size_treadSize;
FILE*fptr;
#endif
/*writesomestringstostdout*/
puts("实验步骤:
\n");
puts("1.创建工程环境\n");
puts("2.基本调试功能\n");
puts("3.使用观察窗口\n");
puts("4.文件的输入/输出\n");
puts("5.图形功能简介\n");
#ifdefFILEIO
/*clearchararrays*/
for(i=0;iscanStr[i]=0;
fileStr[i]=0;
}
/*readastringfromstdin*/
scanf("%s",scanStr);
/*openafileonthehostandwritechararray*/
fptr=fopen("file.txt","w");
fprintf(fptr,"%s",scanStr);
fclose(fptr);
/*openafileonthehostandreadchararray*/
fptr=fopen("file.txt","r");
fseek(fptr,0L,SEEK_SET);
readSize=fread(fileStr,sizeof(char),BUFSIZE,fptr);
printf("Reada%dbytechararray:
%s\n",readSize,fileStr);
fclose(fptr);
#endif
}
3实验小结
通过这次实验,我熟悉了CCS开发环境以及设计运行调试过程因为以前基本没接触过,所以没搞dsp之前觉得dsp好深奥好难,根据老师给的CCS资料一步一步的来,遇到不懂的问题时,就自己到网上搜索,或者向周围的同学请教,最终完成了本次实验,虽然只是对CCS应用的基本操作,也算是对DSP熟悉的一个过程,在这次实验中,用汇编语言和C语言共同来完成开发,CCS也很好的支持了汇编和C的结合,现在很多软件都不仅仅是一种语言能够完成的,每种语言都有它自己的优势与劣势,只有将他们的优势结合起来,才能完成一个优秀的系统。
DSP的关键之处在于能好地运用时域与复域的关系。
应该说贯穿整本书的一个关键是从时域去理解频域或者从频域去解决时域上的问题。
傅氏变换,Z变换,DFT都是时域与频域的相互转化。
而采样则是典型的由频域去解决时域的问题,通过频域,很好地解决了采样条件以及如何还原原函数的方法——内插。
而滤波器的设计也是从频域上规定了滤波器的特性。
因此掌握好这条主线,就能很好地把整本书的知识融会贯通起来,从而达到理解与掌握的学习目的。
DSP的学习应该是理解性的学习,而不是死记硬背,要多调试程序,在调试的过程中发现问题、解决问题,这样在DSP的学习上才能有一个大的进步。