dsp实验报告.docx
《dsp实验报告.docx》由会员分享,可在线阅读,更多相关《dsp实验报告.docx(43页珍藏版)》请在冰豆网上搜索。
dsp实验报告
DSP实验报告
班级:
电信073班
实验者:
卢思亮06401200205
同实验者:
梁峻华06401200203
电气与信息工程学院
实验一I/O实验
实验目的:
熟悉SZ—DSPII实验平台的使用;
了解DSP对I/O口的访问方式;
熟悉简单的程序设计及指令运用。
实验设备:
计算机;DSP硬件仿真器;DSP实验开发平台。
实验硬件设置:
在做实验以前,需要接通该实验的硬件电路,本实验为:
先将实验箱右侧的船型开关往“I”方向打开电源,然后将系统主板的开关S33往下拨接通+/-5V电源,然后将CPLD/FPGA模块上的电源开关S9往下(ON)拨,开关S10往下拨来选通主板上发光二极管等输出指示设备;将系统主板中“MCU/DSP选择档”选中MCU(往下拨),将“功能键7”拨上去,电击键盘中的RST键,MCU将对所有发光二极管进行检测,如果所有的发光二极管正常,则将“MCU/DSP选择挡”选中DSP,将功能键1到7都拨下来。
然后开始做实验,注意在做实验时开始按了RST硬件复位后,实验不要再按RST键,以免由于DSP复位而失败。
如果实验中硬件工作不正常,可按RST对整个系统硬件进行复位。
实验原理:
本程序主要是实现将数据往一个I/O端口送,从而显示一种状态,来验证DSP对I/O口的访问。
该实验是由DSP直接编程,往发光二极管送数,运用PORTW指令,观察发光二极管的变化,从而完成基本的I/O实验。
硬件框图
实验程序框图
开始
实验程序
.title"ex9"
.global_c_int00
.mmregs
FG_ADDR.set1002H
DATA.set60h;doubleramdata
.sect".vectors"
reset:
B_c_int00
NOP
NOP
.space31*4*16
DELAY.macrosec_tenth;延时sec_tenth/10秒
STMsec_tenth-1,AR5
loop1?
STM#09h,AR6
loop0?
STM#19999,AR7
BANZ$,*AR7-
BANZloop0?
*AR6-
BANZloop1?
*AR5-
.endm
.text
_c_int00:
LD#0h,DP
STM#3000h,SP
RSBXINTM
STM#07FFFh,SWWSR
SSBXXF;XF=1
ST#1007h,CLKMD;工作在20MHz
RPT#0FFh
NOP
STM#0ffffh,IFR
ORM#000h,IMR
RSBXSXM
ST#8100H,DATA
WRDENG:
PORTWDATA,FG_ADDR
DELAY#10
NOP
ST#4200H,DATA
PORTWDATA,FG_ADDR
DELAY#10
ST#2400H,DATA
PORTWDATA,FG_ADDR
DELAY#10
ST#1800H,DATA
PORTWDATA,FG_ADDR
DELAY#10
ST#1800H,DATA
PORTWDATA,FG_ADDR
DELAY#10
RPT#10
NOP
ST#2400H,DATA
PORTWDATA,FG_ADDR
DELAY#10
RPT#10
NOP
ST#4200H,DATA
PORTWDATA,FG_ADDR
DELAY#10
RPT#10
NOP
ST#8100H,DATA
PORTWDATA,FG_ADDR
DELAY#10
RPT#10
NOP
STM#00H,DATA
;;;
PORTWDATA,FG_ADDR
DELAY#10
NOP
ST#100H,DATA
PORTWDATA,FG_ADDR
DELAY#10
ST#200H,DATA
PORTWDATA,FG_ADDR
DELAY#10
ST#400H,DATA
PORTWDATA,FG_ADDR
DELAY#10
ST#800H,DATA
PORTWDATA,FG_ADDR
DELAY#10
RPT#10
NOP
ST#1000H,DATA
PORTWDATA,FG_ADDR
DELAY#10
RPT#10
NOP
ST#2000H,DATA
PORTWDATA,FG_ADDR
DELAY#10
RPT#10
NOP
ST#4000H,DATA
PORTWDATA,FG_ADDR
DELAY#10
RPT#10
NOP
STM#8000H,DATA
PORTWDATA,FG_ADDR
DELAY#10
RPT#10
NOP
;;;
ST#8000H,DATA
PORTWDATA,FG_ADDR
DELAY#10
ST#4000H,DATA
PORTWDATA,FG_ADDR
DELAY#10
ST#2000H,DATA
PORTWDATA,FG_ADDR
DELAY#10
ST#1000H,DATA
PORTWDATA,FG_ADDR
DELAY#10
RPT#10
NOP
ST#800H,DATA
PORTWDATA,FG_ADDR
DELAY#10
RPT#10
NOP
ST#400H,DATA
PORTWDATA,FG_ADDR
DELAY#10
RPT#10
NOP
ST#200H,DATA
PORTWDATA,FG_ADDR
DELAY#10
RPT#10
NOP
STM#100H,DATA
PORTWDATA,FG_ADDR
DELAY#10
RPT#10
NOP
ST#8100H,DATA
BWRDENG
aaanop
baaa
.end
思考题:
有哪三种以上的寻址方式可以完成上述实验?
并描述其原理。
答:
共有以下四种寻址方式可以完成上述实验:
①绝对寻址
绝对寻址利用16位地址寻址存储单元,其特点是指令中包含一个固定地址。
16位地址可以用其地址标号或程序中定义的符号常数来表示。
由于绝对地址代码的位数为16位,所以绝对地址寻址的指令至少为2个字长
②累加器寻址
累加器寻址是将累加器的内容作为地址去访问程序存储单元,即将尅假期中的数作为地址,用来对存放数据的程序存储器寻址。
③直接寻址
直接寻址是利用数据指针和堆栈指针寻址,其特点是数据存储器地址由基地址和偏移地址共同构成,共16位。
基地址位于数据存储器地址的高9位,偏移地址位于数据存储器地址的低7位。
④间接寻址
间接寻址是利用辅助寄存器内容作为地址指针访问存储器。
TMS320C54x有8个16位辅助寄存器(AR0~AR7)。
每一个寄存器都可以用来寻址64千字数据存储空间中任何一个单元。
两个辅助存储器算术运算单元(ARAU0和ARAU1)可以根据辅助寄存器的内容进行操作,完成16位无符号数算术运算。
实验二数码显示实验
一、实验目的
熟练掌握DSP的各种指令;
进一步熟悉DSP的I/O访问方式的操作,通过I/O方式将数据显示到数码管上。
二、实验设备
计算机,DSP硬件仿真器,DSP实验开发平台。
注意:
在做实验以前,需要接通该实验的硬件电路,本实验为:
先将实验箱右侧的船型开关往“I”方向打开电源,然后将系统主板的开关S33往下拨接通+/-5V电源,然后将CPLD/FPGA模块上的电源开关S9往下(ON)拨,开关S10往下拨来选通主板上发光二极管等输出指示设备;将系统主板中“MCU/DSP选择档”选中MCU(往下拨),将“功能键6”拨上去,点击键盘中的MON键,MCU将对所用的LED管进行检测。
如果所有的LED管正常,将“MCU/DSP选择档”选中DSP(往上拨),将功能键1到7都拨下来,然后开始做实验。
注意在做实验时开始按了RST硬件复位后,实验不要再按RST键,以免由于DSP复位而失败。
三、实验原理
此实验是由DSP通过IO方式对数码管进行操作,即是向数码管送数据,高4位为数码管的段码,低4位为数码管的位码,DSP用的数据线是D8~D15,如要在第0位显示一个8,就只要送入80H,其次,该实验中要求熟练运用DSP的各种指令,能使显示数据出现左移或右移等。
四、实验程序框图
实验程序:
.title"ex9"
.global_c_int00
.mmregs
SM_ADDR.set1003h;数码管的I/O地址
SM_DATA.set60h;段码在数据线的高4位,位码在数据线的次高4位.
;在CPLD模块中程序为DEMO程序的情况下,段码显示已译码,比如:
要显示7,
;只要往数据线的高4位发7即可.位码为0-7,在次高位数据线对应的数值也为0-7.
.sect".vectors"
reset:
B_c_int00
NOP
NOP
.space31*4*16
.text
_c_int00:
LD#0h,DP;设置数据页指针
STM#2000h,SP;设置堆栈指针
RSBXINTM
STM#07FFFh,SWWSR
SSBXXF
ST#1007h,CLKMD;工作在20MHz
RPT#0FFh
NOP
STM#0ffffh,IFR
ORM#000h,IMR
RSBXSXM
aaanop
CALLLED07;显示0到7
CALLLED8F;显示8到F
baaa
LED8FST#8000h,SM_DATA
ST#07H,AR3
WRDENG:
PORTWSM_DATA,SM_ADDR;8-f
RPT#10000
NOP
ST#02fffH,AR6
calldelay
ADDM#1100H,SM_DATA;送位码,屏蔽低8位数据
BANZWRDENG,*AR3-
RET
LED07NOP
ST#07H,AR3
STM#0H,SM_DATA
WRDENG1NOP;0-7
PORTWSM_DATA,SM_ADDR
ST#02fffH,AR6
calldelay
ADDM#1100H,SM_DATA;送位码,屏蔽低8位数据
BANZWRDENG1,*AR3-
RET
delaySTM#0f0h,AR7;延时子程序
BANZ$,*AR7-
BANZdelay,*AR6-
RET
五、实验思考
如何设置DP、SP值,以及DP、SP在程序中所起的作用是什么?
如何理解、设置I/O等待寄存器?
答:
DP为状态寄存器0(ST0)中的9位数据存储器页指针,SP为堆栈指针。
可通过装载指令LD设置DP,通过存储指令STM设置SP。
当程序调用子程序时,需要将程序计数器PC的值和一些重要的寄存器值进行压栈保护,以便程序返回时能从间断处继续执行。
通过设置DP,SP可完成。
为了方便地使’C54x与慢速的片内存储器和I/O接口,可以通过软件可编程来延长等待周期,最多可达到7-14个机器周期,I/O空间复位值为111b。
实验三、交通灯实验
一、实验目的
了解数据输出程序的设计方法;
模拟交通灯控制,能正确的模拟交通灯。
运用定时中断
二、实验设备
计算机,DSP硬件仿真器,DSP实验开发平台。
注意:
在做实验以前,需要接通该实验的硬件电路,本实验为:
先将实验箱右侧的船型开关往“I”方向打开电源,然后将系统主板的开关S33往下拨接通+/-5V电源,然后将CPLD/FPGA模块上的电源开关S9往下(ON)拨,开关S10往下拨来选通主板上双色发光二极管(交通灯)等输出指示设备;将系统主板中“MCU/DSP选择档”选中MCU(往下拨),将“功能键7”拨上去,点击键盘中的RST键,MCU将对所用发光二极管进行检测,如果所有的双色发光二极管正常,则将“MCU/DSP选择挡”选中DSP(往上拨),将功能键1到7都拨下来。
然后开始做实验,注意在做实验时,开始按了RST硬件复位后,实验中不要再按RST键,以免由于DSP复位而失败。
如果实验中硬件工作不正常,可按RST对整个系统硬件进行复位。
三、实验原理及说明
掌握DSP的定时器、I/O访问原理,用I/O口控制红绿黄灯的开关。
四、实验程序框图
实验程序
.title"ex8"
.global_c_int00
.mmregs
LED_ADDR.set1001h
STATUS0.set60h
STATUS1.set61h
STATUS2.set62h
STATUS3.set63h
STATUS4.set64h
STA2_PRE_0.set65h
STA2_PRE_1.set66h
STA4_PRE_0.set67h
STA4_PRE_1.set68h
DELAY.macrosec_tenth;延时sec_tenth/10秒
STMsec_tenth-1,AR5
loop1?
STM#09h,AR6
loop0?
STM#19999,AR7
BANZ$,*AR7-
BANZloop0?
*AR6-
BANZloop1?
*AR5-
.endm
.sect".vectors"
reset:
B_c_int00
NOP
NOP
.space4*127
.text
_c_int00
LD#0h,DP
STM#3000h,SP
SSBXINTM
SSBXSXM
STM#07FFFh,SWWSR;IO总线外部等待时间14个周期
STM#0h,CLKMD;20MHz工作
tstBITFCLKMD,#1h
BCtst,TC
STM#1007h,CLKMD
RPT#0FFh
NOP
ST#0FFFFh,IFR
ORM#000h,IMR
ST#0AA00H,STATUS0
LOOPBPORTWSTATUS0,LED_ADDR;全部红灯
DELAY#100;延时1秒
circleST#6600H,STATUS1
PORTWSTATUS1,LED_ADDR;南北红灯、东西绿灯
DELAY#200;延时20秒
STM#2h,BRC
RPTBflash1
ST#6600H,STA2_PRE_0
PORTWSTA2_PRE_0,LED_ADDR
DELAY#30
ST#2200H,STA2_PRE_1
PORTWSTA2_PRE_1,LED_ADDR
DELAY#30
flash1NOP;南北绿灯闪3次、东西红灯
ST#0EE00H,STATUS2
PORTWSTATUS2,LED_ADDR;南北黄灯、东西红灯
DELAY#30;延时3秒
ST#9900H,STATUS3
PORTWSTATUS3,LED_ADDR;南北红灯、东西绿灯
DELAY#200;延时20秒
STM#2h,BRC
RPTBflash2
ST#09900H,STA4_PRE_0
PORTWSTA4_PRE_0,LED_ADDR
DELAY#30
ST#08800H,STA4_PRE_1
PORTWSTA4_PRE_1,LED_ADDR
DELAY#30;南北红灯、东西绿灯闪3次
flash2NOP
ST#0BB00H,STATUS4
PORTWSTATUS4,LED_ADDR;南北红灯、东西黄灯
DELAY#30;延时3秒
Bcircle
.end
六、实验思考
如果在程序运行过程中遇到硬件中断,如何保护保持原有的现场?
答:
将程序计数器PC值(返回地址)保存到数据存储器的堆栈顶部。
在中断响应时,程序计数器扩展寄存器(XPC)不会压入堆栈的顶部,也就是说,它不会保存在堆栈中。
因此,如果ISR位于和中断向量表不同的页面,用户必须在分支转移到ISR之前将XPC压入堆栈,远程返回指令FRET(E)可以用于从ISR返回。
实验四、同步串口
一、实验目的
了解同步串口工作原理;
了解AD50工作原理。
二、实验设备
计算机,DSP硬件仿真器,DSP实验开发平台,耳机,麦克风。
注意:
在做实验以前,需要接通该实验的硬件电路,本实验为:
先将实验箱右侧的船型开关往“I”方向打开电源,然后将系统主板的开关S33往下拨接通+/-5V电源,然后将CPLD/FPGA模块上的电源开关S9往下(ON)拨。
三、实验要求
通过DSP的同步串口能向AD50发送控制字和数据,接收AD50发送的数据。
四、实验原理及说明
同步串口实验,主要是通过5402的同步串口访问A/D芯片,使学生了解同步串口工作原理。
该实验所需的硬件主要是DSP、DRAM、TMS320AD50、TLC2272,在实验过程中如果TLC320AD50C工作不正常,请按复位键(MON键或RST)对实验仪器硬件复位。
编写DSP同步串口程序访问AD50,将麦克风的语音信号经过TLC2272(双路低噪声)滤波,通过AD50的A/D转换后,将模拟信号转换为数字信号,再将数字信号发送到AD50的D/A端口。
将麦克风(红色)插入语音输入插座,耳机(黑色)插入语音输出插座。
运行程序。
要在耳机里听到麦克风所输入的声音。
五、实验程序框图
中断服务程序
实验程序:
.title"ex4"
BSP.set0;当前使用McBsp1
;McBsp内存映射寄存器
SPSA0.set038h
SPSD0.set039h
DRR10.set021h
DRR20.set020h
DXR10.set023h
DXR20.set022h
SPSA1.set048h
SPSD1.set049h
DRR11.set041h
DRR21.set040h
DXR11.set043h
DXR21.set042h
;McBspSubaddressedRegisters
SPCR1.set00h
SPCR2.set01h
RCR1.set02h
RCR2.set03h
XCR1.set04h
XCR2.set05h
SRGR1.set06h
SRGR2.set07h
MCR1.set08h
MCR2.set09h
RCERA.set0ah
RCERB.set0bh
XCERA.set0ch
XCERB.set0dh
PCR.set0eh
.ifBSP=0
SPSA.setSPSA0
SPSD.setSPSD0
RDRR.setDRR10
RDXR.setDXR10
.endif
.ifBSP=1
SPSA.setSPSA1
SPSD.setSPSD1
RDRR.setDRR11
RDXR.setDXR11
.endif
WR_SUB_REG.macroval,addr;写McBsp控制寄存器
stmaddr,SPSA
nop
stmval,SPSD
nop
.endm
RD_SUB_REG.macroaddr,acc;读McBsp控制寄存器
stm#:
addr:
SPSA
nop
ldmSPSD,acc
nop
nop
nop
.endm
WAITTRX.macro;等待串口中断
WAITR?
RD_SUB_REGSPCR1,A
and#1<<1,A
bcWAITR?
AEQ
.endm
PROGREG.macroprogword;与AD50二次通讯
stm#01h,RDXR
WAITTRX
stm#:
progword:
RDXR
WAITTRX
.endm
wait.macro
STM#0008h,AR0
RPT*AR0
NOP
.endm
.mmregs
.global_c_int00
.sect".vectors"
RESETbd_c_int00
stm#2000h,SP
.space19*4*16
BRINT0brecv
nop
nop
BXINT0btrans
nop
nop
.space10*4*16
;BRINT1brecv
;nop
;nop
;BXINT1btrans
;nop
;nop
;.space4*4*16
.text
_c_int00
ld#0h,DP
stm#2000h,SP
ssbxINTM
ssbxSXM
st#2491h,SWWSR
st#0ffe0h,PMST
st#0f007h,CLKMD
stm#4000h,AR1
stm#4000h,ar2
mcbsp_init;初始化McBsp串口
rsbxCPL
nop;cpllatency
nop;cpllatency
nop;cpllatency
ld#0,DP
ssbxINTM
ssbxSXM
WR_SUB_REG