ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:22.84KB ,
资源ID:9537473      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9537473.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(CCS中DSPBIOS工具的使用DSP实验报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

CCS中DSPBIOS工具的使用DSP实验报告.docx

1、CCS中DSPBIOS工具的使用DSP实验报告CCS中 DSP/BIOS工具的使用一、 实验目的目前 CCS 已经成为 DSP 开发过程中不可缺少的软件工具。通过前面的实验,我们已经基本掌握了 CCS提供的断点、探针、图形显示等调试工具的使用。在本实验中,我们将学习 CCS中的高级管理和调试工具-DSP/BIOS 的使用, 并通过实验掌握该工具的使用方法。二、 实验原理1) CCS包含的功能 a.集成可视化代码编辑界面,可直接编写 C,汇编、.H文件、.cmd 文件等。 b.集成代码生成工具,包括 C 编译器。 c.基本调试工具,如装入执行代码(.OUT 文件) ,寄存器窗口,存储器窗口,反汇

2、编窗口,变量窗口等,支持 C 源代码级调试。 d.支持多 DSP 调试。 e.断点工具,包括硬件断点、数据空间读/写断点,条件断点(使用 GEL编写表达式)等等。 f.探针工具(probe points) ,可用于算法仿真,数据监视等。 g.剖析工具(profile points) ,可用于评估代码执行的时钟数。 h.数据的图形显示工具,可绘制时域/频域波形,眼图,星座图,图象等,并可自动刷新(使用 Animate 命令运行) 。 i.提供 GEL 工具,令用户可以编写自己的控制面板/菜单,从而方便直观地修改变量,配置参数等。 j.支持 RTDX技术,利用该技术可在不中断目标系统运行的情况下,

3、实现 DSP 与其他应用程序(OLE)实现数据交换。 k.开放式的 plug-ins 技术,支持其它第三方的 ActiveX 插件,DSP 目标系统以及仿真器。 l.提供 DSP/BIOS 工具,利用该工具可增强对代码的实时分析能力。如分析代码执行的效率,调度程序执行的优先级,方便管理或使用系统资源(代码/数据占用空间,中断服务程序的调用,定时器使用等等) 。 2) 利用 CCS 开发 DSP 程序流程 a.在“project ”菜单项下选“new ” ,开始创立一个新的工程文件。 b.将编写好的 C、汇编、H头文件、以及编译完成的 OBJ、LIB 文件添加到 project 下。 c.将内存

4、定位的 CMD文件添加到 project 下,并根据目标系统的实际存储器和具体要求做相应的修改。 d.若使用了 DSP/BIOS,还需将配置文件 CDB 添加到 project 下。 e.在“project ”菜单项中选“options ”可以进入编译、连接参数开关选择窗口;或用鼠标右键单击“project ”文件夹下的 pjt 文件名,也可进入。 f.注意:在“Build Options”窗口中“Compiler”选项主要针对 C 编译器, “Assembler”选项针对汇编源程序, “Linker”为连接器 lnk500使用开关。 g.利用“build all ”命令完成编译,连接。 h.

5、将生成的.out文件装入DSP的片内或外部扩展存储器 (装入地址有CMD文件确定)并完成调试。 i.分析,统计或跟踪代码,确保算法的准确性、实时性和高效率。 3) DSP/BIOS 的功能 a.DSP/BIOS 是 CCS提供的一套工具,用于支持提高应用程序实时分析能力。它本身仅占用极少的 CPU资源。 b. DSP/BIOS 工具使用线程来管理程序,如硬件中断服务子程序,软件中断服务子程序,周期函数,idle 函数等。 c.DSP/BIOS 提供多种分析工具, 评估代码。 如图形化显示各个线程占用的 CPU时间,图形化显示 CPU负荷状态等。 d. DSP/BIOS 工具可以调整各个线程的优

6、先级。 4) 建立 DSP/BIOS的配置文件 a. 每个使用 DSP/BIOS 的程序都要建立配置文件。根据该配置文件(.cdb),系统自动生成 LNK 使用的.cmd 文件和一个包含 DSP/BIOS 工具的汇编源程序(.s54) 。你需要将这两个文件添加到你的工程文件中。 b. 配置文件可以定义程序运行是的全局参数,如 PMST,SWWSR,CLKMD等。当程序开始运行后,DSP/BIOS 会在初始化阶段根据你的指定自动设置这些寄存器。 c. 使用可视化的工具编辑配置文件,以便说明程序需要使用的各种 DSP/BIOS 提供的Object,如中断,管道,事件记录。 5) DSP/BIOS

7、提供的 API 模块 a.CLK模块:用于片上的定时器管理,设置定时器中断的间隔时间。 b.HST 模块:用于实现主机与目标系统间数据的输入或输出。 c.HWI模块:用于硬件中断管理,可设置相应的中断服务子程序。 d.IDL 模块:用于管理 idle 函数,该类函数具有最低优先级。 e.LOG模块:用于事件的记录显示。例如,你可以通过该 API 输出调试信息。 f.MEM 模块:用于定义目标系统的内存使用。系统根据此信息自动产生.cmd 文件。 g. PIP 模块:用于管道管理,可以实现线程间的数据交换。 h.PRD 模块:用于实现周期性的函数。该类函数的执行频率可以由 CLK 模块或自己调用

8、 PRD_tick 决定。 i.RTDX模块:用于主机与 DSP 目标系统间的实时数据传递。 j.STS模块:用于状态统计管理,你可以在 CCS下查看这些统计参数。 k. SWI 模块:用于管理软件中断。CCS 将运行队列中的软件中断,并可以设置 15 个优先级,但都比硬件中断低。在本实验中我们将使用 DSP/BIOS 工具提供的 CLK、LOG、PRD、STS、RTDX、SWI等模块。三、实验内容1)启动 CCS,新建工程文件,如文件名为 bios.pjt。选择 Project 菜单中的 Add File to Project 选项,将源程序 volume.c、load.asm依次添加到工程

9、文件中。 2)在 File 菜单下选择“New - DSP/BIOS Configuration”选项,新建一个 DSP/BIOS的配置文件(选择模板时,可以选 c54xx.cdb) 。然后将它添加到工程文件中。当然,你也可以从别处复制一个配置文件 (.cdb 后缀) , 然后在此基础上按下面的步骤修改。假设我们新建的配置文件名为 bios.cdb,配置文件编辑工具同时还会自动生成bioscfg.s54(包含 DSP/BIOS 工具的源汇编代码文件) 、bioscfg.cmd(连接内存定位文件)以及 bioscfg.h54(头文件) 。前面两个你必须手工添加到工程文件中,而后面一个(.h54

10、头文件)系统会自动添加到工程文件中。3) 在工程文件管理窗口中,用鼠标左键双击前面添加的配置文件,如 bios.cdb,启动配置文件编辑工具,完成对配置文件的修改。当你用鼠标选择编辑窗口左面的“Global Settings”时,该项的设置参数将显示在右面。若要修改此项参数,请使用鼠标右键单击该项,然后在弹出菜单中选“Properties” 。其他选项也可用同样的方法修改设置。DSP MIPS(CLKOUT)项指出当前目标板上 DSP 的工作频率,DES320PP-U 上使用的是 100MIPS 的VC5402,故这项不修改。PMST 寄存器这里只能修改它的低 7 位,而高 9 位为中断向量表

11、的基地址,这里无法修改。在下面的实验中,我们需要将 DSP 片内的存储器同时映射到程序和数据空间,即将 PMST 的 BIT5:OVLY=1,所以这里应该将低 7 位改为 0x20。高 9位系统将根据 MEM 项中“VECT”段的位置自动设置。若选择了“Modify CLKMD”项,DSP/BIOS 将在初始化中完成对 DSP 时钟变频的设置。这里我们不需要,因为DES320PP-U 在上电时已经自动完成外部时钟 X10 的设置,DSP 已经运行在 100M频率下了。 (4)在 MEM 配置项中,VECT 段用来存放中断向量表,其地址直接生成 PMST 的高 9位。IPROG 段为片内程序空间

12、,EPROG为片外程序空间,IDATA为片内数据空间, EDATA 为片外数据空间。根据 DES320PP-U 板上的存储器大小,我们先对 IPROG的分配做修改, 将起始地址该为 0x2080, 长度为 0x1f80, 参见图 9-3。 然后再将 VECT段改到 0x2000,系统会同时自动设置 PMST 高 9 位。再修改 IDATA 段,该段使用 VC5402 16K片上存储器的前 8K为数据空间,长度为 0x1f80(从 0x80 0x1fff) 。5)继续修改配置文件,增加一个信息显示窗口。在标准 C 中,我们可以使用 printf 来输出信息,但该函数会消耗大量的内存空间,而且执行

13、速度也较慢。DSP/BIOS 提供了 LOG模块,可以用于记录输出信息。与标准 C 的输出函数相比,使用 LOG模块将占用更少的内存和更快的速度。使用 DSP/BIOS 的 LOG模块,主要有三步: a. 在工程文件窗口下用鼠标左键双击配置文件将其打开,展开 LOG 选项(LOG 模块中先已经有一个 LOG_system,这是 DSP/BIOS 系统保留的,请不要随意删除) ,并用鼠标右键单击,在弹出菜单中选择“Insert LOG ”项。用鼠标右键单击新增加的LOG0,修改新增 LOG0 对象的名称,如 trace。然后使用鼠标右键单击,并在弹出菜单中选择 “Property ” , 修改其

14、参数, 如将 buflen改为 512。 另外, 请将 LOG_system的 buflen 项也改为 512。 b.在C源程序volume.c中增加包含的头文件,如std.h, log.h,并增加变量说明。这些变量由配置工具创立的,你可以直接引用,但需要说明为外部全局变量,如 extern LOG_Obj trace; c. 在C源程序中的main()函数中增加LOG API函数, 如 LOG_printf(&trace , “ The new program is runningn”); 该函数可以在DSP/BIOS提供的事件记录窗口显示信息(等效于标准C中的printf函数)。 6) 保

15、存修改的配置文件、C 源程序等。然后选择 Project 菜单中的 Build Options 选项,或使用鼠标右键单击工程文件名(如 bios.pjt)并选择 Build Options项来修改或添加编译、连接中使用的参数。例如,选择 Linker窗口,在“Output Filename”栏中写入输出 OUT 文件的名字,如 bios.out,你还可以设置生成的 MAP 文件名。注意,在使用了 DSP/BIOS 的程序中,生成的输出 OUT 文件最好与该工程文件使用的DSP/BIOS 配置文件名一致(后缀可以不同),如bios.out。 7) 完成编译、连接,正确生成 OUT 文件。然后使用

16、 File 菜单的“Load Program”选项,将生成的 OUT 文件(如 bios.out)装入 DSP 的片内存储器。在选择装入 OUT 文件名时请注意该文件所在的目录。CCS 会默认上次成功装入 OUT 文件的目录!这时CCS将显示程序的启始地址_c_int00。 8) 选择 “Debug” 菜单中的 “Go Main” 运行程序到 main()函数。 从程序的进入点_c_int00到 main()函数之间,包含了大量的初始化代码,所以只有执行到 main()函数后,CCS才能显示 C源程序。 9) 选择“DSP/BIOS ”菜单,然后选“Message Log ” 。用鼠标右键单击

17、出现的 MessageLog 窗口,在弹出菜单中选“Property Page ” 。在“log name ”选项中选择“trace ” ,使得该窗口显示送到 trace 对象的信息。 (使用LOG_printf(&trace, “The program ”)语句)使用 F5 运行程序,观察该窗口输出。 10) 使用命令 Debug - Halt暂停程序运行。为了说明 DSP/BIOS 工具编写的代码在执行过程中与通常(不使用 DSP/BIOS 工具)的代码执行有所不同,我们做个测试。我们在 LOG_printf语句后面增加一个死循环语句: while(1); 按通常顺序执行的原则,程序应该在

18、进入循环之前输出信息。然后我们重新编译、连接并装入程序。在编译时请忽略有关 while 语句的警告。然后使用 Debug - Go Main 命令执行到 main()函数。使用 F5 继续运行程序,看看 LOG窗口中还有没有信息输出?使用 Halt 命令暂停程序。注意,由于程序已进入死循环,在点击 Halt 命令时和点击后请多等一会,直到菜单显示或显示程序停在 while 语句行(该行变为黄色) 。请观察LOG窗口,这时才显示我们需要的信息。这说明一点,DSP 没有按程序编写的先后顺序执行。在使用 DSP/BIOS 工具后,DSP/BIOS 将需要执行的模块按优先级在执行队列中排队等待。所以,

19、若 main()函数一直没有执行完(因为有while(1)语句) ,LOG模块将一直处于等待状态,直到我们中断 main()函数。你可以使用命令 Debug - Restart 将 PC 指针指向程序的进入点,准备重新执行程序,然后用 Go Main命令进入 main()函数,再使用 F10 单步执行(若使用 F8,则单步运行将进入函数内部) ,你可以看到程序在进入循环之前已经执行了 LOG模块。想想这是为什么? 11)将 while 语句删除,继续修改程序,完成下面的功能:每 1ms 调用 dataIO( )函数一次,而模拟处理函数 processing()需要每调用 10 次 dataIO

20、()函数后才运行。利用 CCS提供的 DSP/BIOS 工具,我们可以很方便地实现该功能。首先我们设置定时器,使得程序运行时,在定时器中断的作用下实现每 1ms 调用一次 dataIO()函数。然后在将处理函数 processing()放到一个软件中断中,并利用 DSP/BIOS 提供的邮箱(mailbox)功能对其调用次数进行计数,以确定在什么时候将 processing( )放入执行队列。这样,我们在定时器中断服务程序中调用一个函数 SWI_dec(),该函数将对软件中断模块的邮箱(mailbox)减 1,当 mailbox 参数减到 0 时,将 processing()函数放入执行队列等

21、待执行。我们只需要在设置软件中断模块时将邮箱预置为 10, DSP/BIOS 会每次自动重新装入并实现计数功能。请按下列步骤修改配置文件和源程序:a.在 CLK模块中插入新的对象,重命名为 dataIO_CLK,使用鼠标右键进入属性窗口,输入函数名_dataIO。该函数将在定时器中断中被调用。使用鼠标右键点击 CLK 模块项可以进入定时器属性设置窗口。你可以修改“Microseconds/Int”项的值,以确定每隔多少微秒(us)产生一次定时器中断。这里应该设置为 1000。 b.在 SWI 模块中插入新的对象,重命名为 processing_SWI,使用鼠标右键进入属性窗口,输入该软件中断调

22、用的函数名_processing 以及调用时的参数:mailbox(邮箱)为 10,调用 processing()函数的输入参数_inp_buffer和_out_buffer.c. 打开volume.c,修改源文件。增加头文件如下: #include #include 增加Object对象说明,如下: extern SWI_Obj processing_SWI; 以及在dataIO()函数中增加如下函数调用: SWI_dec(&processing_SWI); 12)重新编译、连接并装入新的 OUT 文件。使用“Go Main”命令将程序运行到 main( )函数处。 13)用鼠标右键点击编译

23、连接信息输出窗口,并选择“Hide”隐藏该窗口。选择“DSP/BIOS”菜单,然后选择“RTA Control Panel” ,在弹出菜单中选 enable SWI, CLK 和 golbal,以便在下面的图形显示窗口中可以显示 SWI 和 CLK 模块。14)在“DSP/BIOS”菜单下选“Execution Graph” ,打开 DSP/BIOS 提供的各模块的图形化显示窗口(你可以用鼠标拖动窗口边框来调整窗口大小) ,使用 F5 运行程序,观察图形显示窗口。从图中的“PRD Ticks Times”所显示的刻度看看是否是每 10次定时器中断执行一次 processing_SWI。 15)

24、修改 processing_SWI中的 mailbox,如该为 5,即每隔 5ms 调用一次 dataIO()。重新build 并装入,再次运行,观察图形显示。看看与上次有何不同? 16) 使用 DSP/BIOS -CPU Load Graph选项,打开 CPU负荷状态图,观察 CPU占用情况。 17)使用 Debug - Halt 选项中断程序,利用 Watch 窗口修改 processingLoad 变量(可以在 C 源程序中将光标移动到该变量处,然后用右键添加到 Watch 窗口中;也可以先打开 Watch 窗口,再添加 processingLoad 变量。修改该变量的值时可以在 Wat

25、ch 窗口中用鼠标双击,然后输入新的值,如 1000) ,这样可以增加函数 processing( )的运行时间。按 F5 恢复程序运行,观察 CPU负荷图变化。 18)在 File 菜单中选 “Load GEL” , 并装入volume.gel 文件。 在 GEL 菜单中选 “Application Control”项(该项在装入 volume.gel 后才添加) ,在选择“Load” 。通过该 GEL 命令,你可以直接修改 processingLoad 变量(如 5000,10000, 12000) ,而不用中断程序运行。 观察 CPU负荷图和 CPU执行图的变化。 19) 暂停程序运行,

26、重新修改配置文件。先将processing_SWI的mailbox改回到10。然后再增加PRD模块,即增加一个周期性函数。修改新增加的PRD模块(如PRD0)的参数,将调用时间间隔period改为2,调用函数名称该为_test。这表示test()函数将每隔2ms执行一次(实际上是每2ms放入执行队列) 。在volume.c源程序的main()之前,增加如下代码: void test() 20)重新 build、装入并运行。注意:请将 RTA面板的“enable PRD logging”项打开 !使用运行图形观察各个函数执行情况。比较周期性函数 PRD0、软件中断模块processing_SWI

27、 和其他模块的运行情况。 21)修改变量 processingLoad,以增加 processing()函数的运行时间。如将 processingLoad改为 5000,10000,15000,看看 CPU负荷图和运行图的变化。比较一下第 18 步同样 processLoad=10000 时,CPU 负荷为何不一样?当到 15000 时,看看周期性函数模块 PRD0 是否还能保持原来的每 2ms 运行?想想为什么? 22) 当 processing( )执行时间过长时,周期函数 mytest( )有时无法执行。我们可以通过调整 processing_SWI和 PRD_swi 的优先级来保证周期函数 mytest( )的正常执行。 在配置文件的 SWI 模块中, 用鼠标拖动需要调整优先级的对象, 即可完成设置。 方法为:打开配置文件,用鼠标左键单击 SWI 项,这时你可以看到 processing_SWI模块和周期函数管理模块 PRD_swi 都处于同一优先级(Priority 1) 。使用鼠标拖动 PRD_swi到 Priority 2或更高。然后重新编译、连接,装入再运行,看看情况有没有变化? 本实验还未有实验结果,正在寻找原因。

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

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