实验1.docx

上传人:b****6 文档编号:8538502 上传时间:2023-01-31 格式:DOCX 页数:19 大小:251.31KB
下载 相关 举报
实验1.docx_第1页
第1页 / 共19页
实验1.docx_第2页
第2页 / 共19页
实验1.docx_第3页
第3页 / 共19页
实验1.docx_第4页
第4页 / 共19页
实验1.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

实验1.docx

《实验1.docx》由会员分享,可在线阅读,更多相关《实验1.docx(19页珍藏版)》请在冰豆网上搜索。

实验1.docx

实验1

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

1、实验目的:

1.通过创建一个简单的应用工程,初步熟悉CodeComposerStudio(简称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 的变化情况。

3、实验步骤:

1.准备工作

在D盘下,建立以自己学号命名的子目录,(如:

D:

\DSP\2013073006)以后自己的所有实验程序都在此子目录下运行。

将实验一的文件夹拷贝至自己的子目录内。

在 PC 机的 CCS 软件仿真环境(Simulator)下,选择 TMS320C5416 软件仿真模式,并在此模式下进行实验。

2.预习实验程序

实验一提供了三个有关程序:

汇编主程序 test1.asm、中断矢量处理程序 vectors.asm 及命令文件 test1.cmd(参见实验一参考程序)。

(1)读懂主程序 test1.asm,分析程序中各操作所提供的原始数据、中间过程和最终结果。

在实验前先填写主程序注释中的括号部分,然后通过实验验证自己的分析正确否。

(2)通过预习程序(特别是预习 test1.cmd),了解该工程中 COFF 格式段的划分及存储器的分配情况。

(3)在程序 vectors.asm 中有从复位中断(RESET)到主程序入口 c_int00 的一些汇编指令。

通过阅读它们,了解在 CCS 软件仿真环境(Simulator)下,怎样编写中断矢量入口的处理程序。

3.运行CCSsetup,选择“C5416DeviceSimulator”,如图1-1所示。

单击“Import”按钮,即可将其添加到系统配置(System Configuration)中,单击“Save and Quit”按钮,就可以启动CCS在C5416软件仿真环境下工作。

 

 图1 CCS安装界面

4.创建一个新的工程项目

启动CCS。

从CCS的主菜单“Project”下选择子菜单“New”,将出现“Project Creation”对话框,如图1-2所示。

在对话框的“Project Name”处输入“test1”,在“Location”处用浏览方式选入在第1步中建立的文件夹,在“Project Type”处选择“Executable(.out)”类型,在“Target”中选择 CCS 所配置的目标DSP类型,最后单击“Finish”完成。

5.向工程添加各类型文件

(1)在主菜单中单击“Project”,选择“Add Files to Project”命令,然后在弹出的添加文件对话框中找到文件 vectors.asm及test1.asm,单击“Open”。

 也可在工程图标处单击鼠标右键,然后在快捷菜单中选择“Add Files to Project”,或将文件拖入工程视图窗口的文件夹中)。

(2)在主菜单中单击“Project”,选择“Add Files to Project”命令,使用上述同样的方法选择链接命令文件“test1.cmd”,单击Open。

 

 

图2新建工程窗口

(注:

在一个工程项目中,通常包括源程序、库文件、链接命令文件和头文件等。

本工程项目中没有库文件和头文件,因此不需添加它们)。

实验所需的3个文件到此添加完毕。

在工程浏览窗中,单击工程名左边的“+”标记展开工程文件列表,如图3所示。

在工程浏览窗里的某个文件名上双击鼠标,即可在CCS的编辑窗中看到该文件的源代码。

 

图3展开工程文件列表图4 装载程序

6.建造和装载程序

在主菜单中单击“Project”,选择“Rebuild All”命令或者单击工具条图标,即可自动完成编译、汇编和连接这三个步骤,并在底部窗口中同步的显示汇编连接信息。

连接完毕,将生成一个“test1.out”文件,默认存放在目录“test1”下的“debug”目录内。

在修改文件后,选择“ReBuild All”命令,或者单击工具条图标,CCS将重新对工程中的所有文件进行编译、汇编和连接。

建造完毕后,在主菜单中单击“File”,选择“Load Program”如图4所示。

在对话框中选择文件test1.out,单击“Open”打开。

这样,CCS就将可执行代码载入到目标DSP中。

选择主菜单“View”下的“Mixed Source/ASM”,将同时看到汇编源代码和相应的机器代

码,如图5所示。

如果要查找某条汇编指令的功能,只需将光标放在该汇编指令的前面,并

按F1键,CCS就会搜索并显示该条指令的帮助信息,这在调试中是很有用的。

 

图5观察指令代码

7.运行和调试

选择主菜单“Debug”下的“Run”或单击工具按钮,可使程序全速运行。

通过“Debug”

下的“Halt”或单击工具按钮可停止程序的运行。

设置断点的方法是:

把光标移到某一行,按F9键或单击工具按钮,在这一行前面会出现一个红点,表示在该行加了一个断点。

8.寄存器的察看和修改

选择主菜单“View”下的“Registers——>CPU Registers”或点击CCS操作界面左侧的调试工具栏图标,就会在CCS工作区底部打开一个CPU寄存器窗口,其中列出了所有CPU寄存器的值,并列出了ST0、ST1和PMST中有特殊意义的位和位域,如图6所示。

要修改某个寄存器值,只要双击该寄存器名称,既可出现“Edit Register”对话框,只要在“Value”文本框中输入新的值,单击“Done”按纽,即修改成功。

 

图6 CPU寄存器窗口

选择主菜单“View”下的“Memory”或点击CCS操作界面左侧的调试工具栏图标,就会弹出一个“MemoryWindowOptions”对话框,如图7所示。

选择Data或Program,输入存储器的地址,即可观察以该存储器地址开始的内容,如图1-8所示。

要修改某个存储器地址中的内容,可以双击该地址,在出现的对话框中修改即可。

 

图 1-7 存储器窗口

图 1-8 存储器显示及修改对话框

 

图7存储器显示

9.观察存储器映象Map文件

选择主菜单“File”下的“Open”,打开test1.Map文件,观察存储器的配置、段的定位及全局符号等各项内容,将它们与test1.cmd文件中的设置进行比较,进一步理解cmd文件的作用。

四、实验结果:

1、实验源程序清单及运行结果。

(1)主程序 test1.asm

;************************************************************************;

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

;************************************************************************

.title"example1.asm"

.mmregs;使能存储器映像寄存器

stack.usect"STACK",10h

.def_c_int00

;------------------------------------------------------------------------------

.text

_c_int00:

stm# stack+10h, SP;设置堆栈指针

stm#0x0000, SWWSR;所有存储器未加软件延迟

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

stm#0x70,AR2

st#0xff80,*AR2

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

;观察控制位 SXM 的作用

;当 SXM =0 时,进行无符号数的加载

rsbxSXM

nop

ld*AR2, A;(A)=(00 0000 FF80)

;------------------------

;当 SXM =1 时,进行有符号数的加载

ssbxSXM

nop

ld*AR2, A;(A)=(FF FFFF FF80)

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

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

;观察控制位 OVM 的作用

;当 OVM=0 时,对溢出不进行处理

rsbxOVM

ld#0x7fff, 16, B

add#0x7fff, 16, B;(B)=(00 FFFE 0000)

;------------------------

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

ssbxOVM

ld#0x7fff, 16, B

add#0x7fff, 16, B;(B)=(00 7FFFF FFFF)

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

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

;观察控制位 C16 的作用

;当 C16=0 时,进行 32 位双精度数加法运算

ssbxOVM

ld#0x0001, 16, A

add#0x7fff, A

dstA, *AR2

ld#0x0001, 16, A

or#0xffff, A

rsbxC16

nop

dadd*AR2, A, B;(B)=(00 0003 7FFE)

;------------------------

;当 C16=1 时,进行两个独立的 16 位数加法运算

ssbxC16

nop

dadd*AR2, A, B;(B)=((00 0002 7FFE)

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

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

;观察控制位 FRCT 的作用

;当 FRCT=0 时,对乘积不进行移位

ld#0x1234, 16, A

rsbxFRCT

nop

mpya*AR2;(B)=(00 0000 1234)

;------------------------

;当 FRCT=1 时,对乘积左移 1 位

ssbxFRCT

nop

mpya*AR2;(B)=(00 0000 2468)

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

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

;观察测试位 TC

bitf*AR2, #0x8000;(TC)=(0)

nop

nop

;------------------------

bitf*AR2, #0x0001;(TC)=

(1)

nop

nop

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

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

;观察标志位 C

ssbxSXM

ld#0x7fff, A

ld#0x8000, B

maxA;(C)=(0)

nop

nop

;------------------------

minB;(C)=

(1)

nop

nop

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

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

;观察标志位 OVA, OVB

ssbxSXM

rsbxOVA

ld#0x7fff, 16, A

add#0xffff, A;(OVA)=(0)

nop

nop

;------------------------

add#0x7fff, 16, A;(OVA)=

(1)

nop

nop

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

dead_loop:

nop

nop

nop

nop

bdead_loop

.end

;------------------------------------------------------------------------------

(2)命令文件 test1.cmd

vectors.obj

test1.obj

-otest1.out

-m test1.map

MEMORY

{

PAGE 0:

EPROM:

 org=0xE000, len=0x100

VECS:

org=0xFF80, len=0x80

PAGE 1:

SPRAM:

 org=0x0060, len=0x0020

DARAM:

org=0x0080, len=0x100

}

SECTIONS

{.text :

>EPROM PAGE 0

.data:

>EPROM PAGE 0

.bss :

>SPRAM PAGE 1

STACK :

>DARAM PAGE 1

vectors:

>VECSPAGE 0

}

(3)中断矢量处理程序 vectors.asm

.ref _c_int00

.sect "vectors"

int_RESET:

b_c_int00;复位时跳转至_c_int00

nop

nop

.space124*16;没有其它中断应用,为它们留出空间

(4)运行结果(如图8所示)

图8实验结果

2、程序分析

(1)说明3个文件的作用,说明各个文件中伪指令的作用。

1)text1.asm文件为实验主程序。

 

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

 

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

 

2)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存储空间。

3)ext1.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 

.space 124*16在当前段中保留指定的位,共124位*16bit 

.end终止汇编,放置在源程序最后一行   

Test1.cmd中使用了以下伪指令:

 

.text  设置已初始化段.text 

.data  设置已初始化段.data 

.bss   设置未初始化段.bss

 

(2)分析主程序的结构和功能,对每条指令进行注释,写出执行结果。

;************************************************************************;

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

;************************************************************************

.title"example1.asm";允许汇编器在每页顶部打印标题

.mmregs;使能存储器映像寄存器

stack.usect"STACK",10h;为未初始化变量保留存储空间的自定义段STACK

.def_c_int00

;------------------------------------------------------------------------------

.text;设置已初始化段.text 

_c_int00:

stm# stack+10h, SP;设置堆栈指针

stm#0x0000, SWWSR;所有存储器未加软件延迟

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

stm#0x70,AR2;0x70→AR2

st#0xff80,*AR2;0xff80→0x70h 

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

;观察控制位 SXM 的作用

;当 SXM =0 时,进行无符号数的加载

rsbxSXM ;SXM=0时,((AR2))→A 

nop

ld*AR2, A;(A)=(00 0000 FF80)

;------------------------

;当 SXM =1 时,进行有符号数的加载

ssbxSXM;SXM=1时,((AR2))→A

nop

ld*AR2, A;(A)=(FF FFFF FF80)

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

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

;观察控制位 OVM 的作用

;当 OVM=0 时,对溢出不进行处理

rsbxOVM ;OVM=0时,不处理溢出

ld#0x7fff, 16, B;0x7fff左移16位后送B

add#0x7fff, 16, B;(B)=(00 FFFE 0000)

;------------------------

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

ssbxOVM ;0VM=1时,处理溢出

ld#0x7fff, 16, B;0x7fff左移16位后送B

add#0x7fff, 16, B;(B)=(00 7FFFF FFFF)

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

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

;观察控制位 C16 的作用

;当 C16=0 时,进行 32 位双精度数加法运算

ssbxOVM;当OVM=1时,处理溢出

ld#0x0001, 16, A ;(A)=00 0001 0000

add#0x7fff, A;(A)=00 0001 7FFF

dstA, *AR2 ;暂存00 0001 7FFF

ld#0x0001, 16, A ;(A)=00 0001 0000

or#0xffff, A ;(A)=00 0001 FFFF

rsbxC16

Nop ;等待流水线

dadd*AR2, A, B;(B)=(00 0003 7FFE)

;------------------------

;当 C16=1 时,进行两个独立的 16 位数加法运算

ssbxC16;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 

rsbxFRCT

nop

mpya*AR2;(B)=(00 0000 1234)

;------------------------

;当 FRCT=1 时,对乘积左移 1 位

ssbxFRCT

nop

mpya*AR2;(B)=(00 0000 2468)

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

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

;观察测试位 TC

bitf*AR2, #0x8000;(TC)=(0)

nop

nop

;------------------------

bitf*AR2, #0x0001;(TC)=

(1)

nop

nop

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

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

;观察标志位 C

ssbxSXM;当SXM=1时,进行有符号数的加载

ld#0x7fff, A;A=00 0000 7FFF

ld#0x8000, B;B=FF FFFF 8000 

maxA;(C)=(0)

nop

nop

;------------------------

minB;(C)=

(1)

nop

nop

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

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1