xProject CreationProjectvol unelLocation:a:Iti5000myprojectslvolumel+Project口Executable(out)Target口TMS320C54XX《上一步的取消完成帮助(图2-3-2)新建工程窗口3.向工程添加各类型文件可以使用两种方式向工程添加源文件、CMD文件和库文件。(1)添加源文件在主菜单中单击“Project”,选择“AddFilestoProject”命令,在弹出的添加文件对话框中找到目录“volumel”,选择文件“volume.c”,单击“打开”按钮,如下面左图所示。另一个方法是在工程名“volume.pjt”上单击鼠标右键,选择“AddFiles”命令。在弹出的添加文件的对话框中,找到目录“volume1”,再在添加文件对话框中单击“文件类型”,选择“AsmSourceFiles(*.a*;*.s*)”,这样在添加文件对话框里就只显示指定类型的文件。同时选择“load.asm”和“vectors.asm”,单击“打开”按钮(通过这种方法也可添加C代码文件“volume.c”),如右下图所示。ProjectDebugProfilerGELOptio白ProjectsNew...白-volume.nit (Debun)Open..Add Files to Project...可Add Files to Project...Open for EditingSaveExport to Makefile...CloseSet as Active ProjectUNCUse External Makefile...Save(图2-3-3)添加文件方式(2)接着添加必需的内存定位文件“*.cmd”,使用上述任一方式,向工程里添加“volume.cmd”,注意在添加文件对话框的“文件类型”下拉列表中要选择“LinkCommandFile(*.cmd)”,该文件定义了各代码段和数据段在存储器中的位置。(3)因为本实验工程是基于C语言编写的,因此还需要添加运行时支持库(Run一Time一SupportLibrary如果基于汇编的就不需要)。使用上述任何一种方式,向工程添加“rts.lib”文件,该文件存放在CCS的安装目录“\c540O\cgtools\lib”下。注意在添加文件对话框的“文件类型”下拉列表中要选择“ObjectLibraryFiles(*.o**1*)”。(4)添加头文件。在工程名“volume.pjt”上单击鼠标右键,选择“ScanAllDependencies”,这样volume.c文件所包含的头文件“volume.h”将出现在工程浏览窗中的“Iclude”文件夹中。头文件实际不用人工添加,在Build工程时,CCS本身就会自动完成扫- 22
- 22 - (图 2-3-2) 新建工程窗口 3.向工程添加各类型文件 可以使用两种方式向工程添加源文件、CMD 文件和库文件。 (1) 添加源文件 在主菜单中单击“Project”,选择“Add Files to Project”命令,在弹出的添加文件对话框 中找到目录“volume1”,选择文件“volume.c”,单击“打开”按钮,如下面左图所示。 另一个方法是在工程名“volume.pjt”上单击鼠标右键,选择“Add Files”命令。在弹出 的添加文件的对话框中,找到目录“volume1”,再在添加文件对话框中单击“文件类型”,选 择“Asm Source Files(*.a*;*.s*)”,这样在添加文件对话框里就只显示指定类型的文件。同 时选择“load.asm”和“vectors.asm”,单击“打开”按钮(通过这种方法也可添加 C 代码文件 “volume.c”),如右下图所示。 (图 2-3-3) 添加文件方式 (2) 接着添加必需的内存定位文件“*.cmd”,使用上述任一方式,向工程里添加 “volume.cmd”,注意在添加文件对话框的“文件类型”下拉列表中要选择“Link Command File(*.cmd)”,该文件定义了各代码段和数据段在存储器中的位置。 (3) 因为本实验工程是基于 C 语言编写的,因此还需要添加运行时支持库(Run-Time -Support Library 如果基于汇编的就不需要)。使用上述任何一种方式,向工程添加“rts.lib” 文件,该文件存放在 CCS 的安装目录“\c5400\cgtools\lib”下。注意在添加文件对话框的“文 件类型”下拉列表中要选择“Object Library Files(*.o*,*.l*)”。 (4) 添加头文件。在工程名“volume.pjt”上单击鼠标右键,选择“ Scan All Dependencies”,这样 volume.c 文件所包含的头文件“volume.h”将出现在工程浏览窗中的 “Iclude”文件夹中。头文件实际不用人工添加,在 Build 工程时,CCS 本身就会自动完成扫
描。4.查阅代码在继续完成实验之前,先阅读一下源代码。明白各文件内容:在工程浏览窗里的“volume.c”文件名上双击鼠标,即可在CCS的编辑窗口看到源代码,注意该文件的以下三个部分:(1)在主函数输出消息"volumeexamplestarted"后,主函数进入一个无限循环,在循环内部调用了两个函数datalOo与processing()。(2)函数processingO)对输入缓冲区的每个采样值乘以一个增益值“gain”,并将结果存放到输出缓冲区中。该函数同时调用汇编程序loadO),该函数会根据processing()传递过来的参数processingLoad来消耗指令周期,模拟复杂信号处理算法在时间上的消耗。(3)函数datalO0在本实验中不作任何实际操作而直接返回。5.建造和运行程序建造(Building)在这里指编译、汇编、链接三个独立步骤按顺序联合运行。在主菜单中单击“Project”,选择“RebuildAll”,或者单击工具条图标盐,CCS将重新对工程中所有文件进行编译、汇编、链接,并同步在底部窗口中显示编译连接信息。连接完毕,CCS生成一个“.out”文件,默认存放在目录“volumel”下的“debug”目录中。建造完毕后,再完成装载程序的步骤:在主菜单中单击“File”,选择“LoadProgram”,在弹出对话框中,找到目录“volumel”下的“debug”目录,选择“volume.out”,并打开。CCS装载完毕该文件到目标DSP以后,会自动弹出“Dissassembly”窗口,显示构成源代码的反汇编指令。同时,CCS还会在底部弹出“stdout”栏,用于显示程序在运行时的输出信息。0000:1452FC00RET0000:1453atallRET0000:1453FCOO00:1454_c_int00ADDM0a20h.18hSBF3ffh.*(18hANDMOfffeh,*(18hCPLSSBXRSBXOVMD#Oh.ARPDCMPTRSBXRSBXFRCT1#22a3h,0,ADD#lh.U.A1480h,BEQRSBXSXMNOP#22a3h,0,AREADA 172R)000:E#ih.D,A.AADD000:14734/FKP(11h)READA *AR20000:14757E920000:1476 00F8ADD*(11h),A4(图2-3-4)反汇编窗口现在可以运行我们的程序:在主菜单中单击“Debug”,选择“GoMain”,让程序从主函数开始运行。程序会停在main()处,并会有一个黄色的箭头标记当前要执行的C语言- 23 -
- 23 - 描。 4.查阅代码 在继续完成实验之前,先阅读一下源代码。明白各文件内容:在工程浏览窗里的“volume.c” 文件名上双击鼠标,即可在 CCS 的编辑窗口看到源代码,注意该文件的以下三个部分: (1) 在主函数输出消息"volume example started "后,主函数进入一个无限循环,在循 环内部调用了两个函数 dataIO()与 processing()。 (2) 函数 processing()对输入缓冲区的每个采样值乘以一个增益值“gain”,并将结果 存放到输出缓冲区中。该函数同时调用汇编程序 load(),该函数会根据 processing()传递过来 的参数 processingLoad 来消耗指令周期,模拟复杂信号处理算法在时间上的消耗。 (3) 函数 dataIO()在本实验中不作任何实际操作而直接返回。 5.建造和运行程序 建造(Building)在这里指编译、汇编、链接三个独立步骤按顺序联合运行。在主菜单中 单击“Project”,选择“Rebuild All”,或者单击工具条图标 ,CCS 将重新对工程中所有 文件进行编译、汇编、链接,并同步在底部窗口中显示编译连接信息。连接完毕,CCS 生成 一个“.out”文件,默认存放在目录“volume1”下的“debug”目录中。 建造完毕后,再完成装载程序的步骤:在主菜单中单击“File”,选择“Load Program”, 在弹出对话框中,找到目录“volume1”下的“debug”目录,选择“volume.out”,并打开。 CCS 装载完毕该文件到目标 DSP 以后,会自动弹出“Dissassembly”窗口,显示构成源 代码的反汇编指令。同时,CCS 还会在底部弹出“stdout”栏,用于显示程序在运行时的输出 信息。 (图 2-3-4) 反汇编窗口 现在可以运行我们的程序:在主菜单中单击“Debug”,选择“Go Main”,让程序从主函 数开始运行。程序会停在 main()处,并会有一个黄色的箭头 标记当前要执行的 C 语言
代码。如果希望同时看到C语言代码和对应编译生成的汇编代码,在主菜单中单击“View”选择“MixedSource/ASM”,此时会有一个绿色箭头+标记当前要执行的汇编代码,如图所示:/3F+void main()0000:1412EEFBFRAME-50000:1413F495NOPint *input-&inp_buffer[0]:0000:1414 7602#80h.2hint *output= &out_buffer[o]:0000:14167603#0e4h.3hSTSputs("volume example started\n");0000:1418F274CALLD_puts5LD0000:141AF020#470h.0.A/wloopforever*while(TRUE)Read input data using a probe-point connected to a host fileWrite autput data to a graph connected through a probe-point.data10():0000:141C F074CALL dataIO(图2-3-5)C代码与对应的反汇编代码在主菜单中单击“Debug”,选择“Run",或单击工具条图标公让程序全速运行。如果能在底部的stdout标准输出窗口看到程序运行的输出信息“volumeexamplestarted”,证明程序能够正常运行。在主菜单中单击“Debug",选择“Run",或单击工具条图标,让程序停止运行。常用的按钮如下:77单步执行;0不进入子程序中;伊→从子程序中执行出;0?执行到子程序开始处:公L运行程序;京→停止运行;会→全速运行程序。6.多种观察窗口帮助调试。查看寄存器:在CCS中选择View菜单中的CPURegisters命令。查看数据:选择View菜单中的Memory...命令,弹出设置窗口,按实际需要指定其中的- 24 -
- 24 - 代码。如果希望同时看到 C 语言代码和对应编译生成的汇编代码,在主菜单中单击“View”, 选择“Mixed Source/ASM”,此时会有一个绿色箭头 标记当前要执行的汇编代码,如图所 示: (图 2-3-5) C 代码与对应的反汇编代码 在主菜单中单击“Debug”,选择“Run”,或单击工具条图标 ,让程序全速运行。如果 能在底部的 stdout 标准输出窗口看到程序运行的输出信息“volume example started”,证明程 序能够正常运行。在主菜单中单击“Debug”,选择“Run”,或单击工具条图标 ,让程序 停止运行。 常用的按钮如下: → 单步执行; → 不进入子程序中; → 从子程序中执行出; → 执行到子程序开始处; → 运行程序; → 停止运行; → 全速运行程序。 6.多种观察窗口帮助调试。 查看寄存器:在 CCS 中选择 View 菜单中的 CPU Registers 命令。 查看数据:选择 View 菜单中的 Memory.命令,弹出设置窗口,按实际需要指定其中的
参数,如起始地址等,就可以观察到数据单元中的值,该值可以以多种格式表示。查看程序中变量的当前值:可以在程序中用光标选中变量名,在鼠标右键菜单中选择AddtoWatchWindow命令就可以把该变量添加到Watch窗口。随着程序的运行,可以在Watch窗口看到该变量的值的变化。显示图形:如果要观察的变量太多,例如要观察一个数组的值,那么可以用一种更直观的方法,就是把数据用图形的方式表现出来。选择View菜单中的Graph命令,会有不同类型的图形可供选择。常用的是时域/频域波形,即Time/Frequency项。在弹出的GraphProperty对话框中,可以设定图形的标题、数据的起始地址、采集缓冲区的大小、显示数据的大小、数据类型等属性。CODECOMPOSER编海器(源文配置工具件ehasmcdb配教询DSP/BIOSAPIcfa.cmd代码产生cfg.s54工月cfg.h54.Code ComposerI程缩证器汇缤器维接器OLE应第3方用使用RTDXDSP/BIRTDX..插件OS拓件的插件可教行代码CodeComposer调过工R主机仿真支持JTAG链目标系统硬件DSP应用程序.DSP基本开发流程示意图-25 -
- 25 - 参数,如起始地址等,就可以观察到数据单元中的值,该值可以以多种格式表示。 查看程序中变量的当前值:可以在程序中用光标选中变量名,在鼠标右键菜单中选择 Add to Watch Window 命令就可以把该变量添加到 Watch 窗口。随着程序的运行,可以在 Watch 窗口看到该变量的值的变化。 显示图形:如果要观察的变量太多,例如要观察一个数组的值,那么可以用一种更直观 的方法,就是把数据用图形的方式表现出来。选择 View 菜单中的 Graph 命令,会有不同类 型的图形可供选择。常用的是时域/频域波形,即 Time/Frequency.项。在弹出的 Graph Property 对话框中,可以设定图形的标题、数据的起始地址、采集缓冲区的大小、显示数据的大小、 数据类型等属性。 DSP 基本开发流程示意图
第三章基本指令实验83.1[实验3.1]循环操作一、实验目的1.掌握循环操作指令的运用;2.掌握用汇编语言编写DSP程序的方法。二、实验设备1.一台装有cCs软件的计算机;2.DSP实验箱的TMS320C5410主控板;3.DSP硬件仿真器。三、实验原理TMS320C54x具有丰富的程序控制与转移指令,利用这些指令可以执行分支转移、循环控制以及子程序操作。本实验要求编写一程序完成y=之x的计算。这个求和运算可以通过一个循环操作指令BANZ来完成。BANZ的功能是当辅助寄存器的值不为O时转移到指定标号执行。例如:STM#4,AR2loop:ADD*AR3+,ABANZ loop,*AR2-;当AR2不为零时转移到loop行执行。假设AR3中存有xI到xs五个变量的地址,则上述简单的代码就完成了这五个数的求和。四、实验步骤1、学习有关指令的使用方法:2.在CCS环境中打开本实验的工程(Ex3_1.pjt),阅读源程序;2/C5410DCmulator/leEdityiewProiectDelCtri+o3Ooadsvn3.编译并重建.out输出文件(RebuildAll..),然后通过仿真器把执行代码(.out的文件)下载到DSP芯片中;-26-
- 26 - 第三章 基本指令实验 §3.1 [实验 3.1] 循环操作 一、实验目的 1. 掌握循环操作指令的运用; 2. 掌握用汇编语言编写 DSP 程序的方法。 二、实验设备 1.一台装有 CCS 软件的计算机; 2. DSP 实验箱的 TMS320C5410 主控板; 3. DSP 硬件仿真器。 三、实验原理 TMS320C54x 具有丰富的程序控制与转移指令,利用这些指令可以执行分支转移、循环 控制以及子程序操作。本实验要求编写一程序完成 = = 5 i 1 i y x 的计算。这个求和运算可以通过 一个循环操作指令 BANZ 来完成。BANZ 的功能是当辅助寄存器的值不为 0 时转移到指定标 号执行。 例如: STM #4, AR2 loop: ADD *AR3+, A BANZ loop, *AR2– ;当 AR2 不为零时转移到 loop 行执行。 假设 AR3 中存有 x1 到 x5 五个变量的地址,则上述简单的代码就完成了这五个数的求和。 四、实验步骤 1. 学习有关指令的使用方法; 2. 在 CCS 环境中打开本实验的工程(Ex3_1.pjt),阅读源程序; 3. 编译并重建 .out 输出文件(Rebuild All. ),然后通过仿真器把执行代码(.out 的 文件)下载到 DSP 芯片中;