DSP实验报告模版.docx
- 文档编号:23608664
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:25
- 大小:497.21KB
DSP实验报告模版.docx
《DSP实验报告模版.docx》由会员分享,可在线阅读,更多相关《DSP实验报告模版.docx(25页珍藏版)》请在冰豆网上搜索。
DSP实验报告模版
我们做的DSP实验是实验一,实验二,实验三!
模板上只有13!
2要自己仿照实验一写!
不要弄错了!
实验题目在另外一个共享表格里!
实验一数据存储实验
一、实验目的
1.掌握CCS的使用
2.掌握TMS320C54X程序空间的分配;
3.掌握TMS320C54X数据空间的分配;
4.能够熟练运用TMS320C54X数据空间的指令。
二、实验设备
计算机,CCS3.1版软件,DSP仿真器,E300实验箱,DSP-54XPCPU板。
三、实验步骤与内容
1.在进行DSP实验之前,需先连接好仿真器、实验箱及计算机,连接方法如下所示:
2.E300底板的开关SW4的第1位置ON,其余位置OFF。
其余开关设置为OFF。
SW5全部置ON;其余开关不做设置要求
3.上电复位
在硬件安装完成后,确认安装正确、各实验部件及电源连接无误后,启动计算机,接通仿真器电源,此时,仿真器上的“红色指示灯”应点亮,否则DSP开发系统与计算机连接存在问题。
4.运行CCS程序
1)待计算机启动成功后,实验箱220V电源置“ON”,实验箱上电
2)启动CCS3.1,进入CCS界面后,点击“Debug—Connect”
3)此时仿真器上的“绿色指示灯”应点亮,CCS正常启动,表明系统连接正常;否则仿真器的连接、JTAG接口或CCS相关设置存在问题,这时需掉电检查仿真器的连接、JTAG接口连接是否正确,或检查CCS相关设置是否存在问题。
5.成功运行CCS程序后,首先应熟悉CCS的用户界面;
6.学会在CCS环境下创建工程文件、添加程序文件、编写程序、编译、装载、调试,学习如何使用观察窗口等。
7.用“Project\open”打开“C:
\ti5000\myprojects\01_mem\mem.pjt”.
编译并装载“\01_mem\Debug\mem.out”
8.用“Edit”下拉菜单中的“Memory/Fill”编辑内存单元,参数设置如下图:
单击“OK”此时以0x1000为起始地址的16个内存单元被修改成:
0x0009
9.用“View”下拉菜单“Memory”观察内存单元变化,输入要查看的内存单元地址,本实验要查看0x1000H~0x100FH单元的数值变化,输入地址0x1000H;
单击“OK”如下图所示:
10.点击“Debug\Gomain”进入主程序,在程序中“加软件断点1”和“加软件断点2”处施加软件断点。
11.单击“Debug\Run”运行程序,也可以“单步”运行程序;当程序运行到“软件断点1”处时,查看0x1000H~0x1007H单元的值变化,
12.再单击“Debug\Run”,当程序运行到“软件断点2”处时,查看0x1008~0x100F单元的变化。
13.闭各窗口,本实验完毕
四、程序流程图
五、实验程序
#include"DspRegDefine.h"//VC54x寄存器定义
#include"stdio.h"//输入输出头文件
#include"e300_codec.h"
//**********************子函数声明********************************//
voidcpu_init(void);//初始化CPU
//*************************主函数*******************************//
voidmain()
{
UINT16i;
UINT16*room;
UINT16*room1;
room=(UINT16*)0x1000;//设指针px为1000H
room1=(UINT16*)0x1008;//设指针px为1000H
//**********************CPU初始化*********************************//
cpu_init();
/*将0xAAAA写入从数据空间的地址0x1000开始的8个单元中*/
for(i=0;i<8;i++)
{
*room=0xAAAA;
room++;
}
asm("nop");//加软件断点1
/*从0x1000开始的8个空间读出数据依次写入从0x1008开始的8个单元中*/
for(i=0;i<8;i++)
{
*room1=*(room-1);
room--;
room1++;
}
for(;;)
{
}//加软件断点2
}
//*************************结束**********************************//
cpu_init()函数见附录
六实验结果
1、程序运行到断点1处数据存储器的内容如下图:
2、程序运行到断点2处数据存储器的内容如下图:
实验三定时器实验
一、实验目的
1、熟悉TMS320C54X的定时器;
2、掌握TMS320C54X的定时器的控制方法;
3、学会使用CPU定时器中断方式控制程序流程。
二、实验设备
计算机,CCS3.1版软件,DSP硬件仿真器,E300实验箱,DSP-54XPCPU板。
三、实验原理说明
实验是采用CPU定时器来定时使LED亮灭的。
C54x的定时器是一个20位的减法计数器,可以被特定的状态位实现停止、重新启动、重设置或禁止,可以使用该定时器产生周期性的CPU中断,控制定时器中断频率的两个寄存器是定时周期寄存器PRD和定时减法寄存器TDDR,定时器的中断周期为:
CLKOUT*(TDDR+1)*(PRD+1)
在本系统中,如果设置时钟频率为10MHZ,令PRD=0x30D3,TDDR=15,这样得到每0.02秒中断一次,通过累计50次,就能实现1秒钟定时。
0.1us*(15+1)*(12499+1)*50=1S
四、实验步骤和内容
1、E300底板的开关SW4的第1位置ON,其余位置OFF。
其余开关设置为OFF。
SW5全部置ON;其余开关不做设置要求
2、运行CCS软件,调入样例程序,装载并运行;(进入CCS界面后需要点“Debug--Connect”)
3、用“Project//Open”系统项目文件C:
\ti5000\myprojects\03_timer\timer.pjt;
4、编译全部文件并装载“..\debug\timer.out”;单击“Debug\Gomain”进入到主程序中
5、单击“Debug\RUN”运行,可观察到灯LED1~LED8的闪烁变化。
6、单击“Debug\Halt”,暂停程序运行,LED灯停止闪烁;单击“RUN”,LED灯又开始闪烁变化
7、结束实验程序
四、程序流程图
五、实验程序
1、主函数
/*******************************头文件****************************/
#include"DspRegDefine.h"//VC5402寄存器定义
#include"stdio.h"//输入输出头文件
#include"e300_codec.h"
#include"timer.h"//子函数声明文件
//***********************端口定义****************************//
ioportUINT16port0200;//定义输出io端口为0x0200;
//***********************全局变量定义************************//
unsignedintcount=0;
unsignedintTIMER=0;
//*************************************************************//
//*************************主函数****************************//
voidmain()
{
cpu_init();
asm("nop");
set_t0();
asm("nop");
for(;;)
{
switch(count)
{
case0:
IOout=0x0081;break;
case1:
IOout=0x0042;break;
case2:
IOout=0x0024;break;
case3:
IOout=0x0018;break;
case4:
IOout=0x0024;break;
case5:
IOout=0x0042;break;
case6:
IOout=0x0081;break;
case7:
count=0;break;
default:
break;
}
}
}
//*************************结束**********************************//
2、set_t0()函数
//******************************头文件*****************************//
#include"DspRegDefine.h"//VC5402寄存器定义
/***********************************************************
-函数名称:
voidset_t0()
-函数说明:
设置T0的寄存器
-输入参数:
无
-输出参数:
无
************************************************************/
voidset_t0()
{
asm("ssbxintm");//禁止所有可屏蔽中断
*(unsignedint*)TCR=0x0010;//停止T0定时器记数
//--------------------------------------------------------------------
//TCRDEFINITIONS?
//保留(bit15-12)-0000保留
//SOFT、FREE(bit11-10)-00调试时,遇到断点,定时器停止工作
//PSC(bit9-6)-0000预定标计数器
//TRB(bit5)-0不复位定时器,不重新加载TIM、PSC
//TSS(bit4)-1定时器停止工作
//TDDR(bit3-0)-0定时器分频系数
//------------------------------------------------------------
//0000000000010000=0x0010
/*---------------------------------------------------------------------*/
*(unsignedint*)PRD=0x30d3;//设置T0的周期寄存器
*(unsignedint*)IMR=*(unsignedint*)IMR|0x0008;//允许T0中断
*(unsignedint*)IFR=*(unsignedint*)IFR;//清除中断标志
*(unsignedint*)TCR=0x002f;//允许T0定时器记数
//--------------------------------------------------------------------
//TCRDEFINITIONS?
//保留(bit15-12)-0000保留
//SOFT、FREE(bit11-10)-00调试时,遇到断点,定时器停止工作
//PSC(bit9-6)-0000预定标计数器
//TRB(bit5)-1复位定时器,重新加载TIM、PSC
//TSS(bit4)-0定时器开始工作
//TDDR(bit3-0)-1111定时器分频系数
//------------------------------------------------------------
//0000110000101111=0x0c2f
/*---------------------------------------------------------------------*/
asm("rsbxintm");//开放所有可屏蔽中断
}
//*************************结束**********************************/
3、Tint0函数
#include"DspRegDefine.h"//VC5402寄存器定义
//-----------------------------------------------------------------//
externunsignedintcount;
externunsignedintTIMER;
//*************************TO中断程序*****************************//
interruptvoidTint0()
{
TIMER++;
if(TIMER%50==0)
count=count+1;
}
//*************************结束**********************************//
4、cpu_init函数见附录
六实验结果
LED灯根据定时时间不断的闪烁变化。
七思考题
1、修改程序,实现灯闪烁变化的快慢。
2、修改程序,改变流水灯变化的花样。
实验六通用I/O口实验
—、实验目的
1.熟悉TMS320VC5416的通用I/O口应用
2.掌握利用I/O口产生波形的设计方法
二、实验设备
计算机,CCS3.1版本软件,DSP仿真器,E300实验箱,DSP-54XPCPU板,示波器
三、实验原理
²C54X器件的I/O引脚介绍
C54x器件除了64K字节的I/O口空间外,还用两个受软件控制的专用引脚:
BIO和XF。
除了以上两种引脚之外,还有一些引脚可以设置成通用的GPIO使用,这些引脚是:
McBSP引脚,8个HPI数据引脚(HD0~HD7)。
这些引脚的使用可通过专用的寄存器进行设置使用。
McBSP引脚设置成I/O口使用时需设置的寄存器:
SPCR1,SPCR2和PCR8个HPI数据引脚(HD0~HD7)设置成I/O口使用时需设置的寄存器:
GPIOCR和GPIOSR,同时要满足HPI-8接口禁止时有效即HPIENA设置成低电平时。
²C54X器件I/O引脚应用
通用I/O口应用很广,像对LED灯的控制和对电机的操作控制等。
使用时需要注意的是:
1.这些管脚支持0~3.3V逻辑电平操作,用户在进行相应的设计后可以在I/O口进行输入输出操作。
2.使用时必须根据引脚本身的负载能力驱动相关的设备。
²样例实验说明
1.将McBSP0通道的FSX0,CLKX0和DX0管脚设置成通用I/O输出口。
(详细设置请参看样例程序)
2.利用定时器T0,产生精确的方波。
3.利用E300板上键盘(1.2.3.4)对输出波形进行选择,在选择时相应的LED灯点亮
4.综合(1.2.3)可以看出该样例实验是结合定时器中断,键盘中断和McBSP设置I/O口的综合实验
5.定时器T0定时时间为10us,(具体的计算请参看前面:
定时器中断实验)
四、实验程序流程图
四、实验步骤
1.E300板上的开关SW4的第一位置ON,其余OFF;SW3的第四位置ON其余的SW3位置OFF
2.E300板上的开关SW7的第2,4,6位置ON,其余位置OFF.
3.运行CodeComposerStudio(CCS)(ccs3.1需要“DEBUG→Connect”)
4.打开系统项目文件C:
\ti5000\myprojects\06_GPIO\GPIO.pjt;
5.编译全部文件并装载“\Debug\GPIO.out”文件
6.单击“Debug\GoMain”跳到主程序的开始;
7.单击“Debug\Animate”运行程序
五、实验程序
1、主函数
#include"DspRegDefine.h"//VC5416寄存器定义
#include"e300_codec.h"
#include"key.h"//子函数声明文件
//***********************端口定义****************************//
ioportUINT16port0200;//定义输出io端口为0x0200;
ioportUINT16port0004;//定义
//***********************全局变量定义************************//
UINT16row,col,w;
UINT16a=0;
UINT16count=0;
UINT16flag=0;
UINT16timer=0;
UINT16num=0;
/*************************************************************/
//*************************主函数***************************//
voidmain()
{
cpu_init();//初始化CPU
int2_init();//外部中断2初始化
set_t0();
GPIO_init();
asm("rsbxINTM");//开总中断
port0200=0x00
//*********************等待外部中断2产生**********************//
for(;;)
{
if(a==1)//加软件断点
{
a=0;
read_data();
conv();
Makewave();
}
else{}
}
}
//*************************结束*****************************//
2、GPIO_init函数
#include"DspRegDefine.h"//VC5416寄存器定义
#include"key.h"//子函数声明文件
//*************************初始化GPIO****************************//
voidGPIO_init()
{
*(unsignedint*)McBSP0_SPSA=0x0001;//SPCR2
*(unsignedint*)McBSP0_SPSD&=0xfffe;//设置SPCR1.0(XRST=0)
*(unsignedint*)McBSP0_SPSA=0x000E;//PCR
*(unsignedint*)McBSP0_SPSD|=0x2800;
*(unsignedint*)McBSP0_SPSD&=0xFFd7;//设置PCR中FSXP=0,DX_STAT=0;
*(unsignedint*)McBSP0_SPSA=0x0000;//SPCR1
*(unsignedint*)McBSP0_SPSD&=0xfffe;//设置SPCR1.0(RRST=0)
*(unsignedint*)McBSP0_SPSA=0x000E;//PCR
*(unsignedint*)McBSP0_SPSD|=0x2200;
*(unsignedint*)McBSP0_SPSD&=0xFFfD;//设置PCR中CLKXM=0
}
//********************************************************//
3、read_data函数
#include"DspRegDefine.h"//VC5416寄存器定义
#include"e300_codec.h"
//---------------------------------------------------//
externioportUINT16port0004;//定义
externunsignedintrow,col,w;
//-----------------读CPLD键盘扫描数据----------------//
voidread_data(void)
{
unsignedinttemp;
temp=E300_CPLD_KEY&0x00ff;
w=temp;
switch(temp&0xf0)
{
case0xe0:
row=0x1;break;
case0xd0:
row=0x2;break;
case0xb0:
row=0x3;break;
case0x70:
row=0x4;break;
default:
break;//return0;//row=0;break;
}
switch(temp&0x0f)
{
case0x0e:
col=0x1;break;
case0x0d:
col=0x2;break;
case0x0b:
col=0x3;break;
case0x07:
col=0x4;break;
default:
break;//return0;//col=0;break;
}
}
#include"DspRegDefine.h"//VC5402寄存器定义
#include"key.h"//子函数声明文件
//******************************************//
externunsignedintflag;
//*****************************************//
4、Makewave函数
voidMakewave()
{
switch(flag)
{
case1:
outwave1();break;
case2:
outwave2();break;
case3:
outwave
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 实验 报告 模版