实验二存储器寻址及IO操作实验Word文件下载.docx
《实验二存储器寻址及IO操作实验Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验二存储器寻址及IO操作实验Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
堆栈寻址方式
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
.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
bk2:
MVDKDAT0,DDAT0;
绝对地址(dmad)寻址0X2004单元
MVKDDDAT1,DAT1;
bk3:
MVDPDAT0,PDAT0;
绝对地址(pmad)寻址
MVDPDAT1,PDAT1;
bk4:
LD#PDAT1,A;
累加器寻址
READADAT2;
读取程存0X1F01中的数值送到数存
bk5:
ST#3210h,DAT3;
直接寻址(DP指针)
bk6:
SSBXCPL
ST#9876h,DAT3;
直接寻址(SP指针)
RSBXCPL
bk7:
STM#DDAT3,AR0;
间接寻址
ST#8765h,*AR0
bk8:
STM#8888h,T;
存储器映射寄存器寻址
bk9:
PSHMT;
堆栈寻址
STM#0h,T
POPMT
bk10:
STM#2100h,AR0;
程序存储器到数据存储器的复制
RPT#99;
单指令重复100次
MVPD1000H,*AR0-;
在该指令重复的过程中程存地址自动增加
bk11:
NOP;
自己添加程序段,
(1)将数据存储空间2000H到2007H清零
(2)将2100h开始的连续100个单元分别初始化为0,2,4,6,8...,198
STM#2000h,ar1
ld#0,A
RPT#9
STLA,*AR1+
STM#2000h,AR0
RPT#7(下一条语句循环n+1次)
ST#0000h,*AR0+
ST#0000H,*(2100H)
LD#0,A
STM#98h,BRC(循环计数器)改完程序后要重新编译下载。
STM#2101h,AR2
RPTBTestIO-1
ADD#2,A,A
STLA,*AR2+
TestIO:
为了便于观察按键与显示LED的关系,可将程序连续执行
.bssKey_Value,1;
定义变量用于保存按键数值
stm#Key_Value,ar1;
portr8000h,*ar1;
读端口8000H并存入数存单元
nop
portw*ar1,8001h;
将数存单元内容送到8001H端口
bk12:
为了观察循环执行程序
.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
STACKPAGE1
第4章附录
附录1:
TMS320C5402CPU及外设存储器寄存器映射表
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_