实验二存储器寻址及IO操作实验.docx
《实验二存储器寻址及IO操作实验.docx》由会员分享,可在线阅读,更多相关《实验二存储器寻址及IO操作实验.docx(19页珍藏版)》请在冰豆网上搜索。
实验二存储器寻址及IO操作实验
实验二存储器寻址及I/O操作实验
一、实验目的
1)掌握TMS320VC5402的存储器空间分配
2)熟悉TMS320C54x的各种存储器操作指令
3)掌握各种寻址方式
4)掌握I/O口操作方法
二、实验设备
1)微机一套,DSP硬件开发器一套,DSP实验箱一套
2)程序及链接命令文件见:
D:
\EXPER\EXP2目录下的.asm和.cmd文件
三、开关设置
将开关K9拨到右边,即仿真器选择连接右边的CPU2。
四、实验步骤:
做过了实验一,相信各位同学对于CCS的基本操作已经了解,故在此不再赘述。
1)打开CCS,新建项目文件,添加源程序和链接命令文件,编译程序,加载目标代码文件。
2)打开各个观察窗口,请注意,本实验需要打开三个内存窗口:
Data页的0x2000(.data段)起始处、Data页的0x3100(.stack段)之前、以及Program页的0x1f00起始处
3)按照实验一的步骤设置断点,观察方法也基本相同,下面仅对各个小段程序进行简要说明:
bk1:
立即数寻址方式
bk2:
绝对地址寻址方式
bk3:
绝对地址寻址方式
bk4:
累加器寻址方式
bk5:
直接寻址方式(DP为基准)
bk6:
直接寻址方式(SP为基准)
bk7:
间接寻址方式
bk8:
存储器映射寄存器寻址方式
bk9:
堆栈寻址方式
bk10:
将程序存储器0x1000为起始地址的100个字复制到数据存储器的0x3100为起始地址的空间中
3)全速执行程序,并调整K1~K8开关,观察输出对应的发光管LED1~8是否点亮。
五、实验报告
1)写出各个BK1到BK10的每一小段都使用了那些寻址方式?
注意一条指令可以含有多种寻址方式。
2)写出BK1到BK9每段发生变化的存储器单元的内容,以及BK10实现的功能。
3)自己编写一段程序插入到BK11段后面,使数存单元2000H和~2007H清零,将2100H开始的连续100个单元清零分别初始化为0,2,4…198.
4)读TESTIO段,说明为何程序连续运行后,开关K1~K8的状态会改变LED1~8的显示。
六、源程序及链接命令文件
*************************************************
*FileName:
*
*Description:
数据存储器和程序存储器及I/O实验*
*Writeby:
lanrunze*
*Date:
2004-2-10*
*Update:
2006-10-30*
*************************************************
*输入端口IO地址为8000H使用74ls244作为八个开关K1~K8的输入缓冲
*输出端口IO地址为8001H使用74ls273作为八个发光二极管LED1~LED8的输出锁存
*注意观察存储器或者累加器变化时,由于内部存在流水线原因,
*因此要多执行几个周期才能观察到变化
.title"ex2.asm";源程序名称
.globalreset,_c_int00;定义全局变量
.mmregs;使用预定义的存储器映像寄存器
DAT0.set00H;定义数存直接寻址方式的低7位地址
DAT1.set01H
DAT2.set02H
DAT3.set03H
DDAT0.set2004H;定义数存绝对寻址方式的16位地址
DDAT1.set2005H
DDAT2.set2006H
DDAT3.set2007H
PDAT0.set1f00H;定义程存绝对寻址方式的16位地址
PDAT1.set1f01H
PDAT2.set1f02H
PDAT3.set1f03H
Stack_Length.set100H;堆栈长度
.sect".vectors";定义中断向量段,用于存储中断向量表
reset:
B_c_int00;复位中断向量入口地址
NOP
NOP
.space4*16*31;为其它中断向量保留空间
STK:
.usect"STACK",Stack_Length;定义堆栈段
.text;程序段
_c_int00:
;默认程序入口
LD#40h,DP;置数据页为2000h~207Fh
STM#STK+Stack_Length,SP;置堆栈指针
SSBXINTM;禁止中断
STM#07FFFh,SWWSR;置外部等待时间
ldmPMST,A;修改IPTR段
and#0x3f,A;去掉IPTR
or#0x3f80,A;IPTR位等于3F80
stlma,PMST;写入IPTR
bk1:
ST#1234h,DAT0;1234为立即数寻址DAT0为直接寻址省略@符号
ST#5678h,*(DDAT1);*(DDAT1)为绝对寻址DDAT1是符号常数
NOP
NOP
NOP
bk2:
MVDKDAT0,DDAT0;绝对地址(dmad)寻址0X2004单元
MVKDDDAT1,DAT1;
NOP
NOP
NOP
bk3:
MVDPDAT0,PDAT0;绝对地址(pmad)寻址
MVDPDAT1,PDAT1;
NOP
NOP
NOP
bk4:
LD#PDAT1,A;累加器寻址
READADAT2;读取程存0X1F01中的数值送到数存
NOP
NOP
NOP
bk5:
ST#3210h,DAT3;直接寻址(DP指针)
NOP
NOP
NOP
bk6:
SSBXCPL
NOP
NOP
NOP
ST#9876h,DAT3;直接寻址(SP指针)
NOP
NOP
NOP
RSBXCPL
NOP
NOP
NOP
bk7:
STM#DDAT3,AR0;间接寻址
ST#8765h,*AR0
NOP
NOP
NOP
bk8:
STM#8888h,T;存储器映射寄存器寻址
NOP
NOP
NOP
bk9:
PSHMT;堆栈寻址
NOP
STM#0h,T
NOP
POPMT
NOP
NOP
NOP
bk10:
STM#2100h,AR0;程序存储器到数据存储器的复制
RPT#99;单指令重复100次
MVPD1000H,*AR0-;在该指令重复的过程中程存地址自动增加
NOP
NOP
NOP
bk11:
NOP;自己添加程序段,
(1)将数据存储空间2000H到2007H清零
;
(2)将2100h开始的连续100个单元分别初始化为0,2,4,6,8...,198
bk11:
STM#2000h,ar1
ld#0,A
RPT#9
STLA,*AR1+
NOP
NOP
STM#2000h,AR0
RPT#7(下一条语句循环n+1次)
ST#0000h,*AR0+
NOP
NOP
NOP
NOP
ST#0000H,*(2100H)
LD#0,A
STM#98h,BRC(循环计数器)改完程序后要重新编译下载。
STM#2101h,AR2
RPTBTestIO-1
ADD#2,A,A
STLA,*AR2+
NOP
NOP
NOP
NOP
TestIO:
;为了便于观察按键与显示LED的关系,可将程序连续执行
.bssKey_Value,1;定义变量用于保存按键数值
stm#Key_Value,ar1;
portr8000h,*ar1;读端口8000H并存入数存单元
nop
nop
portw*ar1,8001h;将数存单元内容送到8001H端口
nop
nop
bk12:
B_c_int00;为了观察循环执行程序
.end
2、链接器命令文件exp2.cmd
MEMORY
{
PAGE0:
VECS:
origin=0x3f80,length=0x80
PROG:
origin=0x1000,length=0x1000
PAGE1:
DATA:
origin=0x2000,length=0x1000
STACK:
origin=0x3000,length=0x780
}
SECTIONS
{
.vectors:
{}>VECSPAGE0
.text:
{}>PROGPAGE0
.data:
{}>DATAPAGE1
STACK:
{}>STACKPAGE1
}
第4章附录
附录1:
TMS320C5402CPU及外设存储器寄存器映射表
0
IMR
中断屏蔽寄存器
1
IFR
中断标志寄存器
2-5
-
测试保留
6
ST0
状态寄存器0
7
ST1
状态寄存器1
8
AL
累加器A低字(15-0比特)
9
AH
累加器A高字(31-16比特)
A
AG
累加器A保护位(39-32比特)
B
BL
累加器B低字(15-0比特)
C
BH
累加器B高字(31-16比特)
D
BG
累加器B保护位(39-32比特)
E
T
暂存寄存器
F
TRN
传送寄存器
10-17
AR0-AR7
辅助寄存器ARnn=0~7
18
SP
堆栈指针
19
BK
循环缓存区大小寄存器
1A
BRC
块重复计数器
1B
RSA
块重复开始地址
1C
REA
块重复结束地址
1D
PMST
状态寄存器
1E
XPC
程存扩展寻址寄存器
1E-1F
-
保留
20
McBSP0_DRR2
带缓存串口0数据接收寄存器2
21
McBSP0_DRR1
带缓存串口0数据接收寄存器1
22
McBSP0_DXR2
带缓存串口0数据发送寄存器2
23
McBSP0_DXR1
带缓存串口0数据发送寄存器1
24
TIM
定时器计数器
25
PRD
定时器周期寄存器
26
TCR
定时器控制寄存器
27
-
保留
28
SWWSR
等待状态产生寄存器
29
BSCR
Bank-switching控制寄存器
2A
-
保留
2B
SWCR
扩展等待控制寄存器
2C
HPIC
主机接口控制寄存器
2D-2F
-
保留
30
TIM1
定时器计数器
31
PRD1
定时器周期寄存器
32
TCR1
定时器控制寄存器
33-37
-
保留
38
McBSP0_SPSA
多缓冲串口0子地址寄存器
39
McBSP0_SPSD
多缓冲串口0子数据寄存器
3A-3B
保留
3C
GPIOCR
GPI/O引脚控制寄存器
3D
GPIOSR
GPI/O引脚状态寄存器
3E-3F
保留
40
McBSP1_DRR2
带缓存串口1数据接收寄存器
41
McBSP1_DRR1
带缓存串口1数据发送寄存器
42
McBSP1_DXR2
带缓存串口1控制寄存器
43
McBSP1_DXR1
带缓存串口1控制扩展寄存器
44-47
-
保留
48
McBSP1_