dsp实验-CCS操作
实验二CCS操作
一、实验目的
1. 掌握TMS320C5400 系列汇编语言程序的基本格式;
2. 掌握程序编译、连接、运行和调试的基本过程;
3. 熟悉Code Composer Studio 的使用。
二、实验设备
1. 集成开发环境Code Composer Studio(以下简称CCS)
2. 实验代码ccs_basic.s54、ccs_basic.cmd 和ccs_basic.gel
三、实验内容、结果
1.基本操作:
1). 建立项目,并加入文件
a) 运行CCS setup,选择C5402 Simulator,选择Project→New 菜单项,建立一个新的项目ccs_basic.pjt(注意建立路径),并选择Project→add files to new project 菜单项,加入文件ccs_basic.s54 和ccs_basic.cmd;
b) 在工程视图中选中GEL files 文件夹,单击鼠标右键,在弹出的菜单中选择Load GEL 选项,载入ccs_basic.gel;
2). 编译和连接
a) 编译:选择Project-->Build Option,在Compile 表单的Category 列表中,选择Basic 选项,并设置Generate debug info 为full symbolic debug 选项,选择File s选项,并在设置Asm File Ext 中写入“s54”为汇编语言扩展名;
b) 连接:选择Project-->Build Option,在linker 表单中的Autoinit mode 选项中选择no autointialization 模式,Output Filename 中输入.\debug\ ccs_basic.out,Code Entry Point 中输入main,Map Filename 中输入ccs_basic.map,然后保存选项设置。
c) 选择Project→Build 构建整个项目,产生可执行文件ccs_basic.out;
d) 选择File->Load Program,装载可执行文件ccs_basic.out。
2.练习
1) 观察存储器映象文件ccs_basic.Map,理解存储器的配置情况;
2) 观察和修改存储器单元的内容
1). 观察存储器映象Map 文件
选择File→Open 打开ccs_basic.Map 文件,可观察
a) 存储器的配置情况:页面0 为程序空间,页面1 为数据空间;
b) 程序文本段:起始地址0x1000,存储区长度为0x0021;
c) 数据段:其中需初始化数据段.data 起始地址0x2005,存储区长度为4;
d) 不需初始化数据段.bss 起始地址0x2000,存储区长度为5;
e) 堆栈段:起始地址0x0100,存储区长度为0x0400;
f) 向量段:起始地址0x0080,存储区长度为0x0080;
g) 全局符号在存储器中的位置:共14 个符号,如符号.bss 在存储器中的位置为0x2000。将上述信息与cmd 文件中的设置比较,理解cmd 文件和连接器的关系。
答:cmd 文件为配置文件,配置文件在连接的过程中将定义DSP 的RAM 空间,
也就是对存储空间起一个配置作用。DSP 在程序中引入了各个段的概念,相应的连接时就需要进行各个段的分配。配置文件ccs.basic.cmd 内容如下:MEMORY
{
PAGE 0:
VECS: org=0x0080, len=0x80
PROM: org=0x1000, len=0x1000 /* 4k words */
PAGE 1:
STACK:org=0x100, len=0x400 /* 1k words */
DARAM: org=0x2000, len=0x1000 /* 4k words */
}
SECTIONS
{ .text:> PROM PAGE 0
vectors :> VECS PAGE 0
.bss :> DARAM PAGE 1
.data :> DARAM PAGE 1
}
可以发现以上信息基本与存储器映象文件ccs_basic.Map 中相同。memory
部分说明了存储空间的页数、长度、起始点和名称。Section 部分是对段的
配置说明:.text 段和向量段固定的连接至程序空间;.bss 段和.stack 段固定的
连接至数据空间,存储类型为RAM。连接后的配置结果为向量段从第0 页
的0x0080 地址开始存放,代码段从第0 页的0x1000 地址开始存放,堆栈段从第1 页的0x100 地址开始存放,数据段从第1 页的0x2000 地址开始存放。
2). 输出文件ccs_basic.out 的运行和调试实验代码如下:
STACK_ADDR .set 0x0500 ;设置堆栈底端地址
;在变量段分配数据,为未初始化的变量保留空间
.bss a,2
.bss x,2
.bss y,1
;在数据段分配数据,存入初始化数据
.data
table:
.word 10,5 ;初始化a1=10,a2=5
.word 8,6 ;初始化x1=8,x2=6
.mmregs ;开启系统默认的寄存器
.global main ;定义全局符号
;------------------------------------------------------------------------------
.text ;开始编写程序
main:
stm #STACK_ADDR, SP ;设置堆栈
stm #0x00a8, PMST
stm #0x0000, SWWSR
;================================================
stm #a, AR2 ;设置AR1 指向a
stm #table, AR3 ;设置AR3 指向table
rpt #1
mvdd *AR3+, *AR2+ ;循环一次,将0x000A 和0x0005 存放在地址0x2000
stm #x, AR2 ;设置AR2 指向x
rpt #1
mvdd *AR3+, *AR2+ ;将地址0x2005 低16 位的0x0008 和0x0006 存放到
地址为0x2002 的存储器空间
call SUM ;执行sum 模块的功能
;死循环,使PC 在当程序结束时锁定在一个已知的区域
dead_loop:
nop
nop
nop
b dead_loop
;================================================
; y=a1*x1+a2*x2
SUM:
stm #a, AR3 ;设置AR3 指向a
stm #x, AR4 ;设置AR4 指向x
rptz A, #1 ;清零寄存器A,并设置将下条乘加指令循环一次
mac *AR3+, *AR4+, A ;完成a1*x1+a2*x2,最终的结果存放在A 中
stl A, *(y) ;将寄存器A 的底16 位存放在地址0x2004
ret
;------------------------------------------------------------------------------
.sect "vectors" ;定义初始化了的带名称的段
int_RESET:
b main ;当有复位中断时,跳转至main
nop
nop
.space 124*16 ;若没有其他的中断,保留空间
程序流程如下:
a) 运行程序:将可执行文件装载到simulator 中,选择Debug→Run 或按F5 键运行程序,按shift F5 键可中止程序的运行;选择Debug→Step into 或按F8 键可实现程序的单步执行。
b) 设置断点:把光标移到某一行,按F9 键,这一行将会以红色高亮显示,表示在该行加了一个断点.
3). 观察和修改存储器单元的内容
a) 点击CCS 操作界面左侧调试工具栏图标,出现寄存器窗口,在该窗口查看存储器的地址。单步执行过程中寄存器的地址随之程序的执行而不断相应的改变。如SP 在main 的第一条指令中设置地址为0x0500,但是在call sum 执行后就变为0x04FF。其中AR1、AR2 的值也不断变化。
b) 选择View→memory 或点击CCS 操作界面左侧调试工具栏图标,在弹出的菜单中输入存储器地址,可观察存储器的内容。
输入地址0x2000,可观察到如下内容:
.
.bss 段从地址0x2000 开始为变量预留了空间,0x2005 开始的数据段中存放了初始化数据,程序完成后,变量被赋值,且最终结果006E 保存在y 中。
c) 修改源汇编程序中数据段内容,可查看存储器单元内容的变化。在数据表格复制到数组a[]后,如果把a[0]的值由10 改为1(修改文件时注意去掉其只读属性,后面类似)。运行后,地址0x2000 中存放的数据变为0x0001,求和的结果即y 中存放的数据变为0x0026。
四、实验心得
1:第一个实验主要是学习安装了ccs调试器和了解了DSK 板的基本硬件配置。2:第二个实验学习Code Composer Studio 的各项菜单栏及工具栏的基本功能,了解基本汇编指令,最后实验完成了对y=a1*x1+a2*x2 功能的的实现。