- 前言
- 实验须知
- 概述
- 实验一 TMS320LF2407 DSP 实验开发系统及CC软件应用
- 实验二 常用指令操作实验
- 实验三 追灯式电路控制
- 实验四 按键计数器
- 实验五 键盘和 LED 发光二极管显示电路
- 实验六 模/数转换器 ADC 应用
- 实验七 串行外围接口 SPI 的应用
- 实验八 串行通信接口模块(SCI)
- 实验九 TMS320LF2407 与图形液晶显示模块接口及应用
- 实验十 I2C 串行日历时钟与 TMS320LF2407 的接口应用
- 附录一 DSP 器件仿真开发技术基础
- 附录二 TMS320LF2407 DSP 实验开发系统
- 附录三 TMS320LF2407 DSP 器件简介
- 附录四 XDS510 仿真开发系统的基本操作技术
- 附录五 程序开发平台 Code Composer
- 参考文献
实验一 TMS320LF2407 DSP 实验开发系统及CC软件应用
一.实验说明
在本书的程序设计实例中,是以DSP微控制器TMS320LF24x芯片作为设计对象,以TMS320LF2407芯片构成的实验开发系统作为目标系统;用XDS510硬件仿真器通过JTAG接口与开发调试主机联接,来建立程序的联机调试环境。
Windows版的Code Composer(简称CC)是一个功能强大的高级语言交互式调试器,它具有较多的菜单命令,对于经常用到的调试操作提供了相应的工具按钮。CC的功能非常丰富,不可能对其所有功能全面介绍,本着从简单实用角度出发,本次实验将以一个程序例子,说明如何使用CC’C2000来开发简单的汇编程序、编译并使用仿真器运行这一程序。同学们也可以根据自己的应用问题,尝试创建新的项目、新的工作组和新的源文件。
二.实验目的
1. 认识TMS320LF2407 DSP实验开发系统的硬件结构
2. 了解TMS320LF2407 DSP应用程序的开发调试流程
3. 学习使用CC’C2000调试TMS320LF2407 DSP程序
三.实验内容
1.预习附录四、五中的相关内容
2.CC’C2000使用操作练习
四.实验操作练习
下面将引导同学们利用CC’C2000建立一个简单的项目,并且进行一些基本的调试,以帮助同学们尽快地熟悉集成开发环境CC’C2000典型的使用方法。
1.实验设备链接
在联机调试时,需要将调试主机PC、XDP硬件仿真器及待调试的目标系统按如下方法进行链接:
••用JTAG排线电缆两端链接的仿真头分别插入实验板上的J2插座引脚和仿真器;
•用并口电缆将PC主机并行口与仿真器相连;
•将稳压电源的输出调为+5V分别引入P10插座引脚的1、2和3、4中;
•将+5VDC/1.5A电源原边接220V交流电压,副边链接仿真器外接电源插孔(针对XDSPP仿真器)。
2.集成调试软件安装(已安装好,不需要重做)
在Windows 2000操作系统之下,安装CC4.10版本的CC的全过程参见附录五。
3.仿真器软件Driver安装(参见附录四)
3. 仿真器运行环境设置
对计算机运行环境作某些设置的目的是让CC按照用户的各项具体要求进行DSP的程序调试。具体操作方法参见附录四。
4. CC’C2000的简单应用
CC’C2000是CC的核心部分,用于创建和管理项目,为开发人员提供自动化程序高、操作简便的符号化调试工作平台。在CC’C2000中的用户文件是组织成项目的。因此,使用CC’C2000的第一件事是创建新的项目,以说明用户准备运行软件的目标系统CPU,并创建项目所包含的文件列表。
(1)创建简单的项目(在本实验指导书中,若不声明,点击或双击均指鼠标左键)
利用CC’C2000创建用户程序时须要创建一个项目“Project”,创建项目后可以把源代码文件和必要的库文件加入进项目中。具体步骤如下:
•建立一个保存用户文件的文件夹,例如“C:\tic2xx\myprojects\work”。
•把“C:\tic2xx\c2000\tutorial\realtime”的文件复制到新建立的文件夹中。
•在Windows桌面上双击“CC’C2000”图标,或在“开始”菜单中选择“CC’C2000”,显示出如图1.1所示的CC’C2000操作界面。
图1.1 CC’C2000操作界面
•在图1.1所示的界面中,选择菜单命令“Project > New”(项目 > 新建)时,出现一个如图1.2所示的“Save New Project As”(另存为项目)对话框,选择要保存项目文件的文件夹(即前面创建的工作目录work),在“文件名”条形框中输入一个自己所认定的文件名,本试验教程中取用“sy1”作为我们新创建的项目文件名输入并保存。这时CC’C2000会自动创建一个名为“sy1.mak”的项目文件。
图1.2 新项目保存对话框
(2)新建、编辑一个简单的源文件
•在图1.1所示的界面中,选择菜单命令“File > New > Source File”(文件 > 新建 > 源文件)时,工作区内会出现一个如图1.3所示的文本编辑窗口,作为创建源文件的编辑窗口,它的标题栏中显示“Untitled1”,表示源文件尚未命名。
图1.3 文本编辑窗口
•在图1.3中,若欲为即将输入的源文件预先命名,那就选用菜单命令“File > Save As”(文件 > 另存为),随即会出现一个如图1.4所示的文件“保存为”对话框。
图1.4 保存为对话框
在图1.4中所示的“文件名”条形框内输入文件名“sy1”,并且它的存放目录与项目文件存放目录确保一致。然后点击“保存”按钮,对话框消失,文本编辑窗口的标题栏中换成了刚定义的文件名“sy1”(参见图1.5所示的标题栏)并将以扩展名“.asm”保存。
然后在文本编辑窗口输入下面一段程序,作为我们编辑、汇编和调试的实例程序。CC’C2000编辑器不支持汉字编辑工作,分号后面的注释部分可以用英语或者汉语拼音,也可以使用其他的编辑软件。由于汇编语言源文件[.asm]属于ASII码的纯文本文件格式的文件,当然也可以选用Windwos附件中的记事本或写字板等其它可以编辑纯文本文件的软件作为源文件编辑器,这样输入汉语注释就不存在任何障碍了。不过,保存时文件扩展名要用“.asm”,并且必须保存为纯文本格式,以便被CC’C2000调用。
CC’C2000编辑器具有较强的编辑功能:全屏幕编辑,可就地修改,所见即所得;跨文件整块剪贴技术;彩色辨识正文等。它的键盘命令配合常规的鼠标操作可实现C语言和汇编语言源文件的编辑。
例1.1
本程序将循环点亮8个发光二极管,通过用软件延时的方法来调整发光二极管的延时间隔。当然,在掌握了本程序后,完全可以充分发挥想象,改变一下程序内容和灯的接法(比如用光耦驱动继电器来控制霓虹灯),做出各种变化非凡的大型灯光广告牌。
程序清单:
;该程序实现实验板上的LED灯的循环显示
.include "vector.h"
.include "F2407REGS.H"
.def _c_int0, LED
LED .set 0200h
.bss DEYH,1
.text
SYSINIT: ;系统初始化子程序
SETC INTM ;关闭总中断
CLRC SXM
CLRC OVM
CLRC CNF ; B0 is configured as data space
LDP #SCSR1>>7 ;取得SCSR1所在的页
SPLK #81FEH,SCSR1 ; CLKIN=6M,CLKOUT=24M
SPLK #0E8H,WDCR ; Disable WDT
LDP #IMR>>7
SPLK #0h,IMR ;disable all interrupt
SPLK #0FFFFh,IFR ; clear all the interrupt flags of first level
LDP #MCRC>>7
LACL MCRC
AND #0FBFFh ;IOPF2口为通用的IO口
SACL MCRC
LACL PFDATDIR
OR #0400h ;使PF2口为输出口
AND #0FFFBH
SACL PFDATDIR ; 不使能74HC273芯片
LACL MCRA
AND #0FF00H
SACL MCRA ;IOPB[0-7]为一般I/O口功能
LACL PBDATDIR
OR #0FF00H
AND #0FF00H ;IOPB[0-7]为输出功能,并马上清0
SACL PBDATDIR
RET
; *********************************************************************
CLOCK: ; 产生74HC273驱动脉冲的子程序
LDP #PFDATDIR>>7
LACL PFDATDIR
OR #0004H ;PF2口输出高电平
SACL PFDATDIR
RPT #10H
NOP ;延时
LACL PFDATDIR
AND #0FFFBH ;PF2口输出低电平
SACL PFDATDIR
RET
; ********************************************************************
DELAY: ;延时子程序
LDP #DEYH>>7
SPLK 0FFFFH,DEYH
LACL DEYH
CLRC C
CON:
SUB #1
BCND EXIT,NC
NOP
B CON
EXIT
RET
_c_int0
;主程序的入口
CALL SYSINIT ;系统初始化
LOOP1:
LDP #LED>>7
SPLK #0001h,LED ;给LED赋初值为1
LOOP:
LDP #PBDATDIR>>7
LACL PBDATDIR ;把PBDATDIR的值赋给ACC寄存器
AND #0FF00H ;把数据位都清0
LDP #LED>>7
LACL #LED
LDP #PBDATDIR>>7
SACL PBDATDIR ;把需要显示的值赋给相应的寄存器
CALL CLOCK ;产生琐存脉冲
LDP #LED>>7
LACL LED
CLRC C ;清进位位,以免对移位造成影响
ROL ;左移一位
SACL LED
CALL DELAY ;延时
LDP #LED>>7
BIT LED,6 ;复制LED寄存器的第九位到TC位?
BCND LOOP1,TC ;如果LED的移位次数已到,则对LED重新赋值
B LOOP ;循环
NOP
PHANTOM RET
GISR1 RET
GISR2 RET
GISR3 RET
GISR4 RET
GISR5 RET
GISR6 RET
.end
源程序输完之后(如图1.5所示),应该用菜单命令“File > Save”(文件 > 保存)及时保存到C:\tic2xx\myprojects\work\sy1 asm路径及文件名下。对于较长的源程序,如果一次不能输入完毕而需要中途退出,也应该及时保存,以便在下一次能继续前次的工作。在长程序文件的输入过程中,不时地进行存储是一种好习惯,也可避免因电源意外掉电而造成前功尽弃。
图1.5 源程序编辑窗口
(3)将文件添加到该项目中
由于项目文件是项目的管理文件,故项目管理的信息都需存放在“sy1.mak”的项目文件中,在对用户系统进行开发时需要将所需文件包含在项目文件中,即使用工程管理方法:一次性将工程的全部源文件、头文件、链接命令文件、用户库文件送入工程管理器,统一管理“汇编/编译”和“链接/定位”,无须人工干预。
在图1.1所示的界面中,先选择菜单命令“Project > Open”(项目 > 打开),再根据给出的“Project Open”对话框,选择已存项目文件所在的文件夹并打开文件(如图1.6所示),然后再选择菜单命令“Project > Add Files To Project”(项目 > 添加文件到项目),出现一个如图1.7所示的“Add Files to Project”对话框,然后将本项目要用到的.asm汇编源文件、.cmd链接命令文件和一个“rts2xx.lib”的库文件按类一一添加到该项目中,在默认情况下,该库文件可以在“C:\tic2xx\c2000\cgtools\.lib”目录中找到。对于.h头文件和在程序中用“include”引用的文件,只要在同一个目录下,工程管理器会自动将其加入。工程管理器不允许用户添入其它类型的文件。
图1.6 项目文件选择对话框
图1.7 添加文件对话框
(4)察看项目文件
一旦编译了文件,Project窗口将用树型结构显示项目包含的组和文件的关系,如图1.8所示。组用于把相关的源文件收集在一起,每一个组可以包含在一个或多个目标中,而且源文件可以出现在一个或多个组内。通过该项目管理窗口,可以十分方便地察看项目所包含的文件是否加入到相应文件夹中。
当启动CC’C2000后,会自动显示出项目管理窗口。如果没有显示该窗口,可以选择菜单命令“View > Project”(观察 > 项目)使之激活。用鼠标右键点击“Project”再选择“Open project”,操作方法如图1.9所示,根据给出(如图1.6)的对话框,用前面相同的方法选择打开项目文件,然后可选择点击靠近源文件的“+”符号来显示包含文件(具体操作参见附录五)。
图1.8 项目管理窗口 图1.9 文件操作方法
(5)编译链接
启动CC’C2000汇编编译器对汇编语言源程序进行编译的方法有多种,在此使用的方法是:在图1.1所示的界面中,先选择菜单命令“Project > Open”(项目 > 打开),以便选定需要编译的项目文件,然后再选择菜单命令“Project > Rebuild All”(项目 > 汇编编译和链接所有文件),CC’C2000将自动调用汇编编译器和链接器将项目文件“sy1.mak”管理下的源文件“sy1.asm”编译生成目标文件“sy1.obj”,这时会出现一个如图1.10所示的“Build”(创建)窗口,其中倒数第二行用蓝色字告诉我们:“Build Complete”(创建完成),如果有错,最后一行提示错误的个数和数型。其实,这是笔者事先有意安排的一处错误,以便同学们了解CC’C2000汇编编译器是如何帮助我们查找错误的(即错误和警告自动定位)。
图1.10 创建结果窗口(不成功)
根据系统提示该错误的类型和位置回到原程序中查看和修改,然后采用上述方法重新进行编译。如果编译正确,将会链接生成一个文件名为“sy1.out”的可执行文件。再次出现如图1.11所示的“Build”(创建)窗口,最后一行告诉我们:“没有错误。”至此,我们就建好了一个可以在CC’C2000环境下用XDS510硬件仿真器进行调试的、完整的项目。
图1.11 创建结果窗口(成功)
对于建好的项目,一般情况下,在退出CC’C2000调试环境时,系统会自动将“项目文件”保存在“.wks”文件中。而对于作了修改的源程序则需要重新保存,选用菜单命令“File > Save”即可保存到“sy1.asm”文件中。
在编译链接成功之后,需要将生成的“sy1.out”可执行文件装载到实验板上之后才能对程序进行调试仿真。因此,在图1.1所示的界面中,选择菜单命令“File > Load Program”(文件 > 装载程序),出现一个如图1.12所示的“Load Program”对话框,然后将可执行的“sy1.out”文件下载到实验板上。文件下载之后,就可对文件进行在线调试。
图1.12 程序装载对话框
注意:在本次实验中所介绍的这种单文件项目,要求项目文件名、目标文件名和源文件名必须保持一致。
(6)调试程序
程序调试就是检验我们设计的程序,是否能够正常运行,是否产生正确的结果,是否存在设计漏洞,算法(可以通俗地理解为,用计算机的思想解决实际问题的方法)设计是否合理,是否能够准确地控制各种硬件资源,是否能够实现预期的功能,等等。
CC’C2000的调试环境功能很强,可以在C语言级调试,也可以在汇编语言级调试,并提供了多种运行程序的方式或调试手段,比较常用的有以下几种:连续运行、设置观察窗、单步运行、动画运行和设置断点运行等。下面将通过前面给定的例子更深入地介绍各种调试手段的使用方法:
•连续运行方式:
在图1.1所示的界面上,将源程序观察窗作为当前窗口。首先应选择菜单命令“Debug > Reset DSP”(调试 > DSP复位),或者点击工具栏上的按钮,使DSP复位,然后选择菜单命令“Debug > Run”(调试 > 程序运行),或者按动F5键,或者点击工具栏上的图标按钮,均可令程序进入实时运行状态。当输入上述命令时,我们似乎看不出程序有任何反应,其实程序正在连续运行,这可以通过观察工具栏上的图标按钮是否改变颜色来判断,如果变为浅色则表明程序正在运行。
由于这段程序结构是无限循环程序结构,欲想终止程序运行可点击工具栏上的图标按钮,或者选择菜单命令“Debug > Halt”(调试 > 停止),或者按动一下键盘上“Shitf +F5”组合键。随即,工具栏的颜色复原,表明程序停止运行,并随机地停留在程序的某一行上。
在程序连续运行过程中,状态栏中的字段得不到及时更新,只有当程序停下来之后,状态栏信息才更新一次。可见,采用这种调试手段,不便于及时了解程序的运行状态,也不便于控制程序的运行过程。对于调试本实验设计的这段循环结构的程序,连续运行方式就不是一种很有效的手段。因此,需要进一步探讨和选择其它的调试手段。
•设置观察窗口:
根据被调试程序的运行需要,可以在CC’C2000桌面上同时选择打开最多6个不重叠观察窗口。通过观察各种存储器和寄存器的内容,使开发者更直观地分析程序的逻辑功能和运行状况,进而达到调试程序的目的。
实验教程中调试的这个例子比较简单,其中用到的寄存器除了ACC、ST0、ST1和PC指针等之外,当需要观察一个变量时,在观察变量窗口中输入变量名称,在程序运行过程中该变量会被不停地改写。
我们可以根据这种情况来设置观察窗。除了桌面上已有的一个源程序窗口之外,可以再增设:反汇编观察窗口、存储器窗口、CPU寄存器窗口、观察窗口。
反汇编观察窗口:用来显示汇编程序和程序存储器的内容。在这些程序中,用一反显高亮条来表示当前指针,可用鼠标点击汇编语句的方法来设置断点,再点击一次即可取消断点。详细用法参见附录五。
存储器窗口:可直接观察存储器的内容。详细用法参见附录五。
CPU寄存器窗口:其中包含“CPU Register”和“Status Register”两个选项,点击相应的选项可以观察调试过程中CPU寄存器和各个状态位的变化情况。详细用法参见附录五。
观察窗口:观察调试过程中的变量、C表达式、地址和寄存器的值。在图1.1所示的界面上,将源程序观察窗作为当前窗口,选择菜单命令“View > Watch Window”(视图 > 观察窗口),将有一个空白窗口出现在CC’C2000窗口的下部,如图1.13所示。该窗口用来显示所选择的变量、寄存器和存储器的内容。
图1.13 CC’C2000窗口下的观察窗口
为了监视跟踪变量,用户可以将变量设置为查看点。通常用如下的方法在观察窗口中加入一个新的变量:在空白观察窗口中单击鼠标右键,弹出语境菜单,选择其中的“Insert New Expression”,如图1.13所示。进入所选择的图1.14 “Watch Add Expression”(添加变量对话框),在文本栏中键入打算观察的变量名,然后点击“OK”按钮,即可在观察窗口中增加一个待观察的变量,如果有必要,用同样的方法还可以在观察窗口中添加多个变量。在该观察窗中可以查看到以蓝色显示的变量的物理地址(十进制)、符号名和数值。
图1.14 添加变量对话框
通常用如下的方法在观察窗口中删除一个表达式:用鼠标点击需要删除的表达式,单击鼠标右键,在弹出的语境菜单中选择“Remove Current Expression”即可。
如果添加变量时在“添加变量对话框”的文本栏中只输入变量名,则在观察窗口中只显示出该变量的地址;如果需要显示该变量的值,则需要在变量名前加“*”号。
变量的地址、值其显示默认格式为十进制,如果想改变显示格式,则在输入变量时在其后紧跟一个逗号和一个格式指示字母。常用的格式指示字母和其代表格式的对应关系如表1.1所列。
表1.1 常用格式指示字母表
字母符号
代表的格式
D
十进制
E
指数浮点
F
十进制浮点
X
十六进制
O
八进制
U
无符号整型
C
ASCII字符(字节)
•单步运行方式:
单步运行是一种控制程序运行过程的有效方法,而且能够及时观察到程序的运行状态。每输入一次控制命令,程序就会被执行一条指令,并且立刻更新CC’C2000桌面上各个观察窗中的显示信息以及状态栏中的显示信息,也就是及时显示该指令的执行结果。具体操作方法如下:
在图1.1所示的界面上,将源程序观察窗作为当前窗口,用前面所述方法使DSP复位。然后选择菜单命令Debug > Step Into(调试 > 单步运行方式),或者按一下键盘上的F8键,或者点击工具栏中的图标按钮,均可令程序进入单步运行状态。一次次地点击按钮的同时,可以看到观察窗中出现变红的寄存器或变量,并且其中的值会不断地及时更新。
可见,采用这种调试手段,不仅可以及时地了解程序的运行状态,而且还能很好地控制程序的运行过程。程序的单步运行方式与实时连续运行方式相比,两者具有很强的互补性。
•动画运行方式
动画运行方式既像连续运行方式那样自动控制程序的运行过程,又像单步运行方式那样在每条指令执行过后刷新屏幕显示信息。程序不停,刷新不止,显示效果类似于播放动画片。
在图1.1所示的界面上,也应将源程序观察窗作为当前窗口,并先让DSP复位,然后选择菜单命令Debug > Animate(调试 > 动画运行方式),或者按一下键盘上的F12键,或者点击工具栏中的图标按钮,均可令程序进入动画运行状态。同时应注意观察寄存器变量的变化规律,是否符合设计要求。若想让程序停止,点击按钮即可。
•设置断点运行方式:
在调试长程序的过程中,可以控制连续运行那些简单的或者已调通的程序片段,而控制单步运行那些复杂的或者待调试的程序片段。这样就可以将连续运行方式和单步运行方式的优势结合起来交替使用。例如,有时候希望执行一个程序片段之后暂停下来,观察各寄存器变量的值,以便分析中间结果。这些均可通过在程序中对所选定的行设置断点来实现。可以说,设置断点是控制程序运行过程的另一种有效方法。
一种最简便的设置断点的方法:在图1.1所示的界面上确保当前窗口为源程序观察窗。用光标标记准备设置断点的源程序语句行后,点击图标按钮或者双击鼠标,此时,选定行会出现红色背景,表示设置完成;点击图标按钮,取消所设置的断点。
对已设置断点的程序进行调试时,可以采用连续运行方式。即先让DSP复位,再点击按钮使程序连续运行,直到遇上第1个断点即停止;对运行结果观察完成之后,再次点击按钮使程序继续运行,直到遇上第2个断点又会暂停,等等一直调试下去。
实际上,常常需要将前面介绍的5种调试手段混合使用,以达到最佳的调试效果。实现同一功能有多种方法,本次实验仅向同学们展示了CCS(以CC4.10版本为例)的基本用法,有许多的功能还需要同学们根据自己的习惯爱好去慢慢挖掘。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论