dsp硬件实验报告 北邮.docx
《dsp硬件实验报告 北邮.docx》由会员分享,可在线阅读,更多相关《dsp硬件实验报告 北邮.docx(51页珍藏版)》请在冰豆网上搜索。
dsp硬件实验报告北邮
北邮DSP硬件实验报告
学院:
班级:
学号:
姓名:
班内序号:
指导老师:
第三章5416常规实验
实验一:
常用指令实验
1.实验目的:
了解DSP开发系统的组成和结构,熟悉DSP开发系统的连接和开发界面,熟悉C54X系列的寻址系统,熟悉常用的C54X系列指令的用法。
2.实验设备
计算机,CCS3.3版软件,EXPIII+实验箱
3.程序源代码注释
;**************************************************************
;*北京达盛科技有限公司
;*研发部
;*
;*
;*************************************************************/
;*
;*文件名称:
xf.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的工作状态处于灭状态);
;*试验现象:
可以观察到实验箱CPLD右上方的D3按一定频率闪烁。
;*************************************************************
.mmregs--(enter memory-mapped registers into the symbol table) --进入记忆映射注册进入符号表
.global_main--(identify one or more global(external)symbols) --定义全局变量
_main:
stm#3000h,sp(堆栈指针寄存器) 堆栈指针寄存器的值为3000h(#表示立即数)
ssbxxf;将XF置位,灯亮
calldelay(存储器延时)调用延时子程序,延时
rsbxxf;将XF复位灯灭
calldelay;调用延时子程序
b_main;转移回main函数,意为无限循环
nop无操作,延时子程序
nop
delay:
stm270fh,ar1指定ar1寄存器地址,设置为9999
loop1:
stm0f9h,ar4指定ar4寄存器地址,设置为249
loop2:
banz
loop2,*ar4-;条件转移,每次转移ar4地址减一
banz
loop1,*ar1-;条件转移,每次转移ar1地址减一
ret;循环嵌套,总循环次数为270f*0f9
nop
nop
.end
4.实验现象
可以看到实验箱上的XF灯以一定的频率闪烁当单击“Halt”时程序暂定,XF灯停止闪烁,当再次单击RUN时,XF灯又开始闪烁。
实验二:
数据储存实验
1.实验目的
掌握TMS320C54的程序空间分配,掌握TMS320C54的数据空间的分配,熟悉操作TMS320C54数据空间的指令。
2.实验设备
计算机,CCS3.3版软件,EXPIII+实验箱
3.实验系统相关资料介绍
本实验指导书是以TMS32OVC5410为例,介绍相关的内部和外部内存资源。
对于其它类型的CPU请参考查阅相关的资料手册。
下面给出TMS32OVC5410的内存分配表:
对于存储空间而言,映像表相对固定。
值得注意的是内部寄存器与存储空间的映像关系。
因此在编程应用时这些特定的空间不能作其它用途。
对于程序存储空间而言,其映像表和CPU的工作模式有关。
当MP/MC引脚为高电平时,CPU工作在微处理器模式;当MP/MC引脚低电平时,CPU工作在为计算机模式。
具体的内存映像关系如上图所示。
4.程序源代码及注释
;**************************************************************
;*北京达盛科技有限公司
;*研发部
;*
;*
;*************************************************************/
;*
;*文件名称:
xf.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的工作状态处于灭状态);
;*试验现象:
可以观察到实验箱CPLD右上方的D3按一定频率闪烁。
;*************************************************************
.mmregs
.global_main
_main:
;storedata
stm1000h,ar1;addressofinternalmemory指定内部ar1寄存器地址1000h
stm5000h,ar1;addressofexteriormemory指定外部寄存器ar1的地址为5000h
rpt#07h;循环执行下一条指令,循环次数07h
st0aaaah,*ar1+;ar1所指的内存赋予0aaaah,然后ar1所指地址加1,此语句过后1000至1007地址空间中存入了0AAAA
stm7h,ar3指定ar3地址7h,循环次数
stm1000h,ar1设置ar1地址为1000h
stm1008h,ar2;设置ar2地址为1008h
loop:
ld*ar1+,t;循环读取1000h~1007h
stt,*ar2+;并将值赋予1008h~1016h
banzloop,*ar3-;循环次数为AR3
here:
;死循环.
bhere;可选择延迟的无条件转移,循环执行,无条件移至here
.end
5.实验现象
在CCS的“View”下拉菜单中的Memory窗口中查找C5416各个区段的数据存储器地址,在可以改变的存储器内容的地方,选定地址随意改变其中内容并观察结果;本实验要查看0x1000~0x100F单元的数值变化,输入地址0x1000;查看0x1000~0x100F单元的初始值,单击“Run”运行程序,也可以“单步”运行程序;单击“Halt”暂停程序运行。
实验三:
I/O实验
1.实验目的
了解I/O口的扩展,掌握I/O口的操作方法,熟悉PORTR,PORTW指令的用途,了解数字量与模拟量的区别和联系。
2.实验设备
计算机,CCS3.3版软件,EXPIII+实验箱,DSP仿真器
3.流程框图
4.程序源代码及注释
;**************************************************************
;*北京达盛科技有限公司
;*研发部
;*
;*
;*************************************************************/
;*
;*文件名称:
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的工作状态处于灭状态);
;*试验现象:
分别调整数字输入单元的开关K1~K8,观察LED1~LED8亮灭的变化,以及输入和输出状态是否一致。
;*************************************************************
.mmregs
.global_main
.text
_main:
stm3100h,sp ;定义sp的地址为3100
stm1000h,ar1;定义ar1的地址为1000
portr8000h,*ar1;读入I/O8000H数据,将其存储到数据空间的1000H,读按键
nop;nop
portw*ar1,8001h;将数据空间的1000H单元的数据,写出到I/O8001H
nop
nop
b_main;程序跳转到main函数
nop
nop
.end
5.实验现象
任意调整K0—K7开关,可以观察到对应LP0—LP7灯“亮”或“灭”;单击Halt”,暂停持续运行,开关将对灯失去控制。
实验四:
定时器实验
1.实验目的
熟悉C54的定时器,掌握C54定时器的控制方法,学会使用定时器中断方式控制程序流程。
2.实验设备
计算机,CCS3.3版软件,EXPIII+实验箱,DSP仿真器
3.实验原理及流程框图
1)实验原理
定时器实验时要用到C54芯片的定时器控制寄存器,定时器时间常数寄存器,定时器中断响应,寄存器定义详见C54芯片资料。
C54的定时器是一个20位的减法计数器,可以被特定的状态位实现停止、重新启动、重设置或禁止,可以使用该定时器产生周期性的CPU中断,控制定时器中断频率的两个寄存器是定时周期寄存器PRD和定时减法寄存器TDDR。
定时器实验通过LED(LP1~LP7)来显示。
在本系统中,时钟频率为20MHZ,令PRD=0x4e1f,这样得到每1/1000秒中断一次,通过累计1000次,就能定时1秒钟。
2)流程框图
主程序:
中断程序:
4.源程序代码及注释
*文件名称:
exp04.c
#include"tms320uc5402.h"
/*************************************************************/
/********************全局变量定义与初始化*********************/
ioportunsignedport8001;
unsignedintshow=0x00aa;
unsignedintnum=0x0000;
/*************************************************************/
/*******************函数、子程序声明与定义********************/
voidsys_ini()系统初始化子程序
{
asm("ssbxINTM");全局禁止所有可屏蔽中断
PMST&=0x00FF;向量表映射到0x0080空间前八位全部置0
SWWSR=0x7000;io空间7个等待周期,程序与数据空间0个等待周期
CLKMD=0x17FA;定义最长延长时间
}
voidtimer0_ini()定时器初始化子程序
{
TCR|=0x0010;停止定时器0
PRD=0x2710;PRD=10000(D)
TCR|=0x000A;定义定时器时钟=1/(20M/10/10000)=5ms
IMR=0x0008;使能定时器0中断
IFR=0xFFFF;清除所有中断标志位
asm("rsbxINTM");全局使能可屏蔽中断
TCR&=0xFFEF;开始定时器0
TCR|=0x0020;复位定时起0
}
/*************************************************************/
/*****************中断服务子程序声明与定义********************/
interruptvoidtimer0()定时器0中断子程序
{
if(num==200)记200次定时器中断,时间=200*5ms=1s,即灯闪烁频率
{
show=~show;取反
num=0;
}
else
num++;
return;
}
/*************************************************************/
/**************************主程序*****************************/
voidmain(void)
{
sys_ini();
timer0_ini();
for(;;)循环中断子程序
{
port8001=show;定义show,灯亮地址
}
}
*文件名称:
vectors.asm向量程序
.global_c_int00(c程序入口),_timer0(时间间断点)
.sect
".vecs"
reset:
复位中断响应
b_c_int00;c_int00是c程序的入口,这里即进入main函数中
nop
nop
nmi:
rete中断屏蔽置为0,响应中断,不可屏蔽中断产生时,使中断屏蔽取消,后返回。
nop
nop
nop
;softwareinterrupts软件中断
sin17:
.space4*16保留出中断向量的地址空间
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外部用户中断中断寄存器设置RETE返回并允许中断外部中断产生时,直接返回。
nop
nop
nop
int1:
rete;EXTERNALINT1
nop
nop
nop
int2:
rete;EXTERNALINT2
nop
nop
nop
tint0:
b_timer0;计时器每中断一次,返回一个值到TINT端口,此时转移回TIMER函数,计数器加1
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
;****************************结束*****************************
5.实验现象
单击“Run”运行,可观察到LED灯(LP0—LP7)以一定的间隔时间不停摆动;单击“Halt”,暂停程序运行,LED灯停止闪烁;.单击“Halt”,暂停程序运行,LED灯停止闪烁。
实验五:
INT2中断实验
1.实验目的
1)掌握中断技术,学会对外部中断的处理方法;
2)掌握中断对程序流程的控制,理解DSP对中断的响应时序。
2.实验设备
计算机,CCS3.3版软件,EXPIII+实验箱,DSP仿真器
3.源程序代码及注释
*文件名称:
initial.asm
.mmregs
.global_initial
.text
_initial:
(初始化)
NOP
LD#0,DP;resetdatapointerldstm赋值的意思dp指针置0
STM#0,CLKMD;定义DSP时钟
STM#0,CLKMD;分频设置
TstStatu1:
LDMCLKMD,ASLKMD的0值给a
AND#01b,A;pollSTATUSbit
BCTstStatu1,ANEQ
STM#0xF7FF,CLKMD;setC5402DSPclockto10MHz把时钟设为10mhz
STM0x3FA0,PMST;vectorsat3F80h把pmst向量表映射到0x3fa0空间地址上
ssbx1,11;setst1.intm=1stopallinterrupt设置ST1.INTM=1,停止所有的中断
stm#00h,imr;stopallinterrupt停止所有的中断出现imr跳转到向量程序
stm#0ffffh,ifr;clearallinterruptsign全置1清除所有中断的标志位,中断标志寄存器(IFR)用来指明各个中断的目前状态。
stm#04h,imr;allowint2interrupt开启int2的外部中断4=0100跳转到向量程序
rsbx1,11;allowallinterrupt打开所有中断总开关
ret
.end
*文件名称:
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;死循环执行下面步骤
}
*文件名称:
port.asm
.mmregs
.global_porta
.global_portb
_porta:
stm304h,ar1将304h赋给辅助寄存器ar1
st0005h,*ar1为内存304h赋予5555h(0101010101010101)
portw*ar1,8001h将内存304h的值写入8001h端口
ret
_portb:
stm304h,ar1
st000ah,*ar1为内存304h赋予0aaaah(1010101010101010)
portw*ar1,8001h将内存304h的值写入8001端口
ret
*文件名称:
vectors.asm
.sect".vectors"
.ref_c_int00;Centrypoint
.ref_int2c
.align0x80;mustbealignedonpageboundary
RESET:
;resetvector复位中断响应
BD_c_int00;branchtoCentrypoint进入main函数中
STM#200,SP;开辟堆栈空间
stacksizeof200
nmi:
RETE;enableinterruptsandreturnfromoneNOP
NOP
NOP
;softwareinterrupts
sint17.space4*16s
int18.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:
b_int2c;启动int2外部中断每当接收到外部信号时跳转到int2c,int2c函数,LED灯的状态变化一次
NOP
NOP
tint:
RETE
NOP
NOP
NOP
rint0:
R