DSP实验报告作业_第1页
DSP实验报告作业_第2页
DSP实验报告作业_第3页
DSP实验报告作业_第4页
DSP实验报告作业_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、五 邑 大 学 实 验 报 告实验课程名称: DSP原理及应用 院系名称: 信息工程学院 专业名称: 电子信息工程 实验项目名称:1、 TMS320VC5402定时器实验 2、基于DSPLib的FFT程序设计 3、基于DSPLib的滤波器程序设计班级: 学号: 报告人: 一、TMS320VC5402定时器实验一 实验目的1. 了解DSP汇编程序与C语言程序的构成;2. 了解DSP程序各段的含义;3. 熟悉如何编写中断服务程序;4. 掌握片内定时器的设置方法;5. 掌握长时间间隔的定时器的处理二 实验内容1. DSP的初始设置;2. DSP中断向量表的建立;3. 定时器的使用;设实验板时钟频率为

2、20MHz,编程实现以下要求:1、TMS320C5402的时钟频率为100 MHz2、TMS320C5402XF端输出一个周期为500ms的方波,周期性地点亮LED3、采用定时中断方法实现4、用C语言编程,画出程序流程图并给出源代码。5、上机调试。三 实验背景知识1 通用TIMER 简介TMS320VC5402 的定时器的说明:VC5416 中有两个可编程的片上定时器,总共包含有三个可由用户设置的寄存器,并可以申请主机的中断。这三个寄存器分别为TIM、PRD、TCR。这些寄存器与对应的存贮空间地址如下表所示:时间寄存器(TIM)是一个16 位的存贮器映射寄存器,它的值由周期寄存器来进行装载,并

3、且做减一操作。周期寄存器(PRD)是一个16 位的存贮器映射寄存器,它是用来重装时间寄存器(TIM)寄存器的值的。定时器控制寄存器(TCR)是一个16 位的存贮器映射寄存器,包含了定时器的控制与状态信息。2、CMD 文件简介cmd 文件用于DSP 代码的定位。由3 部分组成:1、 (1)输入输出定义:.obj 文件:链接器要链接的目标文件。.lib 文件:链接器要链接的库文件。.map 文件:链接器生成的交叉索引文件。.out 文件:链接器生成的可执行代码;链接器选项。(2) MEMORY 命令:描述系统实际的硬件资源。(3.) SECTIONS 命令:描述段如何定位。下面例子则可说明其基本格

4、式:-o sample.out (可缺省)-m sample.map (可缺省)-stack 100 (可缺省)sample.obj meminit.obj (可缺省)-l rts.lib (可缺省)MEMORY PAGE 0:RESEVE: org = 00h len = 0x80 PAGE 0:PROG1: org = 0x0100 len = 0x1200PAGE 0: VECT: org = 0x0080, len = 0x80PAGE 1:RESEVE1: org = 00h len = 0x1300 PAGE 1:DARAM2: org = 0x1300 len = 0x400PA

5、GE 1: DARAM1: org = 0x1700 len = 0x2900 SECTIONS .text : PROG1 PAGE 0 .cinit : PROG1 PAGE 0 .switch: PROG1 PAGE 0 .vectors: VECT PAGE 0 .const: DARAM1 PAGE 1 .bss : DARAM1 PAGE 1 .stack : DARAM2 PAGE 1 .system: DARAM2 PAGE 1 .data : DARAM2 PAGE 1 下面介绍一下CMD 文件中常用的程序段名与含义 .cinit 存放C 程序中的已初始化的变量初值和常数表;

6、.const 存放C 程序中的字符常量和用const 声明的常量; .text 存放C 程序的代码; .bss 为C 程序中的未初始化的全局和静态变量保留存储空间;.far 为C 程序中用far 声明的全局和静态变量保留空间; .stack 为C 程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果; .sysmem 用于C 程序中malloc、calloc 和realloc 函数动态分配存储空间.vectors 用于自定义的“.vectors”段,这里是中断向量表.switch 用于C程序中的switch语句.data 已初始化的数据段3 中断向量表文件中

7、断服务程序的地址(中断向量)要装载到存储器的合适区域。一般用中断向量表文件编制中断向量表,中断向量表文件多采用汇编语言编写;在文件中一般用汇编指令.sect 来生成一个表,表中各中断占4个字。这个表包含中断向量的地址和跳转指令。因为中断跳转地址的标志符在汇编语言模块外部使用,所以标志符用.ref 或.global定义。4、GEL文件 GEL文件有两大作用:(1)配置CCS工作环境。(2)直接访问目标处理器(包括软硬件访真器),在这是主要使用GEL文件的初始化DSP。以下面的例子介绍一下GEL 文件的构成#define PRD0 0x0025u#define TCR0 0x0026u#defin

8、e PRD1 0x0031u#define TCR1 0x0032uStartUp() GEL_MapOn(); /*存储空间打开*/GEL_MapReset(); /*存储空间复位*/GEL_MapAdd(0x80u,0,0x3F80u,1,1); /* 定义程序空间0x800x3FFF 可读写 */GEL_MapAdd(0x4000u,0,0xC000u,1,1);/* 定义程序空间0x40000xFFFF 可读写 */ /* 定义数据空间00xFFFF 可读写 */ GEL_MapAdd(0x0u,1,0x60u,1,1);/* MMRs */ GEL_MapAdd(0x60u,1,0x

9、3FA0u,1,1);/* DARAM */ GEL_MapAdd(0x4000u,1,0xC000u,1,1);/* External */实验流程图:四 、实验步骤 1、根据实验要求编写输出周期500ms方波的汇编语言源代码,和C语言源代码(c语言中加入外部中断,通过按键改变方波频率)。2、编译无误后下载到C5402开发板中,运行程序,观察LED是否周期性亮灭。3、下载c程序到开发板上,通过按下连接在外部中断上的按键,观察能否改变LED灯的亮灭频率。五、程序源代码1、主函数:#include timer.hint t0_count;void main() CLKMD=0x00; /清零wh

10、ile(CLKMD&01);CLKMD=0x47ff; /开启PLL方式且采用5倍频PMST=0x00a0; /将片内数据RAM映射到程序空间和数据空间并从0080地址开始coeff=1;t0_count=250*coeff; asm( SSBX INTM); /关闭所有可屏蔽的中断 ST1=ST1|0x0800; /INTM=1TCR=0x0010;/停止定时器,且当PSC减到0后,TIM减1;当调试程序断点时定时器立即 停止工作PRD=9999; /定时周期寄存器存放定时时间常数,将值赋给TIMTIM=9999; /定时寄存器TCR=0x669; /定时控制寄存器,启动定时器,将PRD中的

11、数加载到TIM中IFR=0x108; /中断标志寄存器,启动外部中断INT3和定时器中断0 (TINT0)的标志位IMR=0x108; /中断屏蔽寄存器,开放外部中断INT3和定时器中断0 (INT0)的屏蔽位asm( RSBX INTM); /开放全部可屏蔽中断ST1=ST1&0xf7ff;while(1) while(t0_count0); t0_count=250*coeff; if(ST1&0x2000) ST1=ST1&0xdfff; /XF=0,即熄灭LED灯 else ST1=ST1|0x2000; /XF=1,即点亮LED灯interrupt void timer() t0_c

12、ount-;interrupt void change_frequency() coeff+; /改变XF引脚输出的信号的频率 if (coeff5) coeff=1; 2、中断函数: .sect .vectors .ref _c_int00.ref timerrs: BD _c_int00 ;Rest nop nopnmi: .space 4*16 ;NMI, SINT16sint17:.space 4*16 ;SINT17sint18: .space 4*16 ;SINT18sint19: .space 4*16 ;SINT19sint20: .space 4*16 ;SINT20sint

13、21: .space 4*16 ;SINT21sint22: .space 4*16 ;SINT22sint23: .space 4*16 ;SINT23sint24: .space 4*16 ;SINT24sint25: .space 4*16 ;SINT25sint26: .space 4*16 ;SINT26sint27: .space 4*16 ;SINT27sint28: .space 4*16 ;SINT28sint29: .space 4*16 ;SINT29sint30: .space 4*16 ;SINT30int0: .space 4*16 ;INT0, SINT0int1

14、: .space 4*16 ;INT1, SINT1int2: .space 4*16 ;INT2, SINT2tint0: BD timer ;TINT0, SINT3 nop nopbrint0: .space 4*16 ;BRINT0, SINT4bxint0: .space 4*16 ;BXINT0, SINT5dmac0: .space 4*16 ;DMAC0, brint2, SINT6dmac1: .space 4*16 ;DMAC1, bxint2, SINT7 int3: .space 4*16;INT3, SINT8hpint: .space 4*16 ;HPINT, SI

15、NT9brint1: .space 4*16 ;BRINT1 or DMAC2, SINT10bxint1: .space 4*16 ;BXINT1 or DMAC3, SINT11dmac4: .space 4*16 ;DMAC4, SINT12dmac5: .space 4*16 ;DMAC5, SINT13rsvd1: .space 4*16 ;reservedrsvd2: .space 4*16 ;reserved .end3、 链接文件: MEMORY PAGE 0: RESERVER: origin = 0x00, len = 0x80 INT_VECT: origin = 0x8

16、0, len = 0x80PROG_RAM: origin = 0x100, len = 0x1000 PAGE 1: DATA_1: origin = 0x1100, len = 0x0e00 DATA_2: origin = 0x2000, len = 0x2000 SECTIONS .vectors: INT_VECT PAGE 0.text: PROG_RAM PAGE 0.stack: DATA_1 PAGE 1vars: DATA_1 PAGE 1.data: DATA_2 PAGE 1.bss: DATA_2 PAGE 1 6、 实验结果及体会实验结果:每次按下按键,LED灯亮灭

17、周期发生变化。实验体会:一开始写入程序没成功,但是按下按键后,LED灯亮灭周期也发生变化,出现这种情况是实验板内部已经因为上一个人在试验中写入了程序,所以会出现插电后,程序没写入也能够按键改变亮灭周期。最后在老师的提醒下,成功写入程序,验证发现功能也得到了实现。在实验过程中每一步都要细心的去完成,多想想出现某种情况的原因,有不懂的就向老师、同学请教,这样才能在实验中进步。二、基于DSPLib的FFT程序设计一、实验目的1、了解FFT的原理;2、了解在DSP中FFT 的设计及编程方法;3、熟悉对DSPLIB的调用方法;二、实验内容编写256点的实序列FFT的DSP程序,利用数据文件对FFT程序进

18、行调试。三、实验要求1、产生256点的数据文件,表示方波、正弦等信号;2、编写256点的实序列FFT的DSP程序对上述信号进行傅立叶变换;3、利用CCS中VIEW菜单中的Graph调试工具观察信号时域波形及其频谱。四、背景知识1、时间抽选基2FFT算法的基本原理。(参阅数字信号处理教材)2、DSPLib的应用CCS提供DSPLib,其中包含了基本的数学计算和数字信号处理常用算法模块的函数,可直接调用这些函数实现一些数字信号处理算法。本实验主要使用了DSPLib的cbrev,rfft两个函数实现数字序列的逆序和DFT的计算。有关这两个函数的说明请参阅dsplib中文版_TMS32054X_函数库

19、中文用户指南.pdf程序流程图为: 5、 实验步骤1、 根据实验要求编写256点FFT的C语言代码,中断向量表和CMD文件; 2、编译成功无误后下载到C5402开发板中,然后运行程序;3、 程序运行完成后,通过CCS中的View-Graph选项查看输入和输出波形,4、 分析实验结果是否符合要求。6、 程序源代码1、 主程序: #includeregister.h#include #include #include #define Nx 256 /定义数组的长度即FFT运算长度#define pi 3. /定义参数的值int i,j;int scale=1; /归一化设置int noscale=

20、0; /非归一化设置DATA xNx,x_temptNx; /用于存放输入的数据的数组DATA yNx/2; /用于存放输出的数据数组#pragma DATA_SECTION(x,.input)#pragma DATA_SECTION(x_tempt,.input_tempt)#pragma DATA_SECTION(y,.output)static void dataIO(void);void main() PMST=0x00a0; /将片内数据RAM映射到程序空间和数据空间,且地址从0080开始 dataIO(); /调用函数dataIO,即导入数据,且存放到x数组中 for(i=0;iN

21、x;i+) / xi=(1000*(cos(2*pi*1000*i/16000)+2*cos(2*pi*2000*i/16000)+cos(2*pi*3000*i/16000);xi=(1000*(cos(2*pi*1000*i/16000)+2*cos(2*pi*2000*i/16000); x_tempti=xi; /将导入的数据存放到x_temp中 cbrev(x,x,Nx/2); /将导入的数据按一定方式,打乱排序,即码位倒序运算 rfft(x,Nx,scale); /调用傅里叶变化函数,进行256点归一化FFT运算 y0=x0; j=1; for(i=2;i FFT_VECT PAG

22、E 0.text: PROG PAGE 0.data: PROG PAGE 0.bss: DATA_2 PAGE 1.cinit: PROG PAGE 0.stack: DATA_2 PAGE 1.input: DATA_2 PAGE 1 ,align(512).input_tempt: DATA_2 PAGE 1.output: DATA_2 PAGE 1.sintab: DATA_1 PAGE 1.const: PROG PAGE 0 7、 实验结果及体会 实验结果: 实验体会:傅里叶变换是将信号从时域的一种变换形式,是信号处理领域中的一种重要的分析工具,所以学好FFT变换在DSP技术中很

23、重要。在这次实验中,进一步熟悉了CCS软件的使用,实验过程中感觉自己的基础知识很不牢固,需要多加强对CCS软件的操作,对编译环境的熟悉对实验的完成和理解则有更加的帮助。感觉要想学好DSP这门课程,必须脚踏实地的一步步努力的学好基础知识,才能更加顺利的完成实验。三、基于DSPLib的滤波器程序设计一、实验目的1、了解FIR、IIR数字滤波器的原理;2、掌握FIR、IIR数字滤波器的设计方法。3、熟悉对DSPLib的调用方法以及数字滤波器在DSP系统中的实现;二、实验内容(要求)现有连续时间信号,已基于采样频率对采样,获得离散数据。设计一个FIR(或IIR)数字低通滤波器,对数据滤波,滤除中频率分

24、量,保留频率分量。要求:1、设计FIR(或IIR)数字低通滤波器,得到滤波器的有关参数;2、基于DSPLib编制DSP的C语言程序,实现上述低通滤波,并对数据滤波。3、利用CCS中VIEW菜单中的Graph调试工具观察信号时域波形及其频谱。三、背景知识1、FIR、IIR数字滤波器的基本原理。(参阅数字信号处理教材)。2、MATLAB的数字滤波器设计工具FDAtool。(详细请参阅MATLAB帮助文档。)2.1 启动滤波器设计分析器在MATLAB的start菜单中选择Toolboxes-Filter Design-Filter Design & Analysis Tools(fdatool),或

25、者在命令行中输入fdatool来启动滤波器设计分析器。启动后界面如图2.1所示:图2.12.2 滤波器设计在选项中选择或输入滤波器参数,然后点击”Design Filter”按钮完成滤波器设计。设计成功后的结果如图2.2所示。图2.22.3 导出FIR滤波器系数。 在fdatool中,选择Targets-Code Composer StudioIDE。 在出现的对话框中选择输出文件类型为C.header file,输出系数类型为signed 16-bit integer,如图2.3所示。 点击OK按钮,选择路径,即可输出前一步设计出的FIR滤波器系数表。图2.33、DSPLib的应用CCS提供

26、DSPLib,其中包含了基本的数学计算和数字信号处理常用算法模块的函数,可直接调用这些函数实现一些数字信号处理算法。本实验主要使用了fir、firs、firs2、iircas4、iircas5、iircas5I等函数实现数字滤波。有关这些函数的说明请参阅dsplib中文版_TMS32054X_函数库中文用户指南.pdf实验程序流程图为: 四 、实验步骤1、 根据实验要求,利用Matlab的fdatools设计FIR低通滤波器和带通滤波 器,导出有FIR系数数组的头文件。2、 根据实验要求编FIR滤波器的C语言代码,中断向量表和CMD文件; 3、编译成功无误后下载到C5402开发板中,然后运行程序;4、 程序运行完成后,通过CCS中的View-Graph选项查看输入和输出波形, 分析实验结果是否符合要求。5、 程序原代码1、主函数:#include #include #include #include register.h#include fdacoefs.h /滤波文件#define NX 1024 /输入数组的长度,即波形取得点数#define NH 87 /系数向量的长度#define pi 3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论