DSP实验
实验一 集成开发环境 CCS 应用基础
一、目的
- 通过创建一个简单的应用工程,初步熟悉 CCS 的使用,了解程序开发调试过程。
- 掌握汇编语言源程序的基本框架和编写方法,了解 CCS 的工程结构以及编译连接的基本过程。
- 了解 ST0、ST1、PMST 的标志位对计算结果的影响以及计算过程对标志位的影响。
二、内容
- 在 TMS320C5402 软件仿真模型上,建立 example1.cmd 命令文件,配置 COFF 段结构,分配存储空间。
- 运行一段程序,分别将与 CPU 运算相关的控制位 SXM、OVM、C16、FRCT 置 1 或清 0,分析程序的执行结果。观察与 CPU 运算相关的标志位 TC、C 的变化情况。
三、要求
- 本实验要求在 PC 机的集成开发环境 Code Composer Studio(简称 CCS)及 TMS320C5402 软件仿真模型上进行。
- 实验程序:example1.asm, vectors.asm,example1.cmd
- 实验前要作好充分准备,包括读懂实验程序,分析程序中的原始数据、中间结果和最终结果,了解调试步骤及调试方法等。写出实验预习报告。
- 通过实验验证自己的分析正确否,总结实验中遇到的问题,根据实验报告的要求,认真撰写实验报告。
实验任务:
四、实验步骤
建议在逻辑盘 D:\ 下,建立以自己学号命名的子目录,(如:D:\DXK03 \ 学号)以后自己的实验程序都在此目录下运行。并将文件 example1.asm, vectors.asm,example1.cmd 拷贝该文件夹内。(说明:实验室的机器 C 盘都已保护,ti 目录在 C 盘, 所以学生的目录及文件不能建在 c:\ti\myprojects 下)。
运行 CCS setup,选择 C5402 Device Simulator, 进入 CCS,Project –> New 建立一个新的项目 example1,Project –> Add Files to Project,将 example1.asm, vectors.asm,example1.cmd 加入该项目。
- 在 Project–>Option 中加入适当的编译和连接的选项。
Build 整个项目,产生可执行文件 example1.out。
File->Load Program,装载可执行文件 example1.out,并运行和调试。
五、实验结果和提示
- 建立项目,并加入文件
运行 C5402 Device simulator,选择 Project→New 菜单项,建立一个新的项目 example1.pjt,并选择 Project→add files to new project 菜单项,加入文件 example1.asm, vectors.asm,example1.cmd
- 编译和连接
- 编译:选择 Project–>Build Option,在 Compile 表单的 Category 列表中,选择 basic 选项,并设置 generate debug info 为 full symbolic debug 选项。
- 连接:选择 Project–>Build Option,在 linker 表单中的 autoinit mode 选项中选择 no autointialization 模式,在 Output Filename 中输入 \ debug\ example1.out,在 Code Entry Point 中输入 main,Map Filename 中输入 example1.map,然后保存选项设置。
- 选择 Project→Build 构建整个项目,产生可执行文件 example1.out。
- 选择 File->Load Program,装载可执行文件 example1.out。
- 观察存储器映象 Map 文件,选择 File→Open 打开 example1.Map 文件,可观察下列各项内容。将下列信息与 cmd 文件中的设置进行比较,理解 cmd 文件和连接器的关系。
- 存储器的配置情况:页面 0(PAGE 0) 为程序空间,页面 1(PAGE 1) 为数据空间。给出了各存储空间的名称。
- 共配置了 5 个段:
程序文本段. text :位于 0 页,起始地址 0xe000,存储区长度 0x0017
段. data :位于 0 页,起始地址 0xe0000,存储区长度 0x007e
向量段. vectors :位于 0 页,起始地址 0x0080,存储区长度 0x007e
未初始化数据段. bss :位于 1 页,起始地址 0x0000,存储区长度 0x0000
堆栈段 STACK :位于 1 页,起始地址 0x0080,存储区长度 0x0010 - 全局符号:共 18 个符号,给出了它们在存储器中的位置,如符号. bss 在存储器中的位置为 0x00600。
- 输出文件 example1.out 的运行和调试
- 运行程序:将可执行文件装载到 simulator 中,选择 Debug→Run 或按 F5 键运行程序,按 shift F5 键可中止程序的运行;选择 Debug→Step into 或按 F8 键可实现程序的单步执行。
- 设置断点:把光标移到某一行,按 F9 键,这一行将会以红色高亮显示,表示在该行加了一个断点。
- 观察和修改存储器单元的内容,点击 CCS 操作界面左侧调试工具栏 图标,出现寄存器窗口,在该窗口查看存储器的地址,选择 View→memory 或点击 CCS 操作界面左侧调试工具栏 图标,在弹出的菜单中输入存储器地址,可观察存储器的内容。如存储器地址为 0x2000 中内容为 0x000A。修改源汇编程序中数据段内容,可查看存储器单元内容的变化。如把 a1 的值由 10 改为 1,求出和的结果将变为 0x001A。
- 运行程序:将可执行文件装载到 simulator 中,选择 Debug→Run 或按 F5 键运行程序,按 shift F5 键可中止程序的运行;选择 Debug→Step into 或按 F8 键可实现程序的单步执行。
- 与运算相关的标志位
- SXM
当 SXM 置 1 时,数据读写按照符号扩展的方式,因此 A=0xff ffff ff80
当 SXM 置 0 时,数据读写为无符号扩展的方式,因此 A=0x00 0000 ff80 - OVM
当 OVM 置 1 时,数据运算的结果将按照 32 位饱和,因此 A=0xff 8000 0000
当 OVM 置 0 时,数据运算不饱和,因此 B=0x00 fffe 0000 - C16
双 16 位计算比较 - FRCT
乘法移位比较 - TC
比特测试比较 - C
进位、借位和大小比较 - OVA, OVB
溢出标志
- SXM
六、 程序说明
程序的结构和功能,对每条指令进行注释,写出执行结果
主程序
.title "example1.asm"
.mmregs ;enable memory mapped registers
stack .usect "STACK" ,10h ;set stack section
.def _c_int00 ;define symbol _c_int00
.text ;.text section
_c_int00:
stm #stack +10h, SP ;set stack
;stm #0x01ff , PMST ;relocate Interrupt Vector Table
stm #0x0000 , SWWSR ;no software wait for all memory
;================================================
stm #0x2000 ,AR2 ;#0x2000 ->AR2
st #0xff80 ,*AR2 ;#0xff80 ->(AR2)
;================================================
;test SXM
;watch A to unde rstand sign extension
ssbx SXM ;SXM 置1, 数据读写按照符号扩展的方式, ST1=0 x2900
nop ; 防止流水线冲突, 下同
ld *AR2 , A ;((AR2))->A, A=0 xffffffff80
;------------------------
rsbx SXM ;SXM 置0, 数据读写为无符号扩展的方式, ST1=0 x2800
nop
ld *AR2 , A ;((AR2))->A, A=0 x000000ff80
;================================================
;test OVM
;watch A and B to unde rstand saturation
ssbx SXM ;1->SXM , ST1=0