您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 五邑大学-TMS320VC5402定时器实验(DSP报告作业-)
五邑大学实验报告实验课程名称:院系名称:信息工程学院专业名称:电子信息工程实验项目名称:1、TMS320VC5402定时器实验2、基于DSPLib的FFT程序设计3、基于DSPLib的滤波器程序设计班级:学号:报告人:1一、TMS320VC5402定时器实验一实验目的1.了解DSP汇编程序与C语言程序的构成;2.了解DSP程序各段的含义;3.熟悉如何编写中断服务程序;4.掌握片内定时器的设置方法;5.掌握长时间间隔的定时器的处理二实验内容1.DSP的初始设置;2.DSP中断向量表的建立;3.定时器的使用;设实验板时钟频率为20MHz,编程实现以下要求:1、TMS320C5402的时钟频率为100MHz2、TMS320C5402XF端输出一个周期为500ms的方波,周期性地点亮LED3、采用定时中断方法实现4、用C语言编程,画出程序流程图并给出源代码。5、上机调试。三实验背景知识1通用TIMER简介TMS320VC5402的定时器的说明:VC5416中有两个可编程的片上定时器,总共包含有三个可由用户设置的寄存器,并可以申请主机的中断。这三个寄存器分别为TIM、PRD、TCR。这些寄存器与对应的存贮空间地址如下表所示:2时间寄存器(TIM)是一个16位的存贮器映射寄存器,它的值由周期寄存器来进行装载,并且做减一操作。周期寄存器(PRD)是一个16位的存贮器映射寄存器,它是用来重装时间寄存器(TIM)寄存器的值的。定时器控制寄存器(TCR)是一个16位的存贮器映射寄存器,包含了定时器的控制与状态信息。2、CMD文件简介cmd文件用于DSP代码的定位。由3部分组成:1、(1)输入/输出定义:.obj文件:链接器要链接的目标文件。.lib文件:链接器要链接的库文件。.map文件:链接器生成的交叉索引文件。.out文件:链接器生成的可执行代码;链接器选项。(2)MEMORY命令:描述系统实际的硬件资源。(3.)SECTIONS命令:描述段如何定位。下面例子则可说明其基本格式:-osample.out(可缺省)-msample.map(可缺省)-stack100(可缺省)sample.objmeminit.obj(可缺省)-lrts.lib(可缺省)MEMORY{PAGE0:RESEVE:org=00hlen=0x80PAGE0:PROG1:org=0x0100len=0x1200PAGE0:VECT:org=0x0080,len=0x80PAGE1:RESEVE1:org=00hlen=0x1300PAGE1:DARAM2:org=0x1300len=0x400PAGE1:3DARAM1:org=0x1700len=0x2900}SECTIONS{.text:PROG1PAGE0.cinit:PROG1PAGE0.switch:PROG1PAGE0.vectors:VECTPAGE0.const:DARAM1PAGE1.bss:DARAM1PAGE1.stack:DARAM2PAGE1.system:DARAM2PAGE1.data:DARAM2PAGE1}下面介绍一下CMD文件中常用的程序段名与含义.cinit存放C程序中的已初始化的变量初值和常数表;.const存放C程序中的字符常量和用const声明的常量;.text存放C程序的代码;.bss为C程序中的未初始化的全局和静态变量保留存储空间;.far为C程序中用far声明的全局和静态变量保留空间;.stack为C程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果;.sysmem用于C程序中malloc、calloc和realloc函数动态分配存储空间.vectors用于自定义的“.vectors”段,这里是中断向量表.switch用于C程序中的switch语句.data已初始化的数据段3中断向量表文件中断服务程序的地址(中断向量)要装载到存储器的合适区域。一般用中断向量表文件编制中断向量表,中断向量表文件多采用汇编语言编写;在文件中一般用汇编指令.sect来生成一个表,表中各中断占4个字。这个表包含中断向量的地址和跳转指令。因为中断跳转地址的标志符在汇编语言模块外部使用,所以标4志符用.ref或.global定义。4、GEL文件GEL文件有两大作用:(1)配置CCS工作环境。(2)直接访问目标处理器(包括软硬件访真器),在这是主要使用GEL文件的初始化DSP。以下面的例子介绍一下GEL文件的构成#definePRD00x0025u#defineTCR00x0026u#definePRD10x0031u#defineTCR10x0032uStartUp(){GEL_MapOn();/*存储空间打开*/GEL_MapReset();/*存储空间复位*/GEL_MapAdd(0x80u,0,0x3F80u,1,1);/*定义程序空间0x80-0x3FFF可读写*/GEL_MapAdd(0x4000u,0,0xC000u,1,1);/*定义程序空间0x4000-0xFFFF可读写*//*定义数据空间0-0xFFFF可读写*/GEL_MapAdd(0x0u,1,0x60u,1,1);/*MMRs*/GEL_MapAdd(0x60u,1,0x3FA0u,1,1);/*DARAM*/GEL_MapAdd(0x4000u,1,0xC000u,1,1);/*External*/}实验流程图:开开开开开CLKMD=47FFhPMST=00A0ht0_count=250开开开INTM=1TCR=0010hPRD=270FhTCR=0669h开timer0开开IFR=8IMR=8INTM=0timer0开开开开开开开开YN开开t0_count=t0_count-1to_count=0t0_count=250XF=0XF=1XF=0YNYN开开5四、实验步骤1、根据实验要求编写输出周期500ms方波的汇编语言源代码,和C语言源代码(c语言中加入外部中断,通过按键改变方波频率)。2、编译无误后下载到C5402开发板中,运行程序,观察LED是否周期性亮灭。3、下载c程序到开发板上,通过按下连接在外部中断上的按键,观察能否改变LED灯的亮灭频率。五、程序源代码1、主函数:#includetimer.hintt0_count;voidmain(){CLKMD=0x00;//清零while(CLKMD&01);CLKMD=0x47ff;//开启PLL方式且采用5倍频PMST=0x00a0;//将片内数据RAM映射到程序空间和数据空间并从0080地址开始coeff=1;t0_count=250*coeff;asm(SSBXINTM);//关闭所有可屏蔽的中断ST1=ST1|0x0800;//INTM=1TCR=0x0010;//停止定时器,且当PSC减到0后,TIM减1;当调试程序断点时定时器立即停止工作PRD=9999;//定时周期寄存器存放定时时间常数,将值赋给TIMTIM=9999;//定时寄存器TCR=0x669;//定时控制寄存器,启动定时器,将PRD中的数加载到TIM中IFR=0x108;//中断标志寄存器,启动外部中断INT3和定时器中断0(TINT0)的标志位IMR=0x108;//中断屏蔽寄存器,开放外部中断INT3和定时器中断0(INT0)的屏蔽位asm(RSBXINTM);//开放全部可屏蔽中断ST1=ST1&0xf7ff;while(1){while(t0_count0);t0_count=250*coeff;if(ST1&0x2000)ST1=ST1&0xdfff;//XF=0,即熄灭LED灯elseST1=ST1|0x2000;//XF=1,即点亮LED灯6}}interruptvoidtimer(){t0_count--;}interruptvoidchange_frequency(){coeff++;//改变XF引脚输出的信号的频率if(coeff5)coeff=1;}2、中断函数:.sect.vectors.ref_c_int00.reftimerrs:BD_c_int00;Restnopnopnmi:.space4*16;NMI,SINT16sint17:.space4*16;SINT17sint18:.space4*16;SINT18sint19:.space4*16;SINT19sint20:.space4*16;SINT20sint21:.space4*16;SINT21sint22:.space4*16;SINT22sint23:.space4*16;SINT23sint24:.space4*16;SINT24sint25:.space4*16;SINT25sint26:.space4*16;SINT26sint27:.space4*16;SINT27sint28:.space4*16;SINT28sint29:.space4*16;SINT29sint30:.space4*16;SINT30int0:.space4*16;INT0,SINT0int1:.space4*16;INT1,SINT1int2:.space4*16;INT2,SINT2tint0:BDtimer;TINT0,SINT3nopnopbrint0:.space4*16;BRINT0,SINT4bxint0:.space4*16;BXINT0,SINT5dmac0:.space4*16;DMAC0,brint2,SINT6dmac1:.space4*16;DMAC1,bxint2,SINT77int3:.space4*16;INT3,SINT8hpint:.space4*16;HPINT,SINT9brint1:.space4*16;BRINT1orDMAC2,SINT10bxint1:.space4*16;BXINT1orDMAC3,SINT11dmac4:.space4*16;DMAC4,SINT12dmac5:.space4*16;DMAC5,SINT13rsvd1:.space4*16;reservedrsvd2:.space4*16;reserved.end3、链接文件:MEMORY{PAGE0:RESERVER:origin=0x00,len=0x80INT_VECT:origin=0x80,len=0x80PROG_RAM:origin=0x100,len=0x1000PAGE1:DATA_1:origin=0x1100,len=0x0e00DATA_2:origin=0x2000,len=0x2000}SECTIONS{.vectors:{}INT_VECTPAGE0.text:{}PROG_RAMPAGE0.stack:{}DATA_1PAGE1vars:{}DATA_1PAGE1.data:{}DATA_2PAGE1.bss:{}DATA_2PAGE1}六、实验结果及体会实验结果:每次按下按键,LED灯亮灭周期发生变化。实验体会:一开始写入程序没成功,但是按下按键后,LED灯亮灭周期也发生变化,出现这种情况是实验板内部已经因为上一个人在试验中写入了程序,所以会出现插电后,程序没写入也能够按键改变亮灭周期。最后在老师的提醒下,成功写入程序,验证发现功能也得到了实现。在实验过程中每一步都要细心的去完成,多想想出现某种情况的原因,有不懂的就向老师、同学请教,这样才能在实验中进步。8二、基于DSPLib的FFT程序设计一、实验目的1、了解FFT的原理;2、了解在DSP中FFT的设计及编程方法;3、熟悉对DSPLIB的调用方法;二、实验内容编写256点的实序列FFT的DSP程序,利用数据文件对FFT程序进行调试。三、实验要求1、产生256点的数据文件,表示方波、正弦等信号;2、编写256点的实序列FFT的DSP程序对上述信号进行傅立叶变换;3、利用CCS中VIEW菜单中的Graph调试工具观察信号时域波形及其
本文标题:五邑大学-TMS320VC5402定时器实验(DSP报告作业-)
链接地址:https://www.777doc.com/doc-7038481 .html