dsp硬件实验报告北邮.docx
- 文档编号:24564010
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:64
- 大小:704.61KB
dsp硬件实验报告北邮.docx
《dsp硬件实验报告北邮.docx》由会员分享,可在线阅读,更多相关《dsp硬件实验报告北邮.docx(64页珍藏版)》请在冰豆网上搜索。
dsp硬件实验报告北邮
北京邮电大学
数字信号处理硬件实验
实验名称:
DSP硬件操作实验
姓名:
刘梦颉
班级:
2011211203
学号:
2011210960
班内序号:
11
日期:
2012年12月20日
实验一常用指令实验
一、实验目的
了解DSP开发系统的组成和结构,熟悉DSP开发系统的连接,熟悉DSP的开发界面,熟悉C54X系列的寻址系统,熟悉常用C54X系列指令的用法。
二、实验设备
计算机,CCS2.0版软件,DSP仿真器,实验箱。
三、实验操作方法
1、系统连接
进行DSP实验之前,先必须连接好仿真器、实验箱及计算机,连接方法如下所示:
1)上电复位
在硬件安装完成后,接通仿真器电源或启动计算机,此时,仿真盒上的“红色小灯”应点亮,否则DSP开发系统与计算机连接有问题。
2)运行CCS程序
先实验箱上电,然后启动CCS,此时仿真器上的“绿色小灯”应点亮,并且CCS正常启动,表明系统连接正常;否则仿真器的连接、JTAG接口或CCS相关设置存在问题,掉电,检查仿真器的连接、JTAG接口连接,或检查CCS相关设置是否正确。
四、实验步骤与内容
1、实验使用资源
实验通过实验箱上的XF指示灯观察程序运行结果
2、实验过程
启动CCS2.0,并加载“exp01.out”;加载完毕后,单击“Run”运行程序;
五、实验结果
可见XF灯以一定频率闪烁;单击“Halt”暂停程序运行,则XF灯停止闪烁,如再单击“Run”,则“XF”灯又开始闪烁;
关闭所有窗口,本实验完毕。
六、源程序代码及注释
流程图:
源程序
注释
;FileName:
exp01.asm
;theprogramiscompiledatnoautoinitializationmode
.mmregs--
.global_main
_main:
stm#3000h,sp
ssbxxf
calldelay
rsbxxf
calldelay
b_main
nop
nop
;delay.5second
delay:
stm270fh(9999),ar3
loop1:
stm0f9h(249),ar4
loop2:
banzloop2,*ar4-
banzloop1,*ar3-
ret
nop
nop
;stm2cycles
;banzwhenTRUE4cycles
;FALSE2cycles
;0f9h=>249d
;270fh=>9999d
.end
定义存储器映射寄存器
设置堆栈指针寄存器的值为3000h
stm是累加器的低端放到存储器的映射寄存器中。
存储器映射寄存器寻址用来修改存储器映射寄存器而不影响当前数据页指针(DP)或堆栈指针(SP)的值
状态寄存器位置位,令XF=1,此时灯XF亮,XF用于发信号给外部设备,通过软件进行控制。
调用子程序DELAY,使XF灯亮0.25秒
rsbx状态寄存器复位,灯灭
调用子程序DELAY,使XF灯灭0.25秒
无任何操作
将9999放到AR3中
将249放到AR4中
(loop对代码进行重复汇编)
--由指令的Xar和Yar域选择的辅助寄存器。
ar4、ar3是辅助寄存器
寄存器ar4值减一,当其值不为0时跳转到loop2
寄存器ar3值减一,当其值不为0时跳转到loop1
返回
空指令
空指令
总结:
在main主函数中先定义一个输出xf,先置位实现灯亮,再写delay函数控制灭灯的时间,最后复位实现灯的闪烁。
在delay函数中,实现两个循环嵌套,loop1是计数250,loop2计数10000次,总共计数2500000次,实现0.5秒的时延,所以闪烁间隔为0.5秒。
实验箱时钟频率为5MHz。
实验二资料存储实验
一、实验目的
掌握TMS320C54的程序空间的分配;掌握TMS320C54的数据空间的分配;熟悉操作TMS320C54数据空间的指令。
2、实验设备
计算机,CCS3.3版软件,DSP仿真器,实验箱。
三、实验系统相关资源介绍
本实验指导书是以TMS32OVC5410为例,介绍相关的内部和外部内存资源。
对于其它类型的CPU请参考查阅相关的资料手册。
下面给出TMS32OVC5410的内存分配表:
对于存储空间而言,映像表相对固定。
值得注意的是内部寄存器与存储空间的映像关系。
因此在编程应用时这些特定的空间不能作其它用途。
对于程序存储空间而言,其映像表和CPU的工作模式有关。
当MP/MC引脚为高电平时,CPU工作在微处理器模式;当MP/MC引脚低电平时,CPU工作在为计算机模式。
具体的内存映像关系如上如所示。
内存实验主要了解内存的操作和DSP的内部双总线结构。
并熟悉相关的指令代码和执行过程等。
四、实验步骤与内容
连接好DSP开发系统,运行CCS软件;
a)在CCS的Memory窗口中查找C5410各个区段的数据存储器地址,在可以改变的存储器内容的地方,选定地址随意改变其中内容并观察结果;
b)在CCS中装载实验示范程序,单步执行程序,程序中写入和读出的数据存储地址的变化;
c)改变其它寻址方式,进行观察数据存储器地址与写入和读出数据的的变化。
样例程序实验操作说明:
启动CCS2.0,并加载“exp02.out”,用“View”下拉菜单中的“Memory”查看内存单元,输入要查看的内存单元地址,本实验要查看0x1000H~0x100FH单元的数值变化,输入地址0x1000H,查看0x1000H~0x100FH单元的初始值,单击“Run”运行程序,也可以“单步”运行程序,单击“Halt”暂停程序运行,查看0x1000H~0x100FH单元内数值的变化
关闭各窗口,本实验完毕。
5、实验结果:
本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA的数值,然后读出,并存储到0X1008开始的8个地址空间。
在CCS中可以观察DATA内存空间地址0X1000~0X100F值的变化。
6、源程序代码及注释
流程图:
源程序
注释
*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
内存地址
rpt循环指令。
循环执行下一个指令,计数为短立即数。
st状态寄存器。
将数据"0AAAAH"存放到以地址1000H~1007H的八个存储单元中,该8个存储单元数据都是”0aaaah”
将7h赋给辅助寄存器ar3
将地址1000h赋给辅助寄存器ar1
将地址1008h赋给辅助寄存器ar2
ld把单数据存储器操作数装入T寄存器。
;将辅助寄存器ar1的值赋给t,且ar1地址加1
存储T寄存器的值.将t的值存储在ar2所对应内存中,且ar2地址加1
寄存器ar3地址减1,当其值不为0时跳转到loop
无条件转移至here
总结:
对0x1000开始的8个地址空间,填写入0xAAAA的数值,然后读出,并存储到0x1008开始的8个地址空间。
实验实现先读入数据存到ar1中,然后将ar1的值赋给辅助寄存器t,在将t的值赋值给ar2,存储到ar2的地址空间中。
实验三I/O实验
1、实验目的
1、了解I/O口的扩展;掌握I/O口的操作方法。
2、熟悉PORTR,PORTW指令的用途。
3、了解数字量与模拟量的区别和联系。
2、实验设备
计算机,CCS3.3版软件,DSP仿真器,实验箱。
三、实验步骤及内容
1、实验说明:
实验中采用简单的一一映像关系来对I/O口进行验证,目的是使实验者能够对I/O有一目了然的认识。
在本实验系统中,提供的IO空间分配如下:
CPU1:
0x8000按键input(X)8
0x8001LED灯output(X)8
2、实验过程
运行CCS程序,装载示范程序,调整K0~K7的开关,观察LP1~LP7LED亮灭的变化,以及输入和输出状态是否一致。
例程序实验操作说明
启动CCS2.0,并加载“exp03.out”,单击“Run”运行程序,任意调整K0~K7开关,可以观察到对应LP0~LP7灯“亮”或“灭”;单击“Halt”,暂停持续运行,开关将对灯失去控制。
关闭所有窗口,本实验完毕。
4、源程序代码及注释
流程图:
源程序
注释
.mmregs
.global_main
.text
_main:
stm3100h,sp
stm1000h,ar1
portr8000h,*ar1
nop
nop
portw*ar1,8001h
nop
nop
b_main
nop
nop
.end
全局符号,可在外部定义
设置堆栈指针寄存器的值为3100h,sp堆栈指针寄存器
设置辅助寄存器ar1值为1000h
portr从端口8000h把数据读到数据存储器单元ar1中
空指令,起一定的延时作用.
将数据空间的1000H单元的数据,写出到I/O8001H中,控制LED灯的亮灭
程序跳转到"_MAIN"执行.
总结:
先设置堆栈寄存器内存空间,初始化辅助寄存器ar1的值,用来传输数据。
开关控制,从端口00h读入数据,,存储至ar1中,再ar1中的值传输给01h输出,控制led灯的变化。
实验四定时器实验
1、实验目的
熟悉C54的定时器;掌握C54定时器的控制方法;学会使用定时器中断方式控制程序流程。
2、实验设备
计算机,CCS3.3版软件,DSP硬件仿真器,实验箱。
三、实验步骤和内容
1、实验说明
C54的定时器是一个20位的减法计数器,可以被特定的状态位实现停止、重新启动、重新设置或禁止,可以使用该定时器产生周期性的CPU中断,控制定时器中断频率的两个寄存器是定时周期寄存器PRD和定时减法寄存器TDDR。
在本系统中,如果设置时钟频率为20MHZ,令PRD=0x4e1f,这样得到每1/1000秒中断一次,通过累计1000次,就能定时1秒钟。
2、实验过程
1、运行CCS软件,调入样例程序,装载并运行;
2、定时器实验通过数字量输入输出单元的LED1-LED8来显示
例程序实验操作说明:
启动CCS2.0,并加载“exp04.out”,单击“Run”运行,可观察到LED灯(LP0~LP7)以一定的间隔时间不停摆动,单击“Halt”,暂停程序运行,LED灯停止闪烁,单击“Run”,运行程序,LED灯又开始闪烁。
关闭所有窗口,本实验完毕。
4、源程序代码及注释
流程图:
源程序:
exp04.c
注释
#include"tms320uc5402.h"
ioportunsignedport8001;
unsignedintshow=0x00aa;
unsignedintnum=0x0000;
voidsys_ini()
{
asm("ssbxINTM")
PMST&=0x00FF;
SWWSR=0x7000;
CLKMD=0x17FA;
}
voidtimer0_ini()
{
TCR|=0x0010;PRD=0x2710;
TCR|=0x000A;
IMR=0x0008;
IFR=0xFFFF;
asm("rsbxINTM");
TCR&=0xFFEF;TCR|=0x0020;
}
声明c文件的头文件(引用包)
定义输出地址为8001H,其中数据控制LED灯
10101010,初始状态为1357灯亮
定义全局变量num,计数计时中应用,初始值为0
系统初始化子程序
(INTM中断模式位,ssbx:
状态寄存器位置位)全局禁止所有可屏蔽中断
DRAM映射到程序空间和数据空间)向量表映射;0x0080空间0x00FF=0000000011111111,与运算后复位处理器方式状态寄存器后8位,初始地址为FF80H,将前八位强制置为0,即为0080H,将0080H作为所使用中断的地址,即定时器中断
io空间7个等待周期,程序与数据空间0个等待周期,0x7000=0111000000000000,12~14表示io空间,(111=7(d)),11~0表示程序与数据空间,软件等待状态寄存器
CLKOUT=2*CLKIN=2*10M=20M,倍频,自动增大系统频率
定时器0初始化子程序
TSS,停止定时器0(TCR:
定时器控制寄存器)
PRD=10000(D),PRD定时周期寄存器
TDDR=10(D),相当于进行了两次分频,定时器时钟=1/20M*10*10000=5ms
使能定时器0中断,数据溢出时产生中断,中断屏蔽
清除所有中断标志位
全局使能可屏蔽中断
开始定时器0
复位定时器0
中断服务子程序声明与定义
注释
interruptvoidtimer0(){
if(num==200){
show=~show;num=0;}
else
num++;return;
}
//定时器0中断子程序
//记200次定时器中断,时间=200*5ms=1s
//取反,通过show的值控制灯的亮灭
//重新计时
//计数
主程序
注释
voidmain(void)
{
sys_ini();
timer0_ini();
for(;;)
{
port8001=show;}
}
//系统初始化
//定时器0初始化
//循环
//将show的值赋给8001H,控制灯的亮灭
源程序:
vectors.asm(定义中断向量表)
注释
.global_c_int00,_timer0
.sect".vecs"
RESET:
b_c_int00
nop
nop
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程序主函数(branchtoCentrypoint延迟分支到c程序,默认入口地址c_int00)
开辟堆栈空间
NMI非屏蔽外部中断输入引脚,不可屏蔽中断时,返回并允许产生该中断
保留中断地址的空间
外部中断定义:
需定义所有可能出现的外部中断,但由于本实验中的中断是由定时器产生的,即经过一定的时间跳转到C程序。
所有只有tint0,定时器0产生定时中断时跳转到C程序中的子函数,其他的中断均为返回并允许(RETE)。
中断寄存器设置为rete返回,允许中断外部产生中断,并且直接返回
检测到定时器产生中断时,返回到c程序中的timer()
串口0接受中断,直接返回
串口0发送中断,直接返回
串口1接受中断,直接返回
串口1发送中断,直接返回
总结:
使用定时器产生周期性的CPU中断,定时器结果通过led灯显示,定时1秒钟。
实验五INT2中断实验
1、实验目的
1、掌握中断技术,学会对外部中断的处理方法。
2、掌握中断对程序流程的控制,理解DSP对中断的响应时序。
2、实验设备
计算机,CCS3.3版软件,DSP仿真器,实验箱。
三、实验步骤和内容
1、实验说明
DSP的INT2中断为低电平沿触发。
2、实验过程
本实验是进行C54芯片的INT2中断练习,C54芯片中断INT2是低电平单脉冲触发;实验采用导线一端连接D_Exp—数字量输入扩展接口I0,经PX4的IN3,到PX5的OUT0电平转换,再与另一端连接INT2插孔;拨动开关K0一次,就产生一个低电平单脉冲;运行示范程序,观察LP1~LP7LED灯的输出变化;可观察到每拨动开关K0一次LP1~LP7灯亮灭变化一次;
样例程序实验操作说明:
启动CCS2.0,并加载“exp05.out”,单击“Run”运行程序,反复拨动开关K0,观察LP1~LP7LED灯亮灭变化,单击“Halt”暂停程序运行,反复拨动开关K0,LP1~LP7LED灯亮灭不变化;
关闭所有窗口,本实验完毕。
四、源程序代码及注释
流程图:
源程序:
int2.c
注释
interruptvoidint2c();
externvoidinitial();
externvoidporta();
externvoidportb();
intflag=0,i=0;
main()
{
initial();
while
(1)
{;}
}
interruptvoidint2c()
{
i=i+1;
if(i==1)
{
if(flag==0)
{
flag=1;
porta();
i=0;
}
else
{
flag=0;
portb();
i=0;
}
}
else
{
i=0;
}
return;
}
主函数
系统初始化
死循环
中断子程序
当i为一时,让灯点亮,否则让i为零
当flag为零时,执行porta(),让ar1的值为5555h,即第一三五七个灯亮
当flag为一时,执行portb(),让ar1的值为aaaah,即第二四六八个灯亮
源程序:
initial.asm
注释
.mmregs
.global_initial
.text
_initial:
NOP
LD#0,DP
STM#0,CLKMD
STM#0,CLKMD
TstStatu1:
LDMCLKMD,A
AND#01b,A
BCTstStatu1,ANEQ
STM#0xF7FF,CLKMD
STM0x3FA0,PMST
ssbx1,11
stm00h,imr
stm0ffffh,ifr
stm04h,imr
rsbx1,11
ret
.end
已初始化可执行代码段
初始化函数开始
;空操作
;resetdatapointer将0装入数据页指针(DP)中
;softwaresettingofDSPclock
;(todividermodebeforesetting)设置pll为div分频模式
;将CLKMD的值装入到累加器A中
;pollSTATUSbit将A中数据和01b求与之后存入A中
;ANEQ,A不等于0时程序跳转到TstStatu1
;setC5402DSPclockto10MHz
;vectorsat3F80h,ARAM映射到数据和程序存储空间
设置ST1.INTM=1,停止所有的中断
停止所有的中断,中断屏蔽寄存器(IMR)在需要的时候独立地屏蔽特定的中断
清除所有中断的标志位,中断标志寄存器(IFR)用来指明各个中断的目前状态。
开启int2的外部中断
打开所有中断
源程序:
port.asm
注释
.mmregs
.global_porta
.global_portb
_porta:
stm304h,ar1
st5555h,*ar1
portw*ar1,8001h
ret
_portb:
stm304h,ar1
st0aaaah,*ar1
portw*ar1,8001h
ret
将304h赋值给辅助寄存器ar1
将内存304h的内容赋值给5555h,2468灯亮
将内存304h的值写入8001h端口,灯
将内存304h的内容赋值给0aaaah,1257灯亮
将内存304h的值写入8001h端口,灯
源程序:
vectors.asm
注释
.sect".vectors"
.ref_c_int00
.ref_int2c
.align0x80
RESET:
BD_c_int00
STM#200,SP
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
i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- dsp 硬件 实验 报告