数据存储器和程序存储器实验
实验目的:
了解DSP内部数据存储器和程序存储器的结构
了解DSP指令的几种寻址方式
实验要求:
主要是对外扩数据存储器进行数据的存储、移动。该实验所需要的硬件主要是DSP、CPLD、DRAM。实验过程是:让学生通过CCS C5000的DSP仿真器对DSP进行仿真,向DSP外扩DRAM写入数据、读数据、数据块的移动,其操作结果通过CCS5000仿真界面进行观察或通过发光二极管观察其正确性。
程序文件:ex2.asm
实验步骤:
经过了实验一以后,相信各位同学对于CCS的基本操作已经了解,故在此不再赘述。
1、以Emulator方式启动CCS,打开项目文件,编译程序,加载目标代码文件。
2、打开各个观察窗口,值得注意的是,本实验需要打开三个内存窗口:Data页的0x2000(.data段)起始处、Data页的0x3000(.stack段)起始处、以及Program页的0x1f00起始处
3、按照实验一的步骤设置断点,观察方法也基本相同,下面仅对各个小段程序进行简要说明:
bk0: 通过对XF引脚的置位和复位实现发光二极管的闪烁
bk1: 立即数寻址方式
bk2: 绝对地址寻址方式-数据存储器地址寻址
bk3: 绝对地址寻址方式-程序存储器地址寻址
bk4: 累加器寻址方式
bk5: 直接寻址方式(DP为基准)
bk6: 直接寻址方式(SP为基准)
bk7: 间接寻址方式
bk8: 存储器映射寄存器寻址方式
bk9: 堆栈寻址方式
bk10: 将程序存储器0x2000为起始地址的0x100个字复制到数据存储器的0x4000为起始地址的空间中
源程序:
************************************************
* FileName: ex2.asm *
* Description: 数据存储器和程序存储器实验 *
* Copyright(C) SanZhi Electronic, Author Zpin *
************************************************
.title "ex2"
.global reset,_c_int00
.mmregs
.def _c_int00
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 _c_int00 ;复位向量
NOP
NOP
.space 4*126
.text
DELAY .macro COUNT
STM COUNT,BRC
RPTB delay?
NOP
NOP
NOP
NOP
delay?: NOP
.endm
_c_int00:
LD #40h,DP ;置数据页为2000h~207Fh
STM #3000h,SP ;置堆栈指针
SSBX INTM ;禁止中断
STM #07FFFh,SWWSR ;置外部等待时间
bk0: SSBX XF ;置XF以实现二极管闪烁
DELAY #0FFFFh
RSBX XF
DELAY #0FFFFh
SSBX XF
DELAY #0FFFFh
;b bk0
bk1: ST #1234h,DAT0 ;立即数寻址
ST #5678h,*(DDAT1)
NOP
NOP
NOP
bk2: MVDK DAT0,DDAT0 ;绝对地址(dmad)寻址
MVKD DDAT1,DAT1
NOP
NOP
NOP
bk3: MVDP DAT0,PDAT0 ;绝对地址(pmad)寻址
MVDP DAT1,PDAT1
NOP
NOP
NOP
bk4: LD #PDAT1,A ;累加器寻址
READA DAT2
NOP
NOP
NOP
bk5: ST #3210h,DAT3 ;直接寻址(DP指针)
NOP
NOP
NOP
bk6: SSBX CPL
NOP
NOP
NOP
ST #9876h,DAT3 ;直接寻址(SP指针)
NOP
NOP
NOP
RSBX CPL
NOP
NOP
NOP
bk7: STM #DDAT3,AR0 ;间接寻址
ST #9876h,*AR0
NOP
NOP
NOP
bk8: STM #8888h,T ;存储器映射寄存器寻址
NOP
NOP
NOP
bk9: PSHM T ;堆栈寻址
POPM T
NOP
NOP
NOP
bk10: STM #4000h,AR0 ;程序存储器到数据存储器的复制
RPT #100h
MVPD 1000H,*AR0+
NOP
NOP
NOP
bk11: B _c_int00
.end