好文档 - 专业文书写作范文服务资料分享网站

实验一 集成开发环境 CCS 应用基础

天下 分享 时间: 加入收藏 我要投稿 点赞

.

实验一 集成开发环境 CCS 应用基础

一、实验目的

1. 通过创建一个简单的应用工程,初步熟悉Code Composer Studio(简称CCS)的集成开发环境(IDE)及其工具的使用。

2. 掌握汇编语言源程序的基本框架和编写方法,了解CCS的工程结构以及编译、汇编、连接、运行和调试的基本过程。

3. 了解ST0、ST1的控制位对计算过程的控制以及计算结果对状态位的影响。 二、实验内容

1. 学习使用CCS集成开发环境(IDE)的各种工具。 包括下列内容:

(1)编辑、汇编和连接。

(2)查看和修改存储器映像寄存器的内容。 (3)查看和修改ST0、ST1 及PMST 的有关位。 (4)查看和修改程序存储器和数据存储器的内容。 (5)断点操作。

(6)运行程序(单步运行、连续运行和断点运行)。 2. 观察并理解COFF段结构的划分及存储空间的分配。

3. 观察控制位SXM、OVM、C16及FRCT置1或清0对执行结果的影响。 4. 观察标志位TC、C、OVA及OVB的变化情况。 三、程序分析

1. 说明3个文件的作用及接口情况,说明各个文件中伪指令的作用。 ①text1.asm文件为实验主程序。

Vectors.asm文件用于处理中断,在本程序中规定了上电复位的跳转地址,并屏蔽其他用不到的中断。

Test1.cmd文件是存储器分配说明文件,主要功能是指定工程中的各段分配到那段存储器中,比如有片内RAM(起始地址,大小)和SDRAM等,为连接器提供段定位信息。

②EPROM程存空间为从E000h开始的100h个存储单元,SPRAM数据空间为从0060h开始的32个存储单元,VECS程存空间为从FF80h开始的128个存储单元,DARAM数据空间为从0080h开始的256个存储单元。设置的.text段和.data段在0页EEPROM存储空间,.bss段在1页SPRAM存储空间,STACK段在1页DARAM存储空间,Vectors段在0页VECS存储空间。

③text1.asm中使用了以下伪指令:

.title “example.asm” 允许汇编器在每页顶部打印标题 .mmregs 将存储映射寄存器送入符号表中

.usect “STACK” 为未初始化变量保留存储空间的自定义段STACK

.def _c_int00 在当前模块中定义符号_c_int00,使其在其他模块中可使用 .text 设置已初始化段.text

.end 终止汇编,放置在源程序最后一行 Vectors.asm中使用了以下伪指令:

.ref _c_int00 在模块test1.asm中定义的符号_c_int00,在当前模块中可用 .sect “vectors” 设置自定义已初始化段vectors

1 / 5'.

.

.space 124*16 在当前段中保留指定的位,共124位*16bit .end 终止汇编,放置在源程序最后一行 Test1.cmd中使用了以下伪指令:

.text 设置已初始化段.text .data 设置已初始化段.data .bss 设置未初始化段.bss

2. 分析主程序的结构和功能,对每条指令进行注释,写出执行结果。 主程序为顺序结构,功能、注释、结果见下:

;************************************************************************; ; 实验一 集成开发环境CCS应用基础 ;************************************************************************ .title \ ;允许汇编器在每页顶部打印标题\ .mmregs ;使能存储器映像寄存器 stack .usect \ .def _c_int00

;------------------------------------------------------------------------------ .text _c_int00: stm # stack+10h, SP ;设置堆栈指针 stm #0x0000, SWWSR ;所有存储器未加软件延迟 ;================================================ stm #0x70,AR2 ;0x70→AR2 st #0xff80,*AR2 ;0xff80→0x70h ;================================================

;观察控制位SXM的作用

;当SXM=0时,进行无符号数的加载 rsbx SXM ;SXM=0时,((AR2))→A nop ld *AR2, A ;(A)=(00 0000 FF80) ;------------------------

;当SXM=1时,进行有符号数的加载 ssbx SXM ;SXM=1时,((AR2))→A nop ld *AR2, A ;(A)=(FF FFFF FF80) ;================================================ ;================================================ ;观察控制位OVM的作用

;当OVM=0时,对溢出不进行处理 rsbx OVM ;OVM=0时,不处理溢出 ld #0x7fff, 16, B ;0x7fff左移16位后送B,(B)=00 7FFF 0000 add #0x7fff, 16, B ;(B)=(00 FFFE 0000)0x7fff左移16位后加到B ;------------------------

;当OVM=1时,对溢出进行处理 ssbx OVM ;0VM=1时,处理溢出

2 / 5'.

.

ld #0x7fff, 16, B ;0x7fff左移16位后送B,(B)=00 7FFF 0000 add #0x7fff, 16, B ;(B)=(00 7FFFF FFFF)0x7fff左移16位后加到B ;================================================ ;================================================ ;观察控制位C16的作用

;当C16=0时,进行32位双精度数加法运算 ssbx OVM ;当OVM=1时,处理溢出 ld #0x0001, 16, A ;(A)=00 0001 0000 add #0x7fff, A ;(A)=00 0001 7FFF dst ld or rsbx

A, *AR2 ;暂存00 0001 7FFF #0x0001, 16, A ;(A)=00 0001 0000 #0xffff, A ;(A)=00 0001 FFFF C16

nop ;等待流水线 dadd *AR2, A, B ;(B)=(00 0003 7FFE) ;------------------------

;当C16=1时,进行两个独立的16位数加法运算 ssbx C16 ;OVM=1,处理溢出 nop dadd *AR2, A, B ;(B)=(00 0002 7FFE) ;================================================ ;================================================

;观察控制位FRCT的作用

;当FRCT=0时,对乘积不进行移位 ld #0x1234, 16, A ;0x1234左移16位后送A,(A)=00 1234 0000 rsbx FRCT nop mpya *AR2 ;(B)=(00 0000 1234)((AR2))=T*0x1234 ;------------------------

;当FRCT=1时,对乘积左移1位 ssbx FRCT nop mpya *AR2 ;(B)=(00 0000 2468) ;================================================ ;================================================

;观察测试位TC bitf *AR2, #0x8000 ;(TC)=(0) ((AR2))与0x8000结合,结果为0 nop nop

;------------------------ bitf *AR2, #0x0001 ;(TC)=(1) ((AR2))与0x0001结合,结果为1 nop nop

;================================================

3 / 5'.

.

;================================================

;观察标志位C ssbx SXM ;当SXM=1时,进行有符号数的加载 ld #0x7fff, A ;A=00 0000 7FFF ld #0x8000, B ;B=FF FFFF 8000 max A ;(C)=(0) A=MAX(A,B)=00 0000 7FFF nop nop

;------------------------ min B ;(C)=(1) B=MIN(A,B)=FF FFFF 8000 nop nop

;================================================ ;================================================

;观察标志位OVA, OVB ssbx SXM ;当SXM=1时,进行有符号数的加载 rsbx OVA ;OVA=0

ld #0x7fff, 16, A ;Ox7FFF左移16位送A,A=00 7FFF 0000 add #0xffff, A ;(OVA)=(0) A=00 7FFE FFFF(计算结果为00 7FFFFFFF) nop nop ;------------------------ add #0x7fff, 16, A ;(OVA)=(1) A=00 7FFF FFFF nop nop ;================================================ dead_loop: ;结束循环 nop nop nop nop b dead_loop .end

;------------------------------------------------------------------------------ 四、写出本工程的分段和存储器的定位情况。 段名 .text .data .bss STACK Vectors 已/未初始化段 已初始化 已初始化 未初始化 已初始化 已初始化 所属PAGE 0 0 1 1 0 起始地址 0xE000 0xE000 0x0060 0x0080 0xFF80 存储区长度 256字 256字 32字 256字 128字 存储区名 EPROM EPROM SPRAM DARAM VECS 五、调试说明

4 / 5'.

.

总结上机调试步骤和调试情况,分析调试中遇到的问题是如何解决的。 1、 调试时无法查看编译机器码:重新编译加载.out文件 2、 ssbx SXM ;当SXM=1时,进行有符号数的加载

rsbx OVA ;OVA=0 ld #0x7fff, 16, A ;Ox7FFF左移16位送A,A=00 7FFF 0000 add #0xffff, A ;(OVA)=(0) A=00 7FFE FFFF 程序段直接结果A为007FFEFFFF,至今未解决

六、回答问题:

(1)如果没有在工程中添加test1.cmd文件,试问汇编连接后能否产生test1.out文件?能否获得正确的执行结果?

答:若为在工程中添加text1.cmd文件,连接器以缺省定位方式定义并输出段,可以产生test1.out文件,但因定义位置错误,不能得出正确结果。

(2)在主程序中存在着许多NOP指令,它们的作用是什么?如果将它们去掉,程序能否正常运行?

答:主程序中的NOP指令是为满足CPU的流水线运行,若去掉,单字单周期指令可正常运行,多字多周期指令会产生流水线冲突,程序不能正常执行。

(3)伪指令.def和.ref的在本工程中的作用是什么?如果将它们去掉将会产生什么后果? 答:伪指令.def在主程序test1.asm中定义符号_c_int00,是指可以在其他模块中声明使用。 伪指令.ref在子程序vectors.asm中声明已定义的符号_c_int00,使其在子程序中可使用。 去掉两条伪指令后,_c_int00符号不可跨模块使用,程序编译时会产生错误。

5 / 5'.

0evlh57j2l1oirv327pb3jk4h7sgsg00pu3
领取福利

微信扫码领取福利

微信扫码分享