《《DSP芯片原理及应用》课程.doc》由会员分享,可在线阅读,更多相关《《DSP芯片原理及应用》课程.doc(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、?DSP芯片原理及应用?课程实验指导书 路锦正 编著西南科技大学信息工程学院实验中心二七年二月目 录序 言 .03实验一 CCS软件应用实验04实验二 C语言与汇编混合编程编程14实验三 DSP定时器的应用22实验四 A/D转换实验25实验五 音频信号发生29实验六 语音信号FIR滤波32附录1 设备安装指南36序 言该课程是电子和通信专业的专业选修课,是一门技术性很强的实验课程。通过本实验课程加强对理论课程的认识和掌握,学会使用集成开发环境CCS,使用DSP实验箱调试和编写功能程序,理解DSP的工程开发的过程和技术细节,学会分析问题和解决问题的能力。主要内容包括:CCS软件应用实验,C语言和
2、汇编混合编程,A/D转换实验,定时器的应用,音频信号的发生和FIR算法实验等。通过该实验课程,学生掌握根本的DSP系统开发和算法优化的根本技术和过程,为将来的实际工程开发奠定坚实的根底本实验的总学时数为16学时,其中前两个实验每个2学时,后四个实验每个3个学时。也可根据具体的情况和要求做调整。实验中心主任张笑微教授在指导书编写过程中提出了许多珍贵的意见和建议,在此表示感谢!由于时间紧任务重,作者水平有限,错误在所难免。敬请读者批评指正!编著者实验一 CCS软件应用实验2学时一、实验目的1、掌握CCS软件的根本功能和作用2、掌握CCS软件的安装、配置过程3、了解DSP开发系统与PC机的连接方法和
3、步骤4、熟悉CCS开发环境和根本操作,了解TMS320C55xx 软件开发过程。 学习创立工程和管理工程的方法。 了解根本的编译和调试功能。 学习使用观察窗口。 了解图形功能的使用。5、软件仿真的作用、步骤和根本原理二、预习要求1、CCS的根本作用和功能有个预先的概念认识和了解。CCS,即Code Composer Studio代码生成室。它是TI公司为开发DSP产品的集成环境开发工具软件,它是集编辑、编译、链接和调试及图形、图像显示等等多功能于一体的开发工具软件。开发环境可分为:软件仿真和硬件仿真。不同的开发环境有不同的功能。软件仿真即只有CCS软件,仿真算法执行的结果,仿真、模拟程序在DS
4、P芯片上运行。硬件仿真即在评估板EVM,Evaluation Module或初学者开发套件(DSK,Developer Starter Kit)硬件平台上,把程序灌入Load ProgramsDSP芯片运行。CCS有几个版本,现在最新到V3.1,一般使用V2.1或V2.2。另外,根据TI的DSP分为C2000、C5000和C6000系列。那么CCS也相应有对应的版本。各个系列DSP的CCS软件功能根本相同。2、标准C语言的编程标准和约定。CCS支持标准C语言的编程,各种标准库都可以使用。只要在应用的地方把头文件*.h包含即可。另外DSP的C语言还有自己的特殊约定,例如代码段的放置,各种关键字的
5、使用等。详见对应的文档或者教材。3、ICETEK-VC5509-A-USB-EDUICETEK为北京瑞泰的标识,VC5509-A表示DSP芯片为TMS320VC5509APAGE。4、CPU核结构。图 1 TMS320C55XDSP结构框图三、实验原理与参考电路1、调试工具开发TMS320C55XX 应用系统一般需要以下几个调试工具来完成:1软件集成开发环境CCS(Code Composer Studio 2.21):完成系统的软件开发,进行软件和硬件仿真调试。它也是硬件调试的辅助手段。2开发系统、仿真器(ICETEK 5100-USB 或ICETEK 5100-PP):实现硬件仿真调试时与硬
6、件系统的通信,控制和读取硬件系统的状态和数据。3评估模块即评估板TEK VC5509-A 或ICETEK VC5509-C 等):提供软件运行和调试的平台和用户目标系统开发的参照。2、CCS的作用CCS主要完成系统的软件开发和调试。它提供一整套的程序编制、维护、编译、调试环境,能将汇编语言和C 语言程序编译连接生成COFF (公共目标文件)格式的可执行文件,并能将程序下载到目标DSP 上运行调试。3、CCS工程文件用户系统的软件局部可以由CCS 建立的工程文件进行管理,工程一般包含以下几种文件:1源程序文件:C 语言或汇编语言文件(*.C 或*.ASM)2头文件(*.H):各种结构体和变量的定
7、义,宏的定义,函数的声明等。3命令文件(* D):内存的使用情况,各个段的放置、地址和大小等情况。4库文件(*.LIB,*.OBJ): TI或用户自己定义的库文件,TI提供许多特定DSP、的库文件。用户自己编写的算法库文件。CCS既可以生成可执行工程文件,也可以生成库文件。5内存映射文件(*.map):CCS编译连接后,生成的内存映射文件,开发人员可以根据此文件掌握内存的使用状况。6可执行文件(*.out): 可以在DSP上运行的可执行文件。在调试的时候,用CCS的Load program功能把此文件灌入到DSP芯片中。四、实验内容本实验主要是软件仿真,即完全用CCS软件运行用户程序。软件仿真
8、是在实验条件有限的环境下,如没有EVM或DSK、目标板等硬件设备。软件仿真通常用于调试纯软件的算法和进行效率分析等。由CCS软件在PC 机内存中构造一个虚拟的DSP 环境,可以调试、运行程序。在某种程度上,软件仿真是可信的。但是在有些情况下,如使用了外设DMA或算法非常复杂等,那么软仿的结果就不可信了,甚至结果错误。因为一般软件无法构造DSP中的外设在使用软件仿真方式工作时,无需连接板卡和仿真器等硬件。1、配置CCS工作环境:1双击桌面上的,进入CCS设置窗口,“Import Configuration。2在出现的窗口中按标号顺序进行如下设置:图2 CCS 初始化配置窗口接着在下面出现的窗口中
9、选择“否(N)。此时CCS 已经被设置成Simulator 方式(软件仿真TMS320VC5509A 器件的方式),如果一直使用这一方式就不需要重新进行以上设置操作了。3启动CCS:启动软仿Simulator方式,双击桌面上的图标:。2、启动CCS后的窗口。为方便介绍各个CCS各个功能,这里截取了一个实用工程的开发界面,假设按照以上步骤操作的话,界面要简单的多。图3为CCS工作环境,图4为一个典型开发工程的开发界面。图 3 CCS工作环境图4 典型实用开发工程CCS界面3、创立工程 创立新的工程文件:选择菜单“Project的“New项。图 5 建立新工程操作弹出下列图,按编号顺序操作建立vo
10、lume.pjt 工程文件:单击完成设置 单击此按钮,选择工程所在目录为C:tiICETEK-VC5509-EDULabLab0101-UseCCS输入新建工程名volume图6 创立新工程步骤展开主窗口左侧工程管理窗口中“Projects下新建立的“,其中各项均为空。 在工程文件中添加程序文件:选择菜单“Project的“Add Files to Project项;在“Add Files to Project对话框中选择文件目录为C:TiICETEK-VC5509-EDULabLab0101-UseCCS,改变文件类型为“C SourceFiles(*.c;*.ccc),选择显示出来的文件“
11、;重复上述各步骤,添加d 文件到volume 工程中;添加C:tiC5500cgtoolslibrts55.lib 文件到工程中。 编译链接工程:选择菜单“Project的“Rebuild All项,或单击工具条中的按钮;注意编译过程中CCS 主窗口下部的“Build提示窗中显示编译信息,最后将给出错误和警告的统计数。4、编辑修改工程中的文件: 查看工程文件:展开CCS 主窗口左侧工程管理窗中的工程各分支,可以看到“工程中包含“、“、“v和“文件,其中第一个“为程序在编译时根据程序中的“include语句自动参加的。 查看源文件: 双击工程管理窗中的“文件,可以查看程序内容。可以看到,用标准C
12、语言编制的程序,大致分成几个功能块:-头文件。描述标准库程序的调用规那么和用户自定义数据、函数头、数据类型等。具体包含哪一个头文件,需要根据程序中使用了哪些函数或数据而定。比方:如果程序中使用了printf 函数,它是个标准C 提供的输入/输出库函数,选中“printf关键字,按Shift+F1会启动关于此关键字的帮助,在帮助信息中可发现其头函数为,那么在此局部程序中需要增加一条语句:#include “stdio.h。-工作变量定义。定义全局变量。-子程序调用规那么。这局部描述用户编制的子程序的调用规那么。也可以写到用户自己编制的.h 文件中去。-主程序。即main()函数。它可分为两局部:
13、变量定义和初始化局部、主循环局部。主循环局部完成程序的主要功能。-用户自定义函数。这个程序是一个音频信号采集、处理输出的程序。程序的主循环中调用自定义的函数read_signals 来获得音频数据并存入输入缓存inp_buffer 数组;再调用自定义函数write_buffer来处理音频数据并存入输出缓存;output_signals 将输出缓冲区的数据送输出设备;最后调用标准C 的显示信息的函数printf 显示进度提示信息。整个系统可以完成将输入的音频数据扩大volume 倍后再输出的功能。read_signals 子程序中首先应有从外接AD 设备获得音频数据的程序设计,但此例中由于未采用
14、实际AD 设备,就未写相应控制程序。此例打算用读文件的方式获得数据,模拟代替实际的AD 输入信号数据。write_buffer 子程序中首先将输入缓冲区的数据进行放大处理,即乘以系数volume,然后放入输出缓冲区。output_signals 函数完成将处理后的设备输出的功能,由于此例未具体操作硬件输出设备,所以函数中未写具体操作语句。 双击工程管理窗中的“文件,翻开此文件显示,可以看到其中有主程序中要用到的一些宏定义如“BUF_SIZE等。 volume d 文件定义程序所放置的位置,此例中描述了ICETEK-VC5509-A 评估板的存储器资源,指定了程序和数据在内存中的位置。比方:它首
15、先将ICETEK-VC5509-A 评估板的可用存储器分为五个局部,每个区给定起始地址和长度(区域地址空间不允许重叠);然后指定经编译器编译后产生的各模块放到哪个区。这些区域需要根据评估板硬件的具体情况来确定。 编辑修改源文件及编译程序:翻开“,找到“main()主函数,将语句“input=inp_buffer;最后的分号去掉,这样程序中就出现了一个语法错误;重新编译连接工程,可以发现编译信息窗口出现发现错误的提示;双击红色错误提示,CCS 自动转到程序中出错的地方;将语句修改正确(将语句末尾的分号加上);重新编译;注意,重新编译时修改正的文件被CCS 自动保存。 修改工程文件的设置:图 7
16、Build Options对话框通过以上设置操作,重新编译后,程序中的用户堆栈的尺寸被设置成1024 个字。5、根本调试功能: 下载程序: 执行File Load Program , 在随后翻开的对话框中选择刚刚建立的C:TiICETEK-VC5509-EDULabLab0101-UseCCSDebugvolume.out 文件。 设置软件调试断点:在工程浏览窗口中,双击volume.c 激活这个文件,移动光标到main()行上,单击鼠标右键选择Toggle Breakpoint 或按F9 设置断点(另外,双击此行左边的灰色控制条也可以设置或删除断点标记)。 利用断点调试程序:选择Debug
17、Run 或按F5 运行程序,程序会自动停在main()函数上。按F10 执行到write_buffer()函数。再按F8,程序将转到write_buffer 函数中运行。此时,为了返回主函数,按shift-F7 完成write_buffer 函数的执行。再次执行到write_buffer 一行,按F10 执行程序,比照与F8 执行的不同。提示:在执行C 语言的程序时,为了快速的运行到主函数调试自己的代码,可以使用Debug Go main 命令,上述实验中的使用的是较为繁琐的一种方法。6、使用观察窗口: 执行View Watch Window 翻开观察窗口。 在volume.c 中,用鼠标双击
18、一个变量(比方num),再单击鼠标右键,选择“Quick Watch,CCS 将翻开Quick Watch 窗口并显示选中的变量。 在volume.c 中,选中变量num,单击鼠标右键,选择“Add to Watch Window,CCS 将把变量添加到观察窗口并显示选中的变量值。 在观察窗口中双击变量,那么可以在这个窗口中改变变量的值。 把str 变量加到观察窗口中,点击变量左边的+,观察窗口可以展开结构变量,并且显示结构变量的每个元素的值。 把str 变量加到观察窗口中;执行程序进入write_buffer 函数,此时num 变量超出了作用范围,可以利用Call Stack 窗口观察在其他
19、函数中的变量:选择菜单View Call Stack 翻开堆栈窗口。双击堆栈窗口的main()选项,此时可以观察num 变量的值。7、文件输入/输出:下面介绍如何从PC 机上加载数据到DSP 上。用于利用的数据流测试算法。在完成下面的操作以前,先介绍Code Composer Studio 的Probe探针断点,这种断点允许用户在指定位置提取/注入数据。Probe 断点可以设置在程序的任何位置,当程序运行到Probe断点时,与Probe 断点相关的事件将会被触发,当事件结束后,程序会继续执行。在这一节里,Probe 断点触发的事件是:将PC 机存储的数据文件中的一段数据加载到DSP 的缓冲区中
20、。 在真实的系统中,read_signals 函数用于读取A/D 模块的数据并放到DSP 缓冲区中。在这里,代替A/D 模块完成这个工作的是Probe 断点。当执行到函数read_signals 时,Probe断点完成这个工作。在程序行read_signals(input);上单击鼠标右键,选择“Toggle breakpoint,设置软件断点。再在同一行上单击鼠标右键,选择“Toggle Probe Point,设置Probe 断点。 执行以下操作:图 8 设置探点此时,已经配置好了Probe 断点和与之关联的事件。进一步的结果在下面实验中显示。8、图形功能简介:下面我们使用CCS 的图形功
21、能检验上一节的结果。首先进行下面设置操作:-在弹出的图形窗口中单击鼠标右键,选择“Clear Display。-按F12 运行程序。观察Input 窗口的内容。9、选择菜单Fileworkspacesave workspacs As,输入文件名SY.wks 。10、退出CCS。五、实验报告要求1、实验报告中不能和实验内容中的文字雷同,用自己的话描述;2、总结CCS软件应用的体会;3、画图说明Input 和Output的图形为什么看到的不同,和断点有关吗?4、画出CCS的结果波形。六、思考题1、报告中阐述软件仿真和硬件仿真的区别、工作过程等;2、阐述配置和启动CCS的几个重要过程;3、阐述探点的
22、使用过程;4、看到的波形是连续的,那么程序中的数据是模拟信号吗?七、考前须知1、自己建立的工程和文件不要放置在C或D盘的目录下;2、运行CCS前,必须先配置SetupCCS;3、在观察波形的时候,注意变量地址的引用:&;4、加探点的时候须小心,确保探点设置成功。八、实验元器件、仪器、仪表1、电脑2、参考资料1/folders/print/tms320vc5509a.html2DSP教学实验箱使用说明书“,北京瑞泰创新实验二 C语言与汇编语言混合编程2学时一、实验目的1、学习用汇编语言编制程序;了解汇编语言程序与C 语言程序的区别和在设置上的不同。2、了解TMS320C55x 汇编语言程序结果和
23、一些简单的汇编语句用法。3、学习在CCS 环境中调试汇编代码。4、在了解纯C 语言程序工程和汇编语言程序工程结构的根底上,学习在C工程中参加汇编编程的混合编程方法。5、了解混合编程的考前须知。6、理解混合编程的必要性和在什么情况下要采用混合编程。二、预习要求1、TMS320C55X汇编编程根底掌握TMS320C55X的汇编指令体系、寻址方式、CPU的存放器定义和作用;对C55X CPU 核结合有相当的理解和掌握。2、C语言编程根底基于DSP的C语言编程的根本要求,工程的创立过程、考前须知;C语言的优化技术、步骤;C语言的编程标准在DSP环境的特殊要求等。3、C和汇编混合编程根底混和编程的根本约
24、定;鉴于汇编和C语言的各自的优缺点,充分利用其优势,进行混合编程。对核心代码,或糟糕的模块用汇编改写。4、混合编程考前须知三、实验原理与参考电路1、汇编语言程序:汇编语言程序除了程序中必须使用汇编语句之外,其编译选项的设置与C 语言编制的程序也稍有不同。其区别为:1汇编语言程序在执行时直接从用户指定入口开始,常见的入口标号为“start,而C语言程序在执行时,先要调用C 标准库中的初始化程序(入口标号为“_c_init00”),完成设置之后,才转入用户的主程序main()运行。2由于CCS的代码链接器默认支持C 语言,在编制汇编语言程序时,需要设置链接参数,选择非自动初始化,注明汇编程序的入口
25、地址。2、使用C语言开发应用程序的优缺点:1优点: 易于开发和维护。由于用C 语言书写接近自然语言,其可读性强、利于理解,在编制、修改、实现算法方面比用汇编语言开发容易。 可移植性强。 不容易发生流水线冲突。编译器能提供完善的解决流水线冲突的结果。 有大量现存的算法可利用。 适用于人机界面的开发。2缺点: 代码量大。 程序效率较低。 优化代码存在一定困难。综上所述,我们一般用C 语言设计应用程序的总体框架、解决人机接口和对速度效率要求不太高的复杂算法。3、使用汇编语言开发应用程序的优缺点:1优点: 更能发挥系统特点。由于汇编语言掌控系统硬件的能力强于C 语言,设计出来的程序更加贴近硬件特性,往
26、往能将硬件效能发挥到极致。 代码精练,效率高。用汇编语言设计的程序,代码短、不容易产生冗余。 代码量小。2缺点: 可读性差。不利于复杂算法的开发和实现。 可移植性差。 容易产生流水线冲突。由于排除冲突需要靠人来辅助完成,这要求编程人员有较为丰富的开发经验和对硬件工作机制的深刻理解。4、如何混合编程:1混合工程:在工程中可以同时包含C 语言程序和汇编语言程序,无需更改编译选项。一般地,我们使用C 程序为主,参加汇编语言程序模块。2使用模块技术:在应用程序中划分出比拟清晰的模块,不同模块可采用不同语言设计。强调效率和速度的模块采用汇编设计。尽量少用汇编语言设计程序。3如何找出需要用汇编程序设计的模
27、块: 用C 语言完成设计后,运用CCS 的软件仿真功能,充分测试程序,找到程序运行中的瓶颈(速度方面的和空间方面的)。 再使用分块仿真技术尽可能缩小模块。 找到的模块单独写成子程序,存入独立的文件中。 由于CCS 编译器能产生C 语言程序到汇编程序的中间文件,观察需要优化的模块的汇编结果,进行人工优化。 最后运用人工优化后形成的汇编程序模块,代替原来需要优化的C 语言模块,进行编译。 程序中可使用内嵌汇编。比方:asm(“ MOV T1, *SP(#1); 编译器可直接使用内嵌的汇编语句生成最终代码。但需要语句中双引号中为合法的汇编语句,比方要以空格开头等等。5、何时使用混合编程技术:1当程序
28、中需要操作与硬件密切相关的设备,而用C 语言较难实现时。比方:在中断程序设计时需要设置中断向量表,向量表中空间有时用C 语言语句有困难,且向量表要在内存中精确定位,这时可将设置中断向量表的局部用汇编语言代替。2当需要绕开C 编译器的规定,进行特殊操作时。比方:C 语言规定,程序不能访问程序代码区,而系统功能需要进行类似访问时可采用限制较小的汇编语言程序设计。3当需要提高模块的效率(包括空间上和时间上两方面的),而C 语言程序无法到达要求时。6、使用混合编程时的考前须知:1在汇编程序中使用其他C 语言模块中定义的变量或函数名称时,需要在引用的名称前加一下划线。如:C 中定义的变量为x,在汇编中引
29、用时要用_x。2汇编语言写的子程序需要符合C 语言的调用规那么,尤其是在默认的辅助存放器使用上和栈的使用上要求兼容。3在汇编语言模块中,需要编程者自己消除流水线冲突。4在使用内嵌汇编技术时,需要考虑以下内容: 要非常小心地处理,以免破坏C语言操作环境。编译器在遇到内嵌汇编语句时,不会对其中的汇编语句进行分析处理。 防止从内嵌汇编语句跳转到C语言模块中,那将极容易造成存放器使用上的混乱,从而产生难以预料的结果。 不要在内嵌汇编语句中改变C语言模块中变量的值,但可以平安地读取它们的值。 在汇编程序中不要使用内嵌汇编。7、实验程序解释:实验程序提供了一个使用C与汇编程序混合编程的实例,是一个用汇编语
30、言模块优化自己编制的应用程序的实例。首先用户拿到的是一个纯用C语言开发的工程,再根据假设,需要将其中一个模块改造成用汇编语言模块优化的模块。通过实验过程,用户可充分了解混合编程可以采取的步骤和方法。四、实验内容1、汇编ASM编程1程序设计任务:2步骤:A: 设置软件仿真环境,同实验一。启动CCS软件。进行以下设置:建立。B: 设置工程文件:C:建立汇编源程序文件: 输入源程序.mmregs.model call=c55_std.model mem=large.global x.bss x,1,0,0.sym x,x, 4, 2, 16.global y.bss y,1,0,0.sym y,y,
31、 4, 2, 16.global z.bss z,1,0,0.sym z,z, 4, 2, 16.sect “.text.align 4.globalstart.symstart,start,36,2,0Start:MOV #2,*(#Y)MOV #1,*(#X)L1:MOV *(#Y),AR1ADD *(#X),AR1,AR1MOV AR1,*(#Z)B L1注意:在输入汇编语言源程序时,除了标号以外的程序行必须以一个空格或Tab制表字符开始。-保存源程序为。连接命令文件:如同第步操作,建立空的源程序窗口。-输入连接命令文件内容:MEMORYDARAM: o=0x100, l=0x7f00D
32、ARAM2: o=0x8000, l=0x8000SECTIONS.text: DARAM.bss: DARAM.stack DARAM注意:第3、4 行中等号前边字母是小写的“L。D:调试汇编程序 选择菜单Project-Rebuild All。 执行File Load Program, 在随后翻开的对话框中选择刚刚建立的c:timyprojectsTASM.out文件。完成后,系统自动翻开源程序窗口,并在其中指示程序的入口地址为标号“start后的语句。 翻开观察窗口: 选择菜单View-Disassembly。注意程序运行指针停留的位置。 开启CPU 存放器观察窗口:单击菜单View-R
33、egisters-CPU Registers。请看PC 指针取值与当前程序运行地址对应。 将变量x、y、z 分别参加观察窗口:在源程序中双击变量名,再单击鼠标右键,选择“Add to Watch Window。这时,这3 个变量还未作初始化。 开启内存观察窗口:选择“View菜单中“Memory项,在“Memroy Window Options窗口中的“Address项中输入&x,单击“OK完成设置;“Memory窗口中x 的当前取值显示在第1 个地址之后。而且y 和z 的存储单元跟在其后。 观察程序运行结果: 单步运行2 次,在观察窗中观察到变量x、y 被赋值。变化的值被显示成红色。同时在“
34、Memory窗口中也能观察到x 和y 值的改变。 单步运行,观察CPU 存放器窗口中“XAR1存放器存储值的变化。程序利用XAR1 进行运算。 再单步运行,可观察到z 的值被计算出来。双击“Memory窗口中变量x、y 相应的存储单元,将其修改成其他取值,单步运行后观察结果。 对照观察map 文件和cmd 文件的内容: 选择菜单File-Open,将找到C:TiICETEK-VC5509-EDULabLab0103-ASMDebug 目录,将文件类型改为“Memory Map Files,选择TASM.map 文件、翻开。 翻开TASM d 文件。 程序的入口地址:map 文件中“ENTRY
35、POINT SYMBOL中说明了程序入口地址(start)。 内存使用情况:-map 文件中“MEMORY CONFIGURATION标明了程序占用DARAM 的使用情况,共占用25H 个存储单元。比拟一下,这比用C 编制的程序占用的要小得多。-观察map 文件中的“SECTION ALLOCATION MAP段,可以看出TASM.obj 的入口地址为100H,这也是程序的入口地址。-用户定义的变量从120H 开始,共占用了3 个单元(Word)。2、C和ASM混和编程1启动CCS,配置为软仿工作环境。2翻开工程、浏览程序内容、编译生成和下载可执行代码: 翻开工程:选择菜单Project-Op
36、en,选择翻开工程文件C: Ti 展开工程管理窗口中CASM工程,双击Source下的CProgram.c 项,翻开CProgram.c 源程序窗口。可以看到,程序完成了一个简单的运算,它先开设了三个全局变量x、y、z,然后分别给x 和y 赋初值,再在循环中计算x+y,结果赋值给z。 编译并下载程序:此设置的功能是每次编译完成后将程序自动下载到DSP 上。选择菜单Project-Build All,编译、连接和下载程序。运行程序,观察结果:在程序中有“在此加软件断点注释的语句上加软件断点;将变量z 参加变量观察窗口;运行程序到断点,观察变量z 的结果值。3修改程序: 修改算法局部为单独的子程序
37、:我们假设在循环中进行的运算是需要用汇编语言程序模块优化的局部。首先将“z=x+y;语句修改成“z=add(x,y);,在程序头上,变量定义之前加上一行“int add(int a,int b);,在程序末尾,添加如下子程序。int add(int a,int b)return(a+b);如此,将算法搬移到一个C 语言的子程序模块中实现。修改完成后,可以编译、下载、运行到断点,观察运行结果,判断子程序是否能完全与原程序一样完成算法。 将子程序移入:翻开一个新的空的源文件窗口,将main 函数后的子程序复制到窗口中;注释main 函数后面的子程序(在子程序前一行加“/*,在子程序结尾行后加“*/
38、);将新窗口中的内容保存为文件。 将add.c 参加工程,编译、下载、运行,检查结果,保证运算无误。 选择菜单Project-Build Options,进行如下设置: 重新编译工程;翻开C:TiICETEK-VC5509-EDULabLab0104-CASMa;在其中的“.line 2”行、“.line 3”行、“.line 4”行头上分别加分号,即注释这3 个语句。 将工程中的add.c 换成:在工程管理窗口中用鼠标右键单击,选择“Remove from Project;用鼠标右键单击,选择“Add Files to Project,选择C: Ti。 重新编译、下载、运行程序并观察结果。由
39、于add.asm 是CCS 编译器从add.c 编译得来的,下面要做的就是手工调整add.asm 中的汇编代码,从而实现优化处理。3退出CCS。五、实验报告要求1、报告的内容不能和上述内容雷同,只能用自己的话来阐述;2、报告中要有调试的数据结果,并分析;3、总结中写出深入的体会。六、思考题1、汇编的优缺点;2、C语言的优化过程;3、混合编程的考前须知;4、DSP算法优化的一般过程。七、考前须知1、注意CMD文件的使用。2、菜单Projects/Build Options下丰富、功能强大的复杂设置。3、混合编程的接口考虑。八、实验元器件、仪器、仪表1、电脑;2、参考资料:TMS320C实验三 D
40、SP定时器的应用3学时一、实验目的1、通过实验掌握和熟悉VC5509A 的定时器的工作原理;2、掌握VC5509A 定时器的控制方法、存放器的配置;3、掌握VC5509A 的中断结构和对中断的处理流程;4、学会C 语言中断程序设计,以及运用中断程序控制程序流程;5、掌握实验箱的工作配置过程、仿真器的连接和配置等。二、预习要求1、TMS320VC5509DSP的定时器的根本原理和各个存放器的意义以及相关操作等。2、硬件仿真的过程、设备配置和初始化等。3、实验箱的功能、实验用模块的工作原理等。三、实验原理或参考电路1、通用定时器介绍及其控制方法详见:TMS320VC5509A 内部有两个20 位通
41、用定时器GP,每个通用定时器包括:1一个16 位的减计数的计数器TIM;2一个16 位的定时器周期存放器PRD;3一个16 位的定时器控制存放器TCR;4一个16 位的定时器预定标存放器PSCR;PSCR 存放器说明:PSC: 4 位的预定标值,与TIM 共同组成20 位的定时计数器.TDDR: 预定标周期存放器(在需要时重装入PSC 的值)TCR 存放器说明详见2、中断响应过程详见:外设事件要引起CPU 中断,必须保证:IER 中相应使能位被使能,IFR 相应中断也被使能。在软件中,当设置好相应中断标志后,开中断,进入等待中断发生的状态;外设如定时器中断发生时,首先跳转到相应中断高级的效劳程
42、序中如:定时器1 会引起TINT中断,程序在进行效劳操作之后,应将本外设的中断标志位去除以便能继续中断,然后返回。3、中断程序设计:1程序中应包含中断向量表,VC5509A 默认向量表从程序区0 地址开始存放,根据IPVD和IPVH 的值确定向量表的实际地址。2注意观察程序中INTR_init()函数的定义局部,其中IPVD 和IPVH 的值都为0x0d0;同时观察配置文件ICETEK-VC5509-A d 中的VECT 段描述中o=0x0d000。3向量表中每项为8 个字,存放一个跳转指令,跳转指令中的地址为相应效劳程序入口地址。第一个向量表的首项为复位向量,即CPU 复位操作完成后自动进入
43、执行的程序入口。4效劳程序在效劳操作完成后,去除相应中断标志,返回,完成一次中断效劳。4、实验程序流程图:1注意观察程序中INTR_init()函数的定义局部,其中IPVD 和IPVH 的值都为0x0d0;同时观察配置文件ICETEK-VC5509-A d 中的VECT 段描述中o=0x0d000。2向量表中每项为8 个字,存放一个跳转指令,跳转指令中的地址为相应效劳程序入口地址。第一个向量表的首项为复位向量,即CPU 复位操作完成后自动进入执行的程序入口。3效劳程序在效劳操作完成后,去除相应中断标志,返回,完成一次中断效劳。5、实验程序分析:本实验设计的程序是:控制指示灯闪烁的延时控制,假设
44、用循环计算方法得到的,延时不精确也不均匀,而采用中断方式可以实现指示灯的定时闪烁,时间更加准确。实验程序的工程中包含了两种源代码,主程序采用C语言编制利于控制,中断向量表在vector.asm 汇编语言文件中,利于直观地控制存储区分配。在工程中只需将它们添加进来即可,编译系统会自动识别分别处理完成整合工作。实验程序的C 语言主程序中包含了内嵌汇编语句,提供一种在需要更直接控制DSP状态时的方法,同样的方法也能提高C 语言局部程序的计算效率。四、实验内容1、连接设备详见附录1的“设备安装指南。2、配置CCS为硬仿工作环境详见附录1的“设备安装指南。3、启动CCS软件详见附录1的“设备安装指南。选择菜单DebugReset CPU。4、翻开工程文件:翻开菜单“Project的“Open项;选择C:TiICETEK-VC5509-EDULabLab0303-Timer 目录中的“。在工程浏览器中,双击,激活main.c 文件,浏览该文件的内容,理解各语句作用。翻开,对照vector.asm 源程序学习中断向量表的写法。