1北邮DSP硬件实验报告学院:班级:学号:姓名:班内序号:2指导老师:第三章5416常规实验实验一:常用指令实验1.实验目的:了解DSP开发系统的组成和结构,熟悉DSP开发系统的连接和开发界面,熟悉C54X系列的寻址系统,熟悉常用的C54X系列指令的用法。2.实验设备计算机,CCS3.3版软件,EXPIII+实验箱3.程序源代码注释;**************************************************************;*北京达盛科技有限公司;*研发部;*;**************************************************************/;*;*文件名称:xf.asm;*适用平台:EXPIII+实验系统;*CPU类型:DSPTMS320VC54X;*软件环境:CCS3.1(5000系列)3;*试验接线:1、实验箱的拨码开关SW2.4置OFF(54x的译码有效);54xCPU板的跳线J2的1、2短接;*(HPI8位模式);SW1的2、6置ON,其余置OFF(HPI使能;DSP工作微处理器方式;;*CPU_CS=0);SW2全部置ON(FLASH工作在数据空间,LED灯D5的工作状态处于灭状态);;*试验现象:可以观察到实验箱CPLD右上方的D3按一定频率闪烁。;*************************************************************.mmregs--(entermemory-mappedregistersintothesymboltable)--进入记忆映射注册进入符号表.global_main--(identifyoneormoreglobal(external)symbols)--定义全局变量_main:stm#3000h,sp(堆栈指针寄存器)堆栈指针寄存器的值为3000h(#表示立即数)ssbxxf;将XF置位,灯亮calldelay(存储器延时)调用延时子程序,延时rsbxxf;将XF复位灯灭calldelay;调用延时子程序b_main;转移回main函数,意为无限循环nop无操作,延时子程序nop4delay:stm270fh,ar1指定ar1寄存器地址,设置为9999loop1:stm0f9h,ar4指定ar4寄存器地址,设置为249loop2:banzloop2,*ar4-;条件转移,每次转移ar4地址减一banzloop1,*ar1-;条件转移,每次转移ar1地址减一ret;循环嵌套,总循环次数为270f*0f9nopnop.end4.实验现象可以看到实验箱上的XF灯以一定的频率闪烁当单击“Halt”时程序暂定,XF灯停止闪烁,当再次单击RUN时,XF灯又开始闪烁。5实验二:数据储存实验1.实验目的掌握TMS320C54的程序空间分配,掌握TMS320C54的数据空间的分配,熟悉操作TMS320C54数据空间的指令。2.实验设备计算机,CCS3.3版软件,EXPIII+实验箱3.实验系统相关资料介绍本实验指导书是以TMS32OVC5410为例,介绍相关的内部和外部内存资源。对于其它类型的CPU请参考查阅相关的资料手册。下面给出TMS32OVC5410的内存分配表:6对于存储空间而言,映像表相对固定。值得注意的是内部寄存器与存储空间的映像关系。因此在编程应用时这些特定的空间不能作其它用途。对于程序存储空间而言,其映像表和CPU的工作模式有关。当MP/MC引脚为高电平时,CPU工作在微处理器模式;当MP/MC引脚低电平时,CPU工作在为计算机模式。具体的内存映像关系如上图所示。4.程序源代码及注释;**************************************************************;*北京达盛科技有限公司;*研发部;*;**************************************************************/;*;*文件名称:xf.asm;*适用平台:EXPIII+实验系统;*CPU类型:DSPTMS320VC54X;*软件环境:CCS3.1(5000系列);*试验接线:1、实验箱的拨码开关SW2.4置OFF(54x的译码有效);54xCPU板的跳线J2的1、2短接;*(HPI8位模式);SW1的2、6置ON,其余置OFF(HPI使能;DSP工作微处理器方式;;*CPU_CS=0);SW2全部置ON(FLASH工作在数据空间,LED灯D5的工作状态处于灭状态);;*试验现象:可以观察到实验箱CPLD右上方的D3按一定频率闪烁。;*************************************************************.mmregs.global_main_main:;storedata8stm1000h,ar1;addressofinternalmemory指定内部ar1寄存器地址1000hstm5000h,ar1;addressofexteriormemory指定外部寄存器ar1的地址为5000hrpt#07h;循环执行下一条指令,循环次数07hst0aaaah,*ar1+;ar1所指的内存赋予0aaaah,然后ar1所指地址加1,此语句过后1000至1007地址空间中存入了0AAAAstm7h,ar3指定ar3地址7h,循环次数stm1000h,ar1设置ar1地址为1000hstm1008h,ar2;设置ar2地址为1008hloop:ld*ar1+,t;循环读取1000h~1007hstt,*ar2+;并将值赋予1008h~1016hbanzloop,*ar3-;循环次数为AR3here:;死循环.bhere;可选择延迟的无条件转移,循环执行,无条件移至here.end5.实验现象9在CCS的“View”下拉菜单中的Memory窗口中查找C5416各个区段的数据存储器地址,在可以改变的存储器内容的地方,选定地址随意改变其中内容并观察结果;本实验要查看0x1000~0x100F单元的数值变化,输入地址0x1000;查看0x1000~0x100F单元的初始值,单击“Run”运行程序,也可以“单步”运行程序;单击“Halt”暂停程序运行。实验三:I/O实验1.实验目的10了解I/O口的扩展,掌握I/O口的操作方法,熟悉PORTR,PORTW指令的用途,了解数字量与模拟量的区别和联系。2.实验设备计算机,CCS3.3版软件,EXPIII+实验箱,DSP仿真器3.流程框图4.程序源代码及注释;**************************************************************;*北京达盛科技有限公司;*研发部;*;**************************************************************/;*;*文件名称:exp03.asm读入I/O数据读出I/O数据结束开始11;*适用平台:EXPIII+实验系统;*CPU类型:DSPTMS320VC54X;*软件环境:CCS3.1(5000系列);*试验接线:1、实验箱的拨码开关SW2.4置OFF(54x的译码有效);54xCPU板的跳线J2的1、2短接;*(HPI8位模式);SW1的2、6置ON,其余置OFF(HPI使能;DSP工作微处理器方式;;*CPU_CS=0);SW2全部置ON(FLASH工作在数据空间,LED灯D5的工作状态处于灭状态);;*试验现象:分别调整数字输入单元的开关K1~K8,观察LED1~LED8亮灭的变化,以及输入和输出状态是否一致。;*************************************************************.mmregs.global_main.text_main:stm3100h,sp;定义sp的地址为3100stm1000h,ar1;定义ar1的地址为1000portr8000h,*ar1;读入I/O8000H数据,将其存储到数据空间的1000H,读按键12nop;nopportw*ar1,8001h;将数据空间的1000H单元的数据,写出到I/O8001Hnopnopb_main;程序跳转到main函数nopnop.end5.实验现象任意调整K0—K7开关,可以观察到对应LP0—LP7灯“亮”或“灭”;单击Halt”,暂停持续运行,开关将对灯失去控制。13实验四:定时器实验1.实验目的14熟悉C54的定时器,掌握C54定时器的控制方法,学会使用定时器中断方式控制程序流程。2.实验设备计算机,CCS3.3版软件,EXPIII+实验箱,DSP仿真器3.实验原理及流程框图1)实验原理定时器实验时要用到C54芯片的定时器控制寄存器,定时器时间常数寄存器,定时器中断响应,寄存器定义详见C54芯片资料。C54的定时器是一个20位的减法计数器,可以被特定的状态位实现停止、重新启动、重设置或禁止,可以使用该定时器产生周期性的CPU中断,控制定时器中断频率的两个寄存器是定时周期寄存器PRD和定时减法寄存器TDDR。定时器实验通过LED(LP1~LP7)来显示。在本系统中,时钟频率为20MHZ,令PRD=0x4e1f,这样得到每1/1000秒中断一次,通过累计1000次,就能定时1秒钟。2)流程框图开始系统初始化主程序:154.源程序代码及注释*文件名称:exp04.c#includetms320uc5402.h/*************************************************************//********************全局变量定义与初始化*********************/ioportunsignedport8001;unsignedintshow=0x00aa;unsignedintnum=0x0000;/*************************************************************/定时器初始化端口赋值输出结束执行程序,定时中断中断程序:关掉中断停止中断器设置定时器长允许定时器中运行定时器打开中断16/*******************函数、子程序声明与定义********************/voidsys_ini()系统初始化子程序{asm(ssbxINTM);全局禁止所有可屏蔽中断PMST&=0x00FF;向量表映射到0x0080空间前八位全部置0SWWSR=0x7000;io空间7个等待周期,程序与数据空间0个等待周期CLKMD=0x17FA;定义最长延长时间}voidtimer0_ini()定时器初始化子程序{TCR|=0x0010;停止定时器0PRD=0x2710;PRD=10000(D)TCR|=0x000A;定义定时器时钟=1/(20M/10/10000)=5msIMR=0x0008;使能定时器0中断IFR=0xFFFF;清除所有中断标志位asm(rsbxINTM);全局使能可屏蔽中断TCR&=0xFFEF;开始定时器0TCR|=0x0020;复位定时起017}/*************************************************************//*****************中断服务子程序声明与定义********************/interruptvoidtimer0()定时器0中断子程序{if(num==200)记200次定时器中断,时间=200*5ms=1s,即灯闪烁频率{show=~show;取反num=0;}elsenum+