dsp实验-CCS操作

dsp实验-CCS操作
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 功能的的实现。

相关文档
最新文档