DSP硬件实验.docx
《DSP硬件实验.docx》由会员分享,可在线阅读,更多相关《DSP硬件实验.docx(89页珍藏版)》请在冰豆网上搜索。
DSP硬件实验
数字信号处理
之硬件实验报告
班级:
姓名:
班内序号:
学号:
日期:
常规实验部分
实验一常用指令实验
一、实验目的
通过在DSP仿真开发系统中使用指令,学习指令的功能和基本使用操作方法;了解DSP开发系统的组成和结构,熟悉开发系统的连接,熟悉开发界面,同时,也学习DSP应用系统中的系统调试方法,也就是通常使用的单步执行方法;并熟悉常用的代数汇编指令。
二、实验操作方法
1、 系统连接
进行DSP实验之前,先必须连接好仿真器、实验箱及计算机,连接方法如下所示:
在硬件安装完成后,接通仿真器电源或启动计算机,此时,仿真盒上的“红色小灯”应点亮,否则DSP开发系统与计算机连接有问题。
2、 运行CCS程序
先实验箱上电,然后启动CCS,此时仿真器上的“绿色小灯”应点亮,并且CCS正常启动,表明系统连接正常;否则仿真器的连接、JTAG接口或CCS相关设置存在问题,掉电,检查仿真器的连接、JTAG接口连接,或检查CCS相关设置是否正确。
三、实验过程
1.连接实验箱,打开开关,设置参数
■实验箱CPLD单元的拨码开关SW2的4置OFF
■CPU板,跳线J2的1、2短接;SW1的2、6置ON,其余置OFF;SW2全部置OFF
2.启动CCS,并加载“exp01.out”;
3.加载完毕后,单击“Run”运行程序;
4.单击“Halt”暂停程序运行,则XF灯停止闪烁,如再单击“Run”,则“XF”灯又开始闪烁;单击“Halt”暂停程序运行。
5.打开工程EXP01.PJT,即可看到源代码。
四、实验代码:
;文件名称xf.asm
;适用平台EXPIII+实验系统
;CPU类型DSPTMS320VC54X
;软件环境CCS3.1(5000系列)
;试验接线1、实验箱的拨码开关SW2.(54x的译码有效);54xCPU板的跳线J2的1、2短接
;(HPI8位模式);SW1的2、6置ON,其余置OFF(HPI使能;DSP工作微处理器方式;
;CPU_CS=0);SW2全部置ON(FLASH工作在数据空间,LED灯D5的工作状态处于灭状态);
.mmregs;//定义存储器映射寄存器
.global_main;//定义全局符号main
_main
stm#3000h,sp//设置堆栈指针的首地址为3000h
ssbxxf;将XF(外部标志引脚状态位)置1//灯灭
calldelay;调用延时子程序,延时
rsbxxf;将XF置0//灯亮
calldelay;调用延时子程序,
b_main;程序跳转到_MAIN
nop;//空指令
nop
;延时子程序
delay;//共循环10000*250次
stm270fh,ar3;//设置辅助寄存器ar3的值为270fh(9999d)-十六进制(八进制)
loop1
stm0f9h,ar4;//设置辅助寄存器ar4的值为0f9h(249d)
loop2
banzloop2,ar4-;//ar4值不为0时跳转到loop2,且ar4值减1
banzloop1,ar3-;//ar3值不为0时跳转到loop1,且ar3值减1
Ret;//返回
Nop;
Nop;
.end
五、实验现象
可以观察到实验箱CPLD右上方的D3按一定频率闪烁。
六、程序运行说明:
该程序通过XF=1或XF=0控制实验箱灯的亮或灭。
当XF=1时,灯亮,并调用延时子程序,当延时子程序执行完后,此时灯已经维持亮的状态一段时间,然后XF复位为0,灯灭,再次调用延时子程序。
此次延时程序执行完后,重新执行main函数。
由此实现灯的闪烁功能。
实验二数据存储实验
一、实验目的
掌握TMS320C54的程序空间的分配,熟悉操作数据空间分配的指令;学会查看和使用数据空间,会用指令进行操作。
二、实验操作方法
1.本实验指导书是以TMS32OVC5410为例,介绍相关的内部和外部内存资源。
对于其它类型的CPU请参考查阅相关的资料手册。
对于存储空间而言,映像表相对固定。
值得注意的是内部寄存器与存储空间的映像关系。
因此在编程应用时这些特定的空间不能作其它用途。
对于程序存储空间而言,其映像表和CPU的工作模式有关。
当MP/MC引脚为高电平时,CPU工作在微处理器模式;当MP/MC引脚低电平时,CPU工作在为计算机模式。
内存实验主要了解内存的操作和DSP的内部双总线结构。
并熟悉相关的指令代码和执行过程等。
2.运行CSS程序:
连接好DSP开发系统,运行CCS软件;
a)在CCS的Memory窗口中查找C5410各个区段的数据存储器地址,在可以改变
的存储器内容的地方,选定地址随意改变其中内容并观察结果;
b)在CCS中装载实验示范程序,单步执行程序,程序中写入和读出的数据存储地
址的变化;
c)改变其它寻址方式,进行观察数据存储器地址与写入和读出数据的的变化。
3.实验内容:
本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA的数值,然后读出,并存储到0X1008开始的8个地址空间。
在CCS中可以观察DATA内存空间地址0X1000~0X100F值的变化。
三、实验过程
1连接实验箱,正确设置参数
■实验箱CPLD单元的拨码开关SW2的4置OFF
■CPU板,跳线J2的1、2短接;SW1的2、6置ON,其余置OFF;SW2全部置OFF
2.启动CCS,并加载“exp02.out”,打开工程EXP02.PJT查看源程序;
3.View下拉菜单Memory查看内存单元,本实验要查看0x1000H~0x100FH单元的数值变化,输入地址0x1000H,查看0x1000H~0x100FH单元的初始值;
4单击“Run”运行程序;
5.单击“Halt”暂停程序运行,查看内存单元数值变化
四、程序代码注释
;*文件名称:
exp02.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的工作状态处于灭状态);
;*试验现象:
本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA的数值,然后读出,并存储到
;*0X1008开始的8个地址空间。
;*************************************************************
;getsomeknowledgeofthecmdfile
;theprogramiscompiledatnoautoinitializationmode
.mmregs
.global_main
_main:
;storedata
stm1000h,ar1;//将辅助寄存器的ar1的值设为1000h
rpt#07h;//循环执行下一条指令8次
st0aaaah,*ar1+;将数据"0AAAAH"存放到以地址1000H~1007H的八个存储单元中//该8个存储单元数据都是”0aaaah”
;readdatathenre-store
stm7h,ar3;//将辅助寄存器3的值设为7h,标志变量(8个数全copy完)
stm1000h,ar1;//将ar1的值设为1000h
stm1008h,ar2;//将ar2的值设为1008h
loop:
;循环的将1000H~1007H的八个单元中的数据COPY到1008H~100Fh的
;八个存储单元中.
ld*ar1+,t;//将ar1所指向的数据赋给t存储器,ar1加1
stt,*ar2+;//将t的值存入ar2所指向的地址,ar2加1
Banzloop,*ar3-;//ar3值不为0时跳转到loop,且ar3值减1
here:
;死循环.
bhere;//跳转到here
.end
五、试验现象
本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA的数值,然后读出,并存储到0X1008开始的8个地址空间。
六、程序运行说明
程序首先将1000赋给ar1,作为首地址,然后将0aaaa存到此地址中,使地址加一,循环执行七次,相当于在地址1000到1007八个单元中都存储了0aaaa数据。
重新使ar1的首地址为1000,ar3的首地址为7,ar2的首地址为1008,然后将ar1地址为1000中的数据存放到储存器t中,地址加一,再将储存器t中的数据放到ar2地址为1008的单元中,地址加一,通过ar3来实现循环,最终使地址1008~100F中都存上地址1000~1007中的数据,即0aaaa,程序结束。
实验三I/O实验
一、实验目的
1.了解IO口的扩展;掌握其操作方法;
2.熟悉PORTR、PORTW的用途;
3.了解模拟量与数字量的区别与联系。
二、实验操作方法
1、数字量输入信号全部拓展出来,数字量输入接口主要由两个,D_Exp与扳东开关连接,PX4和PX5与电平转换芯片(74LVC245)连接,其功能分别为:
D_Exp—数字量输入扩展接口
电平转换扩展接口
通过PORTR,PORTW指令可以实现I/O口的输入输出功能,如数字量采集实验。
2、实验说明:
实验中采用简单的一一映射关系来对I/O口进行验证,目的是使实验者能够对I/O有一目了然的认识。
在本实验中,提供的IO空间分配如下:
CPU1的IO空间:
0x8000按键input(X)8
CPU2的IO空间:
0x8001灯output(X)8
三、实验过程
1.连接实验箱,正确设置参数
■实验箱CPLD单元的拨码开关SW2的4置OFF
■CPU板,跳线J2的1、2短接;SW1的2、6置ON,其余置OFF;SW2全部置OFF
2.启动CCS,并加载“exp03.out”,单击“Run”运行程序,
3.任意调整K0~K7开关,可以观察到对应LP0~LP7灯“亮”或“灭”;
4.单击“Halt”,暂停持续运行,开关将对灯失去控制;
5.打开源代码,查看。
四.源程序查看及注释
;*文件名称:
exp03.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的工作状态处于灭状态);
.mmregs
.global_main
.text;//程序代码段
_main:
stm3100h,sp;//存储器映射寄存器sp的值设置为3100h
stm1000h,ar1;//设置辅助寄存器ar1的值为1000h
portr8000h,*ar1;读入I/O8000H(低8位,只读)数据,将其存储到ar1所指向的数据空间中
nop;NOP为空操作,起延时作用.
nop
portw*ar1,8001h;将数据空间的1000H单元的数据,写出到I/O8001H(低8位只写)
写LED灯
nop
nop
b_main;程序跳转到"_MAIN"执行.
nop
nop
.end
五、实验现象
任意调整K0—K7开关,可以观察到对应LP0—LP7灯“亮”或“灭”;单击“Halt”,暂停持续运行,开关将对灯失去控制。
六、程序运行说明
IO空间分配如下,8000h分配给按键,8001h分配给灯。
由portr语句,读入按键的状态,存储入辅助寄存器ar1中。
由portw语句,写出辅助寄存器ar1的值,将其赋给灯。
当程序执行一遍后,跳转回main程序,继续执行上述操作。
由此,通过拨码开关的调节,改变灯的状态。
实验四定时器实验
一、实验目的
1.熟悉定时器,了解定时器的工作原理和控制方法
2.学会使用定时器中断方式控制程序流程
二、实验操作方法
1.实验使用资源
定时器实验时要用到C54芯片的定时器控制寄存器,定时器时间常数寄存器,定时器中断响应,寄存器定义详见C54芯片资料。
2.实验说明:
C54的定时器是一个20位的减法计数器,可以被特定的状态位实现停止、重新启动、重设置或禁止,可以使用该定时器产生周期性的CPU中断,控制定时器中断频率的两个寄存器是定时周期寄存器PRD和定时减法寄存器TDDR
定时器实验通过 LED(LP1~LP7)来显示。
在本系统中,时钟频率为20MHZ,令PRD = 0x4e1f,这样得到每1/1000秒中断一次,通过累计1000次,就能定时1秒钟。
三、实验过程
1.连接实验箱,正确设置参数
■实验箱CPLD单元的拨码开关SW2的4置OFF
■CPU板,跳线J2的1、2短接;SW1的2、6置ON,其余置OFF;SW2全部置OFF
2.启动CCS,并加载“exp04.out”,单击“Run”运行程序,
3.观察到对应LP1~LP8灯“亮”;
4.单击“Halt”,暂停持续运行,开关将对灯失去控制;
5.打开源代码,查看。
四、源代码及注释
向量程序:
.global_c_int00,_timer0
.sect".vecs";自定义向量表
reset:
b_c_int00;//复位中断时跳转到c程序主函数
nop
nop
nmi:
rete;NMI//不可屏蔽中断时,返回并允许产生该中断
nop
nop
nop
;softwareinterrupts
sin17:
.space4*16;//在当前段中,保留4*16bit空间,标号
;//sin17为空间起始地址
sin18:
.space4*16
sin19:
.space4*16
sin20:
.space4*16
sin21:
.space4*16
sin22:
.space4*16
sin23:
.space4*16
sin24:
.space4*16
sin25:
.space4*16
sin26:
.space4*16
sin27:
.space4*16
sin28:
.space4*16
sin29:
.space4*16
sin30:
.space4*16
int0:
rete;EXTERNALINT0
nop
nop
nop
int1:
rete;EXTERNALINT1
nop
nop
nop
int2:
rete;EXTERNALINT2
nop
nop
nop
tint0:
b_timer0;TIMER0INTERRUPT//产生定时中断时,跳转到timer0
nop
nop
brint0:
rete;//接收中断
nop
nop
nop
bxint0:
rete;//传送中断
nop
nop
nop
dmac0:
rete;RESERVEDORDMACHANNEL0INTERRUPT
nop
nop
nop
tint1_dmac1:
rete;TIMER1INTERRUPTORDMACHANNEL1INTERRUPT
nop
nop
nop
int3:
rete;EXTERNALINT3
nop
nop
nop
hpint:
rete;HPIINTERRUPT
nop
nop
nop
brint1_dmac2:
rete;McBSP1RECEIVEINTERRUPTORDMACHANNEL2INTERRUPT
nop
nop
nop
bxint1_dmac3:
rete;McBSP1TRANSMITINTERRUPTORDMACHANNEL3INTERRUPT
nop
nop
nop
dmac4:
rete;DMACHANNEL4INTERRUPT
nop
nop
nop
dmac5:
rete;DMACHANNEL5INTERRUPT
nop
nop
nop
;****************************结束*****************************
主程序
/*******************函数、子程序声明与定义********************/
voidsys_ini()//系统初始化子程序
{
asm("ssbxINTM");//(INTM中断模式位,ssbx:
状态寄存器位置位)全局
//禁止所有可屏蔽中断
PMST&=0x00FF;//(DRAM映射到程序空间和数据空间)向量表映射到0x0080空间,PMST处理机模式状态寄存器操作数和0x00FF相与,强制把前八位置为0SWWSR=0x7000;//io空间7个等待周期,程序与数据空间0个等待周期,等待状态寄存器(SWWSR)的控制,该寄存器的数据空间映射地址是0028h。
第15为为零,扩展程序地址控制点。
XPA选择地址应用程序域的选择范围。
第14-12位I/0置位1,说明I/O空间和进入软件等待状态
CLKMD=0x17FA;//CLKOUT=2*CLKIN=2*10M=20M,自动延时最长时间
}//时钟模式寄存器CLKMD,第一位为1,即时钟产生器工作在PLL模式,3~10位为1,用于控制锁相环的等待时间(17FA=1011111111010)
voidtimer0_ini()//定时器0初始化子程序
{
TCR|=0x0010;//停止定时器0(TCR:
定时器控制寄存器),到二进制10000停止定时器0,定时器控制寄存器,总读0,保留
PRD=0x2710;//PRD=10000(D),定时器周期寄存器PRD用于对定时器寄存器TIM重新装载数据。
TCR|=0x000A;//TDDR=10(D),所以定时器时钟=1/(20M/10/10000)=5ms
IMR=0x0008;//使能定时器0中断,中断屏蔽寄存器IMR,同中断,标志寄存器IFR,第四位不为1
IFR=0xFFFF;//清除所有中断标志位,,全为1,IFR的相应位置1,表示中断发生
asm("rsbxINTM");//全局使能可屏蔽中断,INTM置零,状态寄存器ST1 的INTM 位为0,即中断方式位,允许可屏蔽中断
TCR&=0xFFEF;//开始定时器0
TCR|=0x0020;//复位定时起0,此时TDDR=10(D),TIM用PRB值
//装载,为10000(D)
}
/*************************************************************/
/*****************中断服务子程序声明与定义********************/
interruptvoidtimer0()//定时器0中断子程序
{
if(num==200)//记200次定时器中断,时间=200*5ms=1s
{
show=~show;//取反10101010-01010101
num=0;
}
else
num++;
return;
}
/*************************************************************/
/**************************主程序*****************************/
voidmain(void)
{
sys_ini();//系统初始化
timer0_ini();//定时器初始化
for(;;)//进入子程序循环
{
port8001=show;//端口8001收到数据,灯亮
}
}
/***************************结束******************************/
五、实验现象
单击“Run”运行,可观察到LED灯(LP0—LP7)以一定的间隔时间不停闪烁;单击“Halt”,暂停程序运行,LED灯停止闪烁,单击“Run”,运行程序,LED灯又开始闪烁。
六、程序运行说明
首先,执行main程序,依次进行如下步骤。
1、执行系统初始化程序(sys_ini),禁止中断,将中断向量表映射到0080空间中,允许io的7个等待空间,进行倍频,将频率设为20M。
2、执行定时器子程序(timer0_ini),先将定时器停止,然后对定时进行设置,值为5ms,启动定时器。
3、执行循环语句,对每次计时器计时结束一次后,num(初值0)计数值加1,当num=200时,show值取反。
4、将show值赋给port,通过port实现8盏灯以1s的时间差,按照1357、2468两种方式交替点亮。
此外,VECTOR.ASM(即中断向量表)中,仅使用了tint0中断(即定时器中断),中断时,将自动跳转到timer0_ini程序,进行新一轮计时。
实验五INT2中断实验
一、实验目的
1.掌握中断技术,学会处理中断;
2.学会使用中断方式控制程序流程;
3.掌握中断时序问题。
二、实验操作过程
本实验是进行C54芯片的INT2中断练习, C54芯片中断INT2是低电平单脉冲触发;实验采用导线一端连接D_Exp—数字量输入扩展接口I0,经PX4的IN3,到PX5的OUT0电平转换,再与另一端连接INT2插孔;拨动开关K0一次,就产生一个低电平单脉冲;运行示范程序,观察LP1~LP7 LED灯的输出变化;可观察到每拨动开关K0一次LP1~LP7灯亮灭变化一次;
三、实验过程
1.连接实验箱,正确设置参数
■实验箱CPLD单元的拨码开关SW2的4置OFF
■CPU板,跳线J2的1、2短接;SW1的2、6置ON,其余置OFF;SW2全部置OFF
■导线连接CPLD单元的“单脉冲输出”和电机控制单元的“INT2”
2.启动CCS,并加载“exp05.out”,单击“Run”运行程序,
3.反复按“单脉冲单元”的S5键,观察到对应LP1~LP8灯亮灭变化