资源描述
数据存储器和程序存储器实验
电子073 高******27
一、实验目的
了解DSP内部数据存储器和程序存储器的结构。
了解DSP指令的几种寻址方式。
二、实验要求
主要是对外扩数据存储器和程序存储器金星数据的存储和移动。该实验所需要的硬件主要是DSP、CPLD和DRAM。实验过程是:让学生通过CCSC5000的DSP仿真器对DSP进行仿真、向DSP外扩DRAM写入数据、读数据、数据块的移动,其操作结果通过CCSC5000
仿真器界面进行观察或通过发光二极管观察其正确性。
三、实验程序
.title "ex2"
.global reset,_main
.mmregs
.def _main
DAT0 .set 00H
DAT1 .set 01H
DAT2 .set 02H
DAT3 .set 03H
DDAT0 .set 2004H
DDAT1 .set 2005H
DDAT2 .set 2006H
DDAT3 .set 2007H
PDAT0 .set 1f00H
PDAT1 .set 1f01H
PDAT2 .set 1f02H
PDAT3 .set 1f03H
.sect ".vectors" ;中断向量表
reset: B _main ;复位向量
NOP
NOP
.space 4*126
circle .usect "circle", 4
.bss y,8
.data
table .word 1,2,3,4
.text
DELAY .macro COUNT
STM COUNT,BRC
RPTB delay?
NOP
NOP
NOP
NOP
delay?: NOP
.endm
_main:
LD #40h,DP ;置数据页为2000h~207Fh
STM #3000h,SP ;置堆栈指针
SSBX INTM ;禁止中断
STM #07FFFh,SWWSR ;置外部等待时间
bk0: SSBX XF ;置XF以实现二极管闪烁D3(EXPIII+)
DELAY #0FFFFh
RSBX XF
DELAY #0FFFFh
SSBX XF
DELAY #0FFFFh
;B bk0
bk1:ST #1234h,DAT0 ;立即数寻址,D(2000H)=1234H,
ST #5678h,*(DDAT1) ; D(2005H)=5678H
NOP
NOP
NOP
bk2: MVDK DAT0,DDAT0 ;绝对地址(dmad)寻址
MVKD DDAT1,DAT1 ; D(2004H)= D(2004H)=1234H
NOP ; D(2005H)= D(2001H)=5678H
NOP
NOP
bk3: MVDP DAT0,PDAT0 ;绝对地址(pmad)寻址
MVDP DAT1,PDAT1 ; D(1f00H)= D(2000H)=1234H
NOP ; D(1f00H)= D(2001H)=5678H
NOP
NOP
bk4: LD #PDAT1,A ;累加器寻址 A=1f01H
READA DAT2 ; D(1f01H)= D(2002H)=5678H
NOP
NOP
NOP
bk5: ST #3210h,DAT3 ;直接寻址(DP指针) ;D(2003H)= 3210H
NOP
NOP
NOP
bk6: SSBX CPL ;置位CPL=1
NOP
NOP
NOP
ST #9876h,DAT3 ;直接寻址(SP指针)
NOP
NOP
NOP
RSBX CPL ;复位 CPL=0
NOP
NOP
NOP
bk7: STM #DDAT3,AR0 ;间接寻址
ST #9876h,*AR0 ; AR0=2007H
NOP ; D(2007H)= 9876H
NOP
NOP
bk8: STM #8888h,T ;存储器映射寄存器寻址 T=8888H
NOP
NOP
NOP
bk9: PSHM T ;堆栈寻址
POPM T
NOP
NOP
NOP
bk10: NOP
STM 1000h,ar1 ;设置访问数据空间的地址,AR1寄存器间接寻址
RPT #07h ;下面的指令重复执行 0x07h+1次
ST 0aaaah,*ar1+ ;将数据"0AAAAH"存放到以地址1000H~1007H的八个存储单元中
NOP
;---------------------------------------------------------------
STM 7h,ar3 ;AR3=0x07h
STM 1000h,ar1 ;设置访问数据空间的地址,AR1寄存器间接寻址
STM 1008h,ar2 ;设置访问数据空间的地址,AR2寄存器间接寻址
loop: ;循环的将1000H~1007H的八个单元中的数据复制到1008H~100F的
;八个存储单元中,用T寄存器暂存
LD *ar1+,t ;*AR1-->T ,AR1=AR1+1
ST t,*ar2+ ;T-->*AR2 ,AR2=AR2+1
BANZ loop,*ar3- ;AR3=AR3-1 ,AR3=0?
NOP
bk11: STM #1,AR0
STM #table ,AR4
STM #circle,AR2
STM #4,BK
STM #y, AR3
RPT #3
MVDD *AR4+,*AR2+0% ;间接寻址(双操作数寻址、循环寻址)
RPT #7
MVDD *AR2+0%,*AR3+ ;间接寻址(双操作数寻址、循环寻址)
bk12: STM #8,AR0 ;程序存储器到数据存储器的复制
STM #4000h,AR5
RPT #15
MVPD 1000H,*AR5+0B ;绝对地址(pmad)寻址、间接寻址(位倒序)
NOP ;p(1000H)—p(100FH)存到D(3500H)—D(350FH)倒叙排列单元中
bk13: B _main
.end
四、实验步骤
(1)以simulator方式启动CCS,打开项目文件,编译程序和加载目标代码文件。
(2)本实验需要打开6个内存窗口:Data页的0x1000起始处、0x2000起始处、Data页的0x3000起始处、0x4000起始处,Program页的0x1f00起始处和0x1000起始处。
(3)按照9.3节“CCS C5000使用及DSP指令”实验的步骤设置断点,观察方法也基本相同。下面仅对各个小段程序进行简要说明:
Bk0 通过对XF引脚的置位和复位实现发光二极管的闪烁
Bk1 立即数寻址方式
Bk2 绝对地址寻址方式——数据存储器地址寻址
Bk3 绝对地址寻址方式——程序存储器地址寻址
Bk4 累加器寻址方式
Bk5 直接寻址方式(DP为基准)
Bk6 直接寻址方式(SP为基准)
Bk7 间接寻址方式
Bk8 存储器映射寄存器寻址方式
Bk9 堆栈寻址方式
Bk10 将程序存储器0x1000为起始处的0x100个字复制到数据存储器的0x4000为骑士地址的空间中
Bk11 间接寻址,循环器首地址0x1000
Bk12 间接寻址,将程序存储器0x1000为起始处的0x010个字复制到数据存储器的0x3500为骑士地址的空间中,位倒叙寻址,步长为8。
五、实验心得
展开阅读全文