DSP硬件实验Word文档格式.docx
- 文档编号:16884867
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:89
- 大小:2.22MB
DSP硬件实验Word文档格式.docx
《DSP硬件实验Word文档格式.docx》由会员分享,可在线阅读,更多相关《DSP硬件实验Word文档格式.docx(89页珍藏版)》请在冰豆网上搜索。
适用平台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//灯亮
调用延时子程序,
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;
.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连接实验箱,正确设置参数
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的译码有效);
*(HPI8位模式);
*CPU_CS=0);
*试验现象:
本实验程序将对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完)
//将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
五、试验现象
六、程序运行说明
程序首先将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短接;
2.启动CCS,并加载“exp03.out”,单击“Run”运行程序,
3.任意调整K0~K7开关,可以观察到对应LP0~LP7灯“亮”或“灭”;
4.单击“Halt”,暂停持续运行,开关将对灯失去控制;
5.打开源代码,查看。
四.源程序查看及注释
exp03.asm
.global_main
.text;
//程序代码段
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灯
程序跳转到"
_MAIN"
执行.
.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秒钟。
2.启动CCS,并加载“exp04.out”,单击“Run”运行程序,
3.观察到对应LP1~LP8灯“亮”;
四、源代码及注释
向量程序:
.global_c_int00,_timer0
.sect"
.vecs"
自定义向量表
reset:
b_c_int00;
//复位中断时跳转到c程序主函数
nmi:
rete;
NMI//不可屏蔽中断时,返回并允许产生该中断
softwareinterrupts
sin17:
.space4*16;
//在当前段中,保留4*16bit空间,标号
//sin17为空间起始地址
sin18:
.space4*16
sin19:
sin20:
sin21:
sin22:
sin23:
sin24:
sin25:
sin26:
sin27:
sin28:
sin29:
sin30:
int0:
rete;
EXTERNALINT0
int1:
EXTERNALINT1
int2:
EXTERNALINT2
tint0:
b_timer0;
TIMER0INTERRUPT//产生定时中断时,跳转到timer0
brint0:
//接收中断
bxint0:
//传送中断
dmac0:
RESERVEDORDMACHANNEL0INTERRUPT
tint1_dmac1:
TIMER1INTERRUPTORDMACHANNEL1INTERRUPT
int3:
EXTERNALINT3
hpint:
HPIINTERRUPT
brint1_dmac2:
McBSP1RECEIVEINTERRUPTORDMACHANNEL2INTERRUPT
bxint1_dmac3:
McBSP1TRANSMITINTERRUPTORDMACHANNEL3INTERRUPT
dmac4:
DMACHANNEL4INTERRUPT
dmac5:
DMACHANNEL5INTERRUPT
****************************结束*****************************
主程序
/*******************函数、子程序声明与定义********************/
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,表示中断发生
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灯亮灭变化一次;
■导线连接CPLD单元的“单脉冲输出”和电机控制单元的“INT2”
2.启动CCS,并加载“exp05.out”,单击“Run”运行程序,
3.反复按“单脉冲单元”的S5键,观察到对应LP1~LP8灯亮灭变化
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 硬件 实验