1、121314151617181920福建农林大学计算机与信息学院信息工程类实验报告 电子信息工程 专业: 电子信息工程 年级: 10级 姓名: 学号: 实验课程: DSP单片机原理及应用 实验室号:_田C513 实验设备号: 25 实验时间:2013.10.18 指导教师签字: 成绩:一、 实验目的和要求1. 熟悉DSP软件开发环境CCS的使用。2. 熟悉CCS中的C语言编程。3. 了解C6000DSP的汇编语言。二、 主要仪器设备(实验用的软硬件环境)安装了CCS2.0的计算机,采用simulator配置文件sim6201_simulator.cfg三、 实验内容1新建一个project,把
2、tutorialsim62xxhello1的文件添加进去,完成其功能。练习CCS的基本操作:加载程序、go main、执行程序、设置断点、单步执行、观察变量、观察存储器、测试函数执行的CLK、混合代码显示。2打开tutorialsim62xxvolume1的项目文件,完成图形方式观察变量、设置探点、GEL控制变量、FILE IO、动画显示输入输出的功能。然后单步执行load.asm,观察C代码调用、寄存器的变化、测试函数执行时间、如何循环和返回C代码。3解释如何在C6201上实现32bit int乘32bit int, 结果是32 bit int的过程:在刚才的hello1中设置3个全局变量i
3、nt a = 0x10008; int b = 56; int c;在main函数中执行语句 c = a * b; build后加载执行程序, 混合代码显示 c = a*b对应的汇编代码,解释之。四、 操作方法与实验步骤1)配置CCS打开桌面程序“Setup CCS 2 (C6000)”,采用simulator配置文件sim6201_simulator.cfg,配置完成后保存。2)实验内容1操作步骤:(1)打开CCS:打双击桌面程序:Setup CCS 2 (C6000),配置CCS,选C6xxx;配置好后,打开桌面程序:CCS 2 (C6000);(2)打开工程文件:把文件夹tutorial
4、sim62xxhello1拷贝到myproject下;单击菜单Project-Open,打开hello.pjt,选择支持库rts6200.lib(3)编译程序:菜单Project-build或rebuild(4)加载程序:菜单File-Load Program,选择Debug下的.out文件装入目标板(5)go main:菜单Debug-go main,执行到main()处暂停(6)执行程序:Debug-Run(7)设置断点:Toggle breakpoint(8)单步执行:Step(两种:C和汇编)(9)观察变量:菜单Edit-Variable(10)观察存储器:Memory (11)测试函
5、数执行的CLK:Profiler-View Clock(12)混合代码显示:View-Mixed Source/ASM3)自行完成实验内容2的操作。4)自行完成实验内容3的编程及编译、目标程序的加载和执行,观察c = a*b对应的汇编代码,并解释该汇编代码。五、 实验内容及实验数据记录1、配置CCS2、练习CCS的基本操作1)打开工程2)编译工程,加载程序2)编译工程,编译通过后加载.out文件3)单步运行,调试程序4)设置断点5)观察变量6)观察存储器7)测试函数clk的执行2、volume1实验结果3、结果六、 质疑、建议、问题讨论对于实验一,由于只是熟悉dsp开发软件,所以比较简单。需要
6、注意的地方就是设置cpu时,一定要选择对cpu,这样后面就不会出错。另外,由于编译器的不同,运行之前一定要先load .out文件,否则运行结果不会显示出来。 学号:_田C 513 实验设备号: 2013.10.25 实验二 C6000流水线和C运行时环境2. 熟悉C6000中的C运行时环境。三、 实验内容以及步骤采用simulator配置文件sim6201_simulator.cfg1 Hello1中添加1个C文件sop_c.c ,该文件是一个乘法累加的子函数sop_c (short * a, short * x, int * y, int n),然后在main函数中调用。不选择任何优化选项
7、。用混合代码显示,在汇编层次执行sop_c子函数,观察调用、执行和返回的过程。2用汇编语言实现两个数组a(n)和x(n)的乘法累加功能。汇编文件名为:sop_asm.asm,主函数C中调用格式:int sop_asm(short * a, short * x, int n)。1)打开ccs6000的C运行时的环境。2)打双击桌面程序:3)配置好后,打开桌面程序:4)把文件夹tutorialsim62xxhello1拷贝到myproject下;5)单击菜单Project-6)将汇编代码段加到hello.asm,再在holle.c中加入汇编子函数的C语言程序。进行编译、加载生成.out文件,执行产
8、生结果。四、 实验内容及实验数据记录1)用汇编语言实现两个数组的乘法累加功能: sop_asm.asm中实现函数int sop_asm(short * a, short * x, int n);然后,手工优化汇编代码。*2)写一个汇编语言子函数Mul32to64(unsigned int a, unsigned int b, void * p_64int),实现32bit乘以32bit结果不大于64bit的无符号整型数据的乘法。五、 实验程序或实验数据处理与分析1)汇编子函数: .global _sop_asm1 .text _sop_asm1: ZERO .D1 A0 ;A0存放结果 MV
9、.S2 B6,B0 ;B0=nLOOP: LDH.D1T1 *A4+,A5;A5=a LDH.D2T2 *B4+,B6;A6=x NOP 4 MPY.M1X A5,B6,A2 NOP ADD .D1 A0,A2,A0 SUB.L2 B0,1,B0 B0B.S2 LOOP nop 5 MV.L1 A0,A4 .end2)实验处理: 同样选好与此实验相关的cpu是最为关键的地方。需要注意的是,虽然同样采用的是汇编,但是由于汇编与具体机器相关,所以其编写格式与语法和8086略有不同之处,所以一定要注意。 2013.11.01 实验三 C6000代码优化一实验目的和要求2. 掌握CCS中的C语言编程。
10、3. 熟悉C6000DSP的代码优化过程。二主要仪器设备(实验用的软硬件环境)三,实验内容 1采用simulator配置文件sim6201_simulator.cfg,写手工优化的sop_asm.asm程序:在实验二的基础上实现16bit数组的乘法累加的函数,并手工优化和采用软件流水优化。要求:(1)使用LDW和MPY,MPYH指令;对于C64可以使用扩展乘法指令。(2)画出相关图和模迭代间隔表。2(选做)写一个汇编语言子函数Mul32to64(unsigned int a, unsigned int b, void * p_64int),实现32bit*32bit64bit的无符号整型数据的
11、乘法;3(选做)采用simulator配置文件sim6701_simulator.cfg,写一个线形汇编实现的子函数,做复数数组求模,并找出模的最大值的位置和值。复数的实部和虚部为short,求模的结果为unsigned int。(提示:使用INTSP指令把整数转化为浮点数后再开方。)四操作方法与实验步骤1. 打开ccs运行环境;2. 将C:/ti/tutorial/sim62xx/volume1复制到C:/ti/myprojects中;3. 启动CCS环境,选择Project中Open,打开这个工程,工程项目文件目录为:C:/ti/myprojects/volume1,项目名称为volume
12、.pjt;4. 若提示错误,选择Browse,选择目录:/ti/C6000/cgtools/lib/rts6200.lib 5. 打开工程;6. 打开volume.c以及volume.asm文件,进行编译、加载、执行;7. 将下面的程序段覆盖原来的volume1.c/*主函数:volume1.c*/*/#include #include volume.h/* Global declarations */#define n 10 short an,xn;int t;/* = main = */void main() int i; for(i=0;iOpen,打开这个工程,工程的项目文件目录为:t
13、imyprojectshellobios,项目名称是hello.pjt。(5) 若提示以下错误,选择Browse,选择目录:tiC6000cgtoolslibrts6400.lib,打开工程。(6) 编译,运行工程,查看结果,应该是输出hello world字符。2)评测stdio.h中输出函数put()的执行时间(周期数)a) 新建一个Profiler,选择Profiler-Start New Session,名称为MySession,确定。b) 出现Session窗口,选择Range栏。如下所示,出现hello.out。c) 用鼠标拖曳,高亮put()函数,如下所示:d) 按住鼠标,拖曳到
14、Range窗口里面,出现:e) 重新Load程序,运行,得到运行结果如下:f) 结论:采用put()函数输出一次的指令周期数是:1700。g) 采用同样方法,测试printf()函数的指令周期数目:h) 记录put()函数和printf()函数需要的指令周期数到表格,用来和下面实验的结果对比。3)编辑源代码(1)在CCS里,关闭hello.c窗口。(2)用Windows Explorer把C:titutorialsim64xxhello2目录里的hello.c文件拷贝到C:timyprojectshellobios目录。按Yes覆盖原来已经存在的hello.c文件。hello2例中采用DSP/
15、BIOS函数来替代hello1例中的标准C函数的put()输出函数。(3) 双击hello.c文件,在Project View窗口打开源文件。(4) 注意新代码的几点问题:std.hlog.hhellocfg.hVoid main() LOG_printf(&trace, hello world!); /* fall into DSP/BIOS idle loop */ return; hello.c文件首先包含了std.h和log.h两个头文件。程序如果想使用DSP/BIOS API那它必须包含std.h文件以及程序中用到的模块的对应头文件。log.h头文件中定义了LOG_Obj结构以及LO
16、G模块用的API函数的声明。std.h文件必须在其它的DSP/BIOS模块头文件之前声明。其它模块的头文件声明顺序不重要。 代码接下来要包含hellocfg.h头文件,这个文件在创建并保存DSP/BIOS配置的时候创建的。下一个步骤我们就来创建这个文件。这个文件包含了配置文件夹里面的DSP/BIOS objects的外部声明。hellocfg.h文件也包含了配置文件里定义的DSP/BIOS模块的头文件。既然std.h和log.h文件都会被hellocfg.h文件引用,那么hello.c文件的头两行时间上是冗余的。但是这样也不会有任何问题。 调用LOG_printf的代码实际上是传递LOG ob
17、ject对象(&trace)和 hello world消息的地址。 最后main()函数返回,这个函数导致程序进入DSP/BIOS的Idle循环。在这个循环中,DSP/BIOS等待线程,例如软件中断和硬件中断发生。在该例中,没有其它线程发生,所以会一直处于IDLE状态。4)创建DSP/BIOS的配置文件(1)选择File-New-DSP/BIOS Config。(2)选择一个目标模板,根据芯片选择,我们选c64xx.cdb,然后按OK。观察configuration窗口,左边窗口是模块的列表,可以通过点击模块的“+”号打开下级目录,也可以按右键新建一个对象或查看一个建立好的对象的属性。(3)
18、点击Instrumentation目录左侧的+号,显示模块的列表。(4) 邮局选择LOGEvent Log Mannger然后右击选择Insert LOG。这个步骤是创建一个LOG对象,名称为LOG0。a) 右键选中LOG0对象,然后右击选择Rename。把LOG对象改名为trace.b) 如果你在使用软件仿真器,需要设置RTDX模式为Simulator。选择RTDXReal-Time Data Exchange Settings,右键,选择属性,打开对话框。将RTDX Mode设定为Simulator即可。如果有目标板,可以选择JTAG。c) 选择File-Save。保存到当前目录(通常是C
19、:timyprojectshellobios)命名为hello.cdb,保存这个配置后,会生成以下6个文件:Hello.cdb 保存配置的内容Hellocfg.cmd 链接command文件Hellocfg.h 包括DSP/BIOS模块头文件和配置文件中用到的外部对象、变量的声明Hellocfg.s62 DSP/BIOS设置的汇编语言源文件Hellocfg.h62 Hellocfg.s62引用到的汇编语言源文件Hellocfg_c.c Chip Support Library(CSL)代码结构和设置5)添加DSP/BIOS文件到工程项目(1)选择Project-Add Files to Project,在Files of type栏目里选择Configuration File(*.cdb),选中hello.cdb文件后,点Open。注意添加后,hello.cdb出现在Porject View窗格下目录DSP/BIOS Config里。此外,CCS自动添加Hellocfg.s62和Hellocfg_c.c文件到生成的目录下。
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2