DSP硬件实验报告.docx
- 文档编号:17211514
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:25
- 大小:437.03KB
DSP硬件实验报告.docx
《DSP硬件实验报告.docx》由会员分享,可在线阅读,更多相关《DSP硬件实验报告.docx(25页珍藏版)》请在冰点文库上搜索。
DSP硬件实验报告
实验一:
常用指令实验
一、实验目的
1.熟悉DSP开发系统的连接
2.了解DSP开发系统的组成和结构和应用系统构成
3.熟悉常用C54X系列指令的用法(程序寻址,寄存器,I/O口,定时器,中断控制)。
二、实验设备
计算机,CCS2.0版软件,DSP仿真器,实验箱。
三、实验操作方法
1、系统连接
进行DSP实验之前,先必须连接好仿真器、实验箱及计算机,连接方法如下所示:
在硬件安装完成后,接通仿真器电源或启动计算机,此时,仿真盒上的“红色小灯”应点亮,否则DSP开发系统与计算机连接有问题。
2、运行CCS程序
先实验箱上电,然后启动CCS,此时仿真器上的“绿色小灯”应点亮,并且CCS正常启动,表明系统连接正常;否则仿真器的连接、JTAG接口或CCS相关设置存在问题,掉电,检查仿真器的连接、JTAG接口连接,或检查CCS相关设置是否正确。
四、实验步骤与内容
(一)简单指令程序运行实验
1、实验使用资源
实验通过实验箱上的XF指示灯观察程序运行结果
2、实验过程
启动CCS2.0,并加载“exp01.out”;加载完毕后,单击“Run”运行程序;
实验结果:
可见XF灯以一定频率闪烁;单击“Halt”暂停程序运行,则XF灯停止闪烁,如再单击“Run”,则“XF”灯又开始闪烁;
关闭所有窗口,本实验完毕。
源程序查看:
用下拉菜单中Project/Open,打开“Exp01.pjt”,双击“Source”,双击“exp01.asm”可查看源程序。
源程序注释如下:
源程序:
注释:
;FileName:
exp01.asm
;theprogramiscompiledatnoautoinitializationmode
.mmregs
.global_main
_main:
stm#3000h,sp
ssbxxf
calldelay
rsbxxf
calldelay
b_main
nop
nop
;delay.5second
delay:
stm270fh,ar3
loop1:
stm0f9h,ar4
loop2:
banzloop2,*ar4-
banzloop1,*ar3-
ret
nop
nop
;stm2cycles
;banzwhenTRUE4cycles
;FALSE2cycles
;0f9h=>249d
;270fh=>9999d
.end
定义存储器映像寄存器
全局符号,可在外部定义
;设置堆栈指针寄存器的值为3000h
;置位状态寄存器xf
;调用delay函数
;复位状态寄存器xf
;调用delay函数
;无条件转移至_main
;空指令
;空指令
;设置辅助寄存器ar3值为9999
;设置辅助寄存器ar4值为249
;寄存器ar4值减一,当其值不为0时跳转到loop2
;寄存器ar3值减一,当其值不为0时跳转到loop1
;返回
;空指令
;空指令
(二)资料存储实验
1、实验使用资源
本实验指导书是以TMS32OVC5410为例,介绍相关的内部和外部内存资源。
对于其它类型的CPU请参考查阅相关的资料手册。
下面给出TMS32OVC5410的内存分配表:
对于存储空间而言,映像表相对固定。
值得注意的是内部寄存器与存储空间的映像关系。
因此在编程应用时这些特定的空间不能作其它用途。
对于程序存储空间而言,其映像表和CPU的工作模式有关。
当MP/MC引脚为高电平时,CPU工作在微处理器模式;当MP/MC引脚低电平时,CPU工作在为计算机模式。
具体的内存映像关系如上如所示。
内存实验主要了解内存的操作和DSP的内部双总线结构。
并熟悉相关的指令代码和执行过程等。
2、实验过程
连接好DSP开发系统,运行CCS软件;
a)在CCS的Memory窗口中查找C5410各个区段的数据存储器地址,在可以改变的存储器内容的地方,选定地址随意改变其中内容并观察结果;
b)在CCS中装载实验示范程序,单步执行程序,程序中写入和读出的数据存储地址的变化;
c)改变其它寻址方式,进行观察数据存储器地址与写入和读出数据的的变化。
本实验说明:
本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA的数值,然后读出,并存储到0X1008开始的8个地址空间。
在CCS中可以观察DATA内存空间地址0X1000~0X100F值的变化。
样例程序实验操作说明:
启动CCS2.0,并加载“exp02.out”,用“View”下拉菜单中的“Memory”查看内存单元,输入要查看的内存单元地址,本实验要查看0x1000H~0x100FH单元的数值变化,输入地址0x1000H,查看0x1000H~0x100FH单元的初始值,单击“Run”运行程序,也可以“单步”运行程序,单击“Halt”暂停程序运行,查看0x1000H~0x100FH单元内数值的变化
关闭各窗口,本实验完毕。
源程序注释:
源程序:
注释:
*FileName:
exp02.asm
;getsomeknowledgeofthecmdfile
;theprogramiscompiledatnoautoinitializationmode
.mmregs
.global_main
_main:
;storedata
stm1000h,ar1
rpt#07h
st0aaaah,*ar1+
;readdatathenre-store
stm7h,ar3
stm1000h,ar1
stm1008h,ar2
loop:
ld*ar1+,t
stt,*ar2+
banzloop,*ar3-
here:
bhere
.end
;将外部内存地址1000h赋给ar1
;循环执行下一条指令8次
;将0aaaah的值存储在ar1所对应内存中,且ar1值加1
;将7h赋给辅助寄存器ar3
;将地址1000h赋给辅助寄存器ar1
;将地址1008h赋给辅助寄存器ar2
;将辅助寄存器ar1的值赋给t,且ar1值加1
;将t的值存储在ar2所对应内存中,且ar2值加1
;寄存器ar3值减1,当其值不为0时跳转到loop
;无条件转移至here
(三)I/O实验
1、实验使用资源
数字量输入信号全部拓展出来,数字量输入接口主要由两个,D_Exp与扳东开关连接,PX4和PX5与电平转换芯片(74LVC245)连接,其功能分别为:
D_Exp—数字量输入扩展接口
1
2
3
4
5
6
7
8
9
I0
I1
I2
I3
I4
I5
I6
I7
VCC
电平转换扩展接口
1
2
3
4
PX4—5V
IN0
IN1
IN2
IN3
PX5—3.3V
OUT3
OUT2
OUT1
OUT0
通过PORTR,PORTW指令可以实现I/O口的输入输出功能,如数字量采集实验。
实验说明:
实验中采用简单的一一映像关系来对I/O口进行验证,目的是使实验者能够对I/O有一目了然的认识。
在本实验系统中,提供的IO空间分配如下:
CPU1:
0x0000switchinput(X)8
0x0001LEDoutput(X)8
CPU2:
0x0001DAC
0x0004Read_Key
0x0006Write_Key
0x000FWrite_LCD
0x8000HPIC0
0x8001HPIC1
0x8002HPID0(AUTO)
0x8003HPID1(AUTO)
0x8004HPIA0
0x8005HPIA1
0x8006HPID0(NOAUTO)
0x8007HPID1(NOAUTO)
实验程序框图
注意:
电平转换接口主要考虑应用3.3V的中央处理器时,系统的电平兼容问题,用来保护CPU不受损坏。
系统采用74LVC245电平兼容转换器件。
2、实验过程
运行CCS程序,装载示范程序,调整K0~K7的开关,观察LP1~LP7LED亮灭的变化,以及输入和输出状态是否一致。
(注意:
输出为0时点亮灯)
例程序实验操作说明
启动CCS2.0,并加载“exp03.out”,单击“Run”运行程序,任意调整K0~K7开关,可以观察到对应LP0~LP7灯“亮”或“灭”;单击“Halt”,暂停持续运行,开关将对灯失去控制。
关闭所有窗口,本实验完毕。
源程序查看:
用下拉菜单中Project/Open,打开“Exp03.pjt”,双击“Source”,双击“exp03.asm”可查看源程序。
代码如下:
源程序:
注释:
;FileName:
exp03.asm
;learnhowtooperatetheI/Oports
;getsomeknowledgeoftherts.libfile
;intheI/Ospace0x0000=>8switches
;0x0001=>8LEDs
.mmregs
.global_main
.text
_main:
stm3100h,sp
stm1000h,ar1
portr00h,*ar1
nop
nop
portw*ar1,01h
nop
nop
b_main
nop
nop
.end
;设置堆栈指针寄存器的值为3000h
;设置辅助寄存器ar1值为1000h
;从00h端口读数据传入ar1所指向的内存空间,读按键
;空指令
;空指令
;将ar1所指向的内存空间的值赋给01h端口,控制led灯
;空指令
;空指令
;无条件转移至_main,实现按键控制
;空指令
;空指令
(四)定时器实验
1、实验使用资源
定时器实验时要用到C54芯片的定时器控制寄存器,定时器时间常数寄存器,定时器中断响应,寄存器定义详见C54芯片资料。
C54的定时器是一个20位的减法计数器,可以被特定的状态位实现停止、重新启动、重设置或禁止,可以使用该定时器产生周期性的CPU中断,控制定时器中断频率的两个寄存器是定时周期寄存器PRD和定时减法寄存器TDDR
定时器实验通过LED(LP1~LP7)来显示。
在本系统中,时钟频率为20MHZ,令PRD=0x4e1f,这样得到每1/1000秒中断一次,通过累计1000次,就能定时1秒钟。
2、实验过程
调入样例程序,装载并运行;
例程序实验操作说明
启动CCS2.0,并加载“exp04.out”,单击“Run”运行,可观察到LED灯(LP0~LP7)以一定的间隔时间不停摆动,单击“Halt”,暂停程序运行,LED灯停止闪烁,单击“Run”,运行程序,LED灯又开始闪烁。
关闭所有窗口,本实验完毕。
源程序:
exp04.c
注释:
#include
interruptvoidtimer();
/*externvoidtime();*/
externvoidinitial();
externvoidporta();
externvoidportb();
intflag=0;
interruptvoidtimer()
{*(int*)0x300=*(int*)0x300+1
if(*(int*)0x300==0x3e8)
{
*(int*)0x300=0;
*(int*)0x302=*(int*)0x302+1;
if(flag==0)
{flag=1;
porta();
}
else
{flag=0;
portb();}
}
return;}
main()
{initial();初始化
while
(1){;};无限循环}
;定时不断加1
;当定时器数值达到0x3e8,开始定时器中断
为定时器重新赋予初值
;如果flag为0,则将其变为1,执行porta()
;如果flag为1,则将其变为1,执行portb()
源程序:
initial.asm
.mmregs
.global_initial
_initial:
stm300h,ar1
st#00h,*ar1
stm302h,ar1
st#00h,*ar1
stm200h,ar1
st#5555h,*ar1
stm201h,ar1
st#0aaaah,*ar1
stm202h,ar1
st#400h,*ar1
ssbx1,11
stm0ffffh,ifr
stm00h,imr
stm410h,tcr
stm4e1fh,prd
stm420h,tcr
stm08h,imr
rsbx1,11
ret
;将300h赋值给ar1
;将00h赋值给内存地址为300h的空间里
;将302h赋值给ar1
;将00h赋值给内存地址为302h的空间里
;为内存200h的内容赋予5555h
;为内存201h的内容赋予aaaah
;为内存202h的内容赋予400h
;设置ST1.INTM=1,停止所有的中断
;清除所有中断的标志位,中断标志寄存器(IFR)用来指明各个中断的目前状态。
;停止所有的中断中断屏蔽寄存器(IMR)在需要的时候独立地屏蔽特定的中断
;停止定时器
;设置定时器,定时器周期计数器
;打开定时器定时器控制寄存器
;允许定时器中断
;设置ST1.INTM=0,打开所有中断
源程序:
port.asm
注释:
.mmregs
.global_porta
.global_portb
_porta:
stm304h,ar1
st5555h,*ar1
portw*ar1,01h
ret
_portb:
stm304h,ar1
st0aaaah,*ar1
portw*ar1,01h
ret
;将304h赋给辅助寄存器ar1
;将内存304h的内容赋予5555h
;将内存304h的值写入01h端口
;将内存304h的内容赋予0aaaah
;将内存304h的值写入01端口
源程序:
vectors.asm
注释:
.sect".vectors"
.ref_c_int00
.ref_timer
.align0x80
RESET:
BD_c_int00STM#200,SP
stacksizeof200
nmi:
RETE
NOP
NOP
NOP
sint17.space4*16
sint18.space4*16
sint19.space4*16
sint20.space4*16
sint21.space4*16
sint22.space4*16
sint23.space4*16
sint24.space4*16
sint25.space4*16
sint26.space4*16
sint27.space4*16
sint28.space4*16
sint29.space4*16
sint30.space4*16
int0:
RETE
NOP
NOP
NOP
int1:
RETE
NOP
NOP
NOP
int2:
RETE
NOP
NOP
NOP
tint:
b_timer
NOP
NOP
rint0:
RETE
NOP
NOP
NOP
xint0:
RETE
NOP
NOP
NOP
rint1:
RETE
NOP
NOP
NOP
xint1:
RETE
NOP
NOP
NOP
int3:
RETE
NOP
NOP
NOP
.end
引用函数c_int00
引用了c中的函数
页边界排列
resetvector,复位中断响应
延迟分支到C主程序默认入口地址,c_int00是c程序的入口,这里即进入main函数中
开辟堆栈空间
中断屏蔽置为0,响应中断,不可屏蔽中断产生时,使中断屏蔽取消,后返回。
保留出中断向量的地址空间
中断寄存器设置RETE返回并允许中断外部中断产生时,直接返回。
定时器产生的时钟中断,返回到c中定义的timer程序,b即是跳转
同步串口0(McBSP0)接受的中断,直接返回
同步串口0(McBSP0)发送的中断,直接返回
同步串口1(McBSP1)接受的中断,直接返回
同步串口1(McBSP1)发送的中断,直接返回
(五)INT2中断实验
1、实验使用资源
本实验是进行C54芯片的INT2中断练习,C54芯片中断INT2是低电平单脉冲触发;实验采用导线一端连接D_Exp—数字量输入扩展接口I0,经PX4的IN3,到PX5的OUT0电平转换,再与另一端连接INT2插孔;拨动开关K0一次,就产生一个低电平单脉冲;运行示范程序,观察LP1~LP7LED灯的输出变化;可观察到每拨动开关K0一次LP1~LP7灯亮灭变化一次;
2、实验过程
样例程序实验操作说明
启动CCS2.0,并加载“exp05.out”,单击“Run”运行程序,反复拨动开关K0,观察LP1~LP7LED灯亮灭变化,单击“Halt”暂停程序运行,反复拨动开关K0,LP1~LP7LED灯亮灭不变化;
关闭所有窗口,本实验完毕。
源程序查看:
用下拉菜单中Project/Open,打开“Exp05.pjt”,双击“Source”,双击“int2.c”、“initial.asm”、“port.asm”以及“vectors.asm”可查看各源程序。
源程序:
int2.c
注释:
interruptvoidint2c();
externvoidinitial();
externvoidporta();
externvoidportb();
intflag=0;
main()
{
initial();
while
(1){;}
}
interruptvoidint2c()
{asm("nop");
*(int*)0x300=*(int*)0x300+2if(flag==0)
{
flag=1;
porta();
}
else
{
flag=0;
portb();
}
}
;/*breakheretoshowifinterrupthappened*/这是一个记录外部中断的标志,通过记录0x300h中的值来记录
源程序:
initial.asm
注释:
.mmregs
.global_initial
.text
_initial:
stm300h,ar3
st#00h,*ar3
stm302h,ar4
st#00h,*ar4
ssbx1,11
stm00h,imr
stm0ffffh,ifr
stm04h,imr
rsbx1,11
ret
.end
;将00h存入地址为300h的内存中
;将00h存入地址为302h的内存中
;设置ST1.INTM=1,停止所有的中断
;停止所有的中断,中断屏蔽寄存器(IMR)在需要的时候独立地屏蔽特定的中断
;清除所有中断的标志位,中断标志寄存器(IFR)用来指明各个中断的目前状态。
;开启int2的外部中断
;打开所有中断总开关
源程序:
port.asm
注释:
.mmregs
.global_porta
.global_portb
_porta:
stm304h,ar1
st5555h,*ar1
portw*ar1,01h
ret
_portb:
stm304h,ar1
st0aaaah,*ar1
portw*ar1,01h
ret
;将304h赋给辅助寄存器ar1
;将内存304h的内容赋予5555h
;将内存304h的值写入01h端口
;将内存304h的内容赋予0aaaah
;将内存304h的值写入01端口
源程序:
vectors.asm
注释:
.sect".vectors"
.ref_c_int00
.ref_int2c
.align0x80
RESET:
BD_c_int00STM#200,SP
stacksizeof200
nmi:
RETE
NOP
NOP
NOP
sint17.space4*16
sint18.space4*16
sint19.space4*16
sint20.space4*16
sint21.space4*16
sint22.space4*16
sint23.space4*16
sint24.space4*16
sint25.space4*16
sint26.space4*16
sint27.space4*16
sint28.space4*16
sint29.space4*16
sint30.space4*16
int0:
RETE
NOP
NOP
NOP
int1:
RETE
NOP
NOP
NOP
int2:
RETE
NOP
NOP
NOP
tint:
b_timer
NOP
NOP
rint0:
RETE
NOP
NOP
NOP
xint0:
RETE
NOP
NOP
NOP
rint1:
RETE
NOP
NOP
NOP
xint1:
RETE
NOP
NOP
NOP
int3:
RETE
NOP
NOP
NOP
.end
引用函数c_int00
页边界排列
resetvector,复位中断响应
延迟分支到C主程序默认入口地址,c_int00是c程序的入口,这里即进入main函数中
开辟堆栈空间
中断屏蔽置为0,响应中断,不可屏蔽中断产生时,使中断屏蔽取消,后返回。
保留出中断向量的地址空间
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 硬件 实验 报告