-
实验一
CCS
及基本指令实验
< br>
一、实验目的
1
)
了解
TMS320C54x
汇编语言程序的基本格式,
以及使用
CCS
进行汇编、
链接的基本过程。
2
)熟悉硬件仿真器
Emulator
和软件仿真器
Simulator
的使用方法。
3
)通过软件仿真器各窗口观察
< br>TMS320C5402
内部资源和修改内部寄存器状态。
4
)初步熟悉
C54x
汇编语言
COFF
公共目标格式文件。
二、实验设备
1
)
微机一
套,操作系统为
WINWODS98
、
WINDOWS2000 SP2
或
WINDOWS XP
SP1
或具有更高级
的补丁。
2
)
5000CCS2.0
软件版本。
<
/p>
3
)
程序及链接命令文件见
D:EXPEREXP1
目录下的
.asm
和
.cmd
文件。
三、开关设置
将开关
K9
拨到右边,即仿真器选择连接右边的
CPU
2
。
四、实验内容
1)
系统连接
进行
DSP
实验之前,先必须连接好仿真器、实验箱及计算机,连接方法如下所示:
计
算
机
PCI/USB/EPP
接口
JTAG
接口
仿
真
器
实验箱
JTAG
口
2)
仿真口选择开关
K9
拨到右侧,即仿真器选择连接右边的
CPU
:
p>
CPU2
;
接通
实验箱后面
220V
输入电源
,
系统会自动上电复位
,
在硬件安装完成后,确认安装正确、
各实验部件及电源连接正常后,
,此时,仿真器上的“
红色小灯
”应点亮,否则
DSP
开发系
统有问题。
3)
在
D:USER
下建立自己的目录,
并将实验所用的源程序和链接器命令文件复制到自建的
子
目录下。如
D:USERLLD
4
)
启动
CCS,
待计算机启动成功后,
开关置“
ON
”
,实验箱上电,启动<
/p>
CCS
,此时仿真器上的
“绿色小灯”<
/p>
应点亮,并且
CCS
正常启动,表明系统
连接正常;否则仿真器的连接、
JTAG
接口或
CCS
相关设置存在问题,则掉电,检查仿真器的连接、
JTAG
接口连接,或检查
CCS
相
关设置是否正确。
5)
建立项目文件
:
如果还没有建立项目文件,
则使用<
/p>
[Project]-[New]
菜单中新建一个项目。
在选
porject creat
对话框中的
Project location
中选择或填入新建项目的路径(如
D:USERLAN
)
,在
project
中添入项目名称
(如
)并选择完成。这样就在
D:US
ERLANTEST
目录下建立了一个名称为
< br>的项目文件。
注意:实验程序所在的目录不能包含中文,目录不能过深
p>
打开项目文件
:如果项目已经建立,则使用在
[Project]-[Open]
菜单
,
< br>通过改变目录打开该
目录下面下的项目文件“
”
,不必重新添加文件。
选择
location
右边按钮
6
)在项目中添加源程序文件和链接器命令文件。使用
[Project]-
[Add files to project]
命令分别
添加
扩展名为
.asm
和
.cmd
的两个文件(注意:在选择添加文件前要修改文件的察看类型为
ALL
FILE
(*.*)
,如果有
.asm
文件、
.cmd
文件、
.c
文件和
.lib
文件也要添加)
,再选择
[Project]-[Save]
保存新建的项目。
7
)在左边树状列表框内双击
[Projec
t]
展开目录树,双击
[]
打开源程序
文件(或者
打开自己编写的程序)
,
参
考程序中的注释仔细阅读源程序;
选择
[Project]-[
Build]
可对源
程序进行编译,生成
.out
文件。
7
)
使
用
[File]-[Load
p>
Programm]
中
加
< br>载
输
出
执
行
代
码
文
件
(
文
件
在
D:USERLANTESTDEBUG
目
录下)
。
8)
选择
[View]-[CPU
Register]
(或点击左边工具栏的快捷按钮)打开处理
器映射寄存器窗
口。
9)
选择
[View]-[Memory]
(或点击左
边工具栏的快捷按钮)
,在弹出的
[Windows
Memory
Options]
对话框的
Address
文本框中输入
0x2060
,
Page
下拉框中选中
Da
ta,
确定后将打开
数据存储器查询窗口,此时数据存储器地址
0x2060
~
0x2063
就对应着
中声明的标
号
为
DAT0
~
DAT3
的四个单元。
10)
p>
调整源程序、
[memory]
、
[CPU
Registers]
三个窗口的大小,以便于观察。
11)
依次把光标移动到反汇编窗口中标号为
bk?
(
?
表示从
0
开始的整数)段的最后一个
nop
指令处,选择菜单
[Debug]-[Breakpoint]
(或者点击快捷按钮手行按钮)
设置断点,
断点设
置后,
都将以红色原点显示。如果想取消断点,可以将光标移动到该行处,
重新作一次断点
设置操作。
12)
选择
[Debug]-[Run]
(也可以按快捷键
F5
或点击快捷按钮)执行
程序。
13)
程序将停止在第一个断
点
bk0
位置,
bk0
标号下的指令将以黄色箭头指示,在存储器映
射
CPU
寄存器窗口和数据存储器查询窗口中双击相应操作数的内容,即可进行修改(注意:
p>
如步骤
9
所述,
D
AT0
~
DAT3
对应地址为
0X2060
~
0X2063
< br>)
,
然后在存储器映像
cpu<
/p>
寄存器窗
口中和数据存储器查询窗口中观察指令执行结果。
可试着修改一下指令操作数的内容,
然后
重新
进行编译、链接、载入程序,最后执行,观察存储器中内容的变化。
< br>14)
重复执行
9
、
10
步骤,依次观察加法指令、减法指令、乘法指令、除法指令、平方指令
以及
3
数累加宏指令的执行结果,调用
子程序前后堆栈指针及堆栈中数值的变化。
15)
全部程序执行后,程序转到
bk0
处,可再次重复
以上指令的实验。
16)
可使用
p>
[Debug]-[Restart]
重新执行程序,或者
[Debug]-[Reset CPU]
将
5
402
复位。
五、实验报告:
1
)
p>
TMS320C54X
在复位时,
PC=?
,ST0=? ,ST1= ? ,PMST= ?
注意:<
/p>
硬件复位是在硬件仿真条件下进行的,
使用菜单执行
[Debug]-[Reset
CPU]
进行复位。
2
)
如何检查程序存储器和数据存储器的内容?
3
)
给出每
段执行后的结果。即
START
段执行后的
DP
和
SP
值,
Bk0, Bk1 ,Bk2 Bk4
段执行
后
A
的值,
Bk3
段之行后数存
2062
和
2063
单元的值,
BK
5执行后
2063
单元的值,
BK
6执行后
2003
单元的
值。
六、源程序及链接命令文件
1
、
***
**********************************************
* FileName:
*
* Description:
DSP
指令实验
*
*
Write by: lanrunze *
* Date:
2004-2-10
*
*
Update:
2006-10-30
*
*************************************
************
*
注意:如果使用硬件仿真,由
于在
DSP
中存在流水线的原因,因此观察存储器和
*
寄存器变化时要多执行几个周期,才能看到相
应的变化。
.title
;
源程序名称
.mmregs
;
使用存储器映像寄存器
.def _c_int00
;
定义默认程序入口地址
DAT0
.set
60H
;
定义直接寻址所使用的低
7
位地址
DAT1
.set
61H
DAT2
.set
62H
DAT3
.set
63H
.bss Data0,1
;
定义
1
字长变量
.bss
Data1,1
.bss
Data2,1
.bss Data3,1
STK .usect
定义堆栈段,长度
100H
.sect
;
定义中断向量段,用于存储中断向量表
reset:
BD _c_int00
;
复位向量
stm #STK+100h,SP
.space 4*16*31
;
为其它中断向量保留空间
.text
;
程序段开始
ADD3
.MACRO
P1,P2,P3,ADDRP;
定义实现三数相加的宏
:
ADDRP = P1 + P2 + P3
LD
@P1,A
;
宏即宏替换,在调用程序时进行宏展开
ADD
@P2,A
;
宏的使用方法类似于子程序,但不同点在于宏可
以带参数
ADD @P3,A
STL A,@ADDRP
.ENDM
_c_int00:
;
默认程序入口地址
B start
start: LD #40H,DP
;
置数据页指针
from
0x2000 to ox207f
STM
#3000h+100h,SP
置堆栈指针
SSBX INTM
;
禁止中断
ldm
PMST,A
修改
IPTR
段
and #0x3f,A
;
去掉
IPTR
or #0x3f80,A
将
IPTR
位域改为
7fH,
stlm a,PMST
;
写入
IPTR
即中断向量表首地址为
0x3
f80
bk0:ST
#0012h,@DAT0
加法
LD #0023h,A
ADD @DAT0,A
;
NOP
NOP
NOP
NOP
bk1:ST
#0054h,@DAT0
;
减法
LD #0002h,A
SUB @DAT0,A
NOP
NOP
NOP
NOP
bk2:ST #0345h,@DAT0
;
乘法
STM #0002h,T
MPY @DAT0,A
NOP
NOP
NOP
NOP
bk3:ST
#1000h,@DAT0
除法
1000h/41h
ST #0041h,@DAT1
RSBX SXM
LD @DAT0,A
RPT #15
SUBC @DAT1,A
STL A,@DAT2
STH
A,@DAT3
NOP
NOP
NOP
NOP
bk4:ST
#0333h,@DAT0
求平方
SQUR @DAT0,A
NOP
NOP
NOP
NOP
bk5:ST #0034h,DAT0
;
调用宏进行求和运算
ST #0243h,DAT1
ST #1230h,DAT2
ADD3 DAT0,DAT1,DAT2,DAT3
NOP
NOP
NOP
bk6:ST #0034h,Data0
;
调用子程序进行求和运算
ST #0243h,Data1
ST #1230h,Data2
call add_sub;
NOP
2
、
链接器
命令文件
MEMORY
{
PAGE 0: VECS:
origin = 0xff80,length = 0x80
PROG:
origin = 0x1000,length
= 0x1000
PAGE 1: DATA:
origin = 0x2000,length = 0x1000
STACK:
origin =
0x3000,length = 0x1000
}
SECTIONS
{
.vectors:
.text:
.data:
STACK:
}
NOP
NOP
NOP
bk7:ST #0h,@DAT0
;
循环运行前将各数存单元清零
ST #0h,@DAT1
ST #0h,@DAT2
ST
#0h,@DAT3
ST #0h,@Data0
ST
#0h,@Data1
ST #0h,@Data2
ST #0h,@Data3
NOP
NOP
NOP
B start
;
程序循环执行
add_sub: STM
#Data0,AR2
求和子程序
RPTZ A, #2
ADD *AR2+,A
STL
A,*AR2
RET
.end
{}
{}
{}
{}
>
>
>
>
VECS
PAGE 0
PROG
PAGE 0
DATA
PAGE
1
STACK PAGE 1
第
4
章
附
录
附录
1<
/p>
:
TMS320C5402
CPU
及外设存储器寄存器映射表
0
1
2-5
6
7
8
9
A
B
C
D
E
F
10-17
18
19
1A
1B
1C
1D
1E
1E
-
1F
20
21
22
23
24
25
26
27
28
29
2A
2B
IMR
IFR
-
ST0
ST1
AL
AH
AG
BL
BH
BG
T
TRN
AR0-AR7
SP
BK
BRC
RSA
REA
PMST
XPC
-
McBSP0_DRR2
McBSP0_DRR1
McBSP0_DXR2
McBSP0_DXR1
TIM
PRD
TCR
-
SWWSR
BSCR
-
SWCR
中断屏蔽寄存器
中断标志寄存器
测试保留
状态寄存器
0
状态寄存器
1
累加器
A
低字(
15
-
0
比特)
累加器
A
高字(
31
-
16
比特)
累加器
A
保护位(
39
-
32
比特)
累加器
B
低字(
15
-
0
比特)
累加器
B
高字(
31
-
16
比特)
p>
累加器
B
保护位(
39
-
32
比特)
暂存寄存器
传送寄存器
辅助寄存器
ARn
n
=
0
~
7
堆栈指针
循环缓存区大小寄存器
块重复计数器
块重复开始地址
块重复结束地址
状态寄存器
程存扩展寻址寄存器
保留
带缓存串口
0
数据接收寄存器
2
带缓存串口
0
数据接收寄存器
1
带缓存串口
0
数据发送寄存器
2
带缓存串口
0
数据发送寄存器
p>
1
定时器计数器
定时器周期寄存器
定时器控制寄存器
保留
等待状态产生寄存器
Bank-
switching
控制寄存器
保留
扩展等待控制寄存器
-
-
-
-
-
-
-
-
-
上一篇:说男人的经典语句
下一篇:宝马X5X6_E70E71_打开隐藏功能的教程 (3)