CCS - DSP开发环境经典教程 - 图文

更新时间:2024-02-01 21:21:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一章 CCS概述

第一章 CCS概述

本章概述CCS(Code Composer Studio)软件开发过程、CCS组件及CCS使用的文件和变量。

CCS提供了配置、建立、调试、跟踪和分析程序的工具,它便于实时、嵌入式信号处理程序的编制和测试,它能够加速开发进程,提高工作效率。

1.1 CCS概述

CCS提供了基本的代码生成工具,它们具有一系列的调试、分析能力。CCS支持如下所示的开发周期的所有阶段。

设计概念性规划编程和编译创建工程文件、编写源程序和配置文件调试语法检查、探测点设置和日志保存等分析实时调试、统计和跟踪

在使用本教程之前,必须完成下述工作:

? 安装目标板和驱动软件。按照随目标板所提供的说明书安装。如果你正在用仿真器或目标板,其驱动软件已随目标板提供,你可以按产品的安装指南逐步安装。

? 安装CCS.遵循安装说明书安装。

? 运行CCS安装程序SETUP. SETUP程序允许CCS使用为目标板所安装的驱动程序。

1

第一章 CCS概述

CCS构成及接口见图1-1。

图1-1 CCS构成及接口

2

第一章 CCS概述

1.2 代码生成工具

代码生成工具奠定了CCS所提供的开发环境的基础。图1-2是一个典型的软件开发流程图,图中阴影部分表示通常的C语言开发途径,其它部分是为了强化开发过程而设置的附加功能。

图1-2 软件开发流程

图1-2描述的工具如下:

? C编译器(C compiler) 产生汇编语言源代码,其细节参见TMS320C54x最优化C编译器用户指南。

? 汇编器(assembler) 把汇编语言源文件翻译成机器语言目标文件,机器语言格式为公用目标格式(COFF),其细节参见TMS320C54x汇编语言工具用户指南。

? 连接器(linker) 把多个目标文件组合成单个可执行目标模块。它一

3

第一章 CCS概述

边创建可执行模块,一边完成重定位以及决定外部参考。连接器的输入是可重定位的目标文件和目标库文件,有关连接器的细节参见TMS320C54x最优化C编译器用户指南和汇编语言工具用户指南。 ? 归档器(archiver)允许你把一组文件收集到一个归档文件中。归档器也允许你通过删除、替换、提取或添加文件来调整库,其细节参见TMS320C54x汇编语言工具用户指南。

? 助记符到代数汇编语言转换公用程序(mnimonic_to_algebric assembly translator utility)把含有助记符指令的汇编语言源文件转换成含有代数指令的汇编语言源文件,其细节参见TMS320C54x汇编语言工具用户指南。

? 你可以利用建库程序(library_build utility)建立满足你自己要求的“运行支持库”,其细节参见TMS320C54x最优化C编译器用户指南。

? 运行支持库(run_time_support libraries) 它包括C编译器所支持的ANSI标准运行支持函数、编译器公用程序函数、浮点运算函数和C编译器支持的I/O函数,其细节参见TMS320C54x最优化C编译器用户指南。

? 十六进制转换公用程序(hex conversion utility) 它把COFF目标文件转换成TI-Tagged、ASCII-hex、 Intel、 Motorola-S、或 Tektronix 等目标格式,可以把转换好的文件下载到EPROM编程器中,其细节参见TMS320C54x汇编语言工具用户指南。

? 交叉引用列表器(cross_reference lister)它用目标文件产生参照列表文件,可显示符号及其定义,以及符号所在的源文件,其细节参见TMS320C54x汇编语言工具用户指南。

? 绝对列表器(absolute lister)它输入目标文件,输出.abs文件,通过汇编.abs文件可产生含有绝对地址的列表文件。如果没有绝对列表器,这些操作将需要冗长乏味的手工操作才能完成。

4

第一章 CCS概述

1.3 CCS集成开发环境

CCS集成开发环境允许编辑、编译和调试DSP目标程序。

1.3.1 编辑源程序

CCS允许编辑C源程序和汇编语言源程序,你还可以在C语句后面显示汇编指令的方式来查看C源程序。

集成编辑环境支持下述功能:

? 用彩色加亮关键字、注释和字符串。

? 以圆括弧或大括弧标记C程序块,查找匹配块或下一个圆括弧或大括弧。

? 在一个或多个文件中查找和替代字符串,能够实现快速搜索。 ? 取消和重复多个动作。

? 获得“上下文相关”的帮助。 ? 用户定制的键盘命令分配。

5

第一章 CCS概述

1.3.2创建应用程序

应用程序通过工程文件来创建。工程文件中包括C源程序、汇编源程序、目标文件、库文件、连接命令文件和包含文件。编译、汇编和连接文件时,可以分别指定它们的选项。在CCS中,可以选择完全编译或增量编译,可以编译单个文件,也可以扫描出工程文件的全部包含文件从属树,也可以利用传统的makefiles文件编译。

1.3.3 调试应用程序

CCS提供下列调试功能:

? 设置可选择步数的断点 ? 在断点处自动更新窗口 ? 查看变量

? 观察和编辑存储器和寄存器 ? 观察调用堆栈

? 对流向目标系统或从目标系统流出的数据采用探针工具观察,并收集存储器映象

? 绘制选定对象的信号曲线 ? 估算执行统计数据

? 观察反汇编指令和C指令

CCS提供GEL语言,它允许开发者向CCS菜单中添加功能。

6

第一章 CCS概述

1.4 硬件仿真和实时数据交换

TI DSP供在片仿真支持,它使得CCS能够控制程序的执行,实时监视程序运行。增强型JTAG连接提供了对在片仿真的支持,它是一种可与任意DSP系统相连的低侵扰式的连接。仿真接口提供主机一侧的JTAG连接,如TI XDS510。为方便起见,评估板提供在板JTAG仿真接口。

在片仿真硬件提供多种功能: ? ? ? ? ? ?

DSP的启动、停止或复位功能 向DSP下载代码或数据

检查DSP的寄存器或存储器 硬件指令或依赖于数据的断点

包括周期的精确计算在内的多种记数能力 主机和DSP之间的实时数据交换(RTDX)

CCS提供在片能力的嵌入式支持;另外,RTDX通过主机和DSP API提供主机和DSP之间的双向实时数据交换,它能够使开发者实时连续地观察到DSP应用的实际工作方式。在目标系统应用程序运行时,RTDX也允许开发者在主机和DSP设备之间传送数据,而且这些数据可以在使用自动OLE的客户机上实时显示和分析,从而缩短研发时间。

RTDX由目标系统和主机两部分组成。小的RTDX库函数在目标系统DSP上运行。开发者通过调用RTDX软件库的API函数将数据输入或输出目标系统的DSP,库函数通过在片仿真硬件和增强型JTAG接口将数据输入或输出主机平台,数据在DSP应用程序运行时实时传送给主机。

图1-4 RTDX系统组成

7

第一章 CCS概述

在主机平台上,RTDX库函数与CCS一道协同工作。显示和分析工具可以通过COM API与RTDX通信,从而获取目标系统数据,或将数据发送给DSP应用例程。开发者可以使用标准的显示软件包,诸如National Instruments? LabVIEW,Quinn-Curtis? Real-Time Graphics Tools,或Microsoft Excel。同时,开发者也可研制他们自己的Visual Basic或Visual C++应用程

序。

图1-5 RTDX实例

RTDX能够记录实时数据,并可将其回放用于非实时分析。下述样本由National Instruments? LabVIEW 软件产生。在目标系统上,一个原始信号通过FIR滤波器,然后与原始信号一起通过RTDX发送给主机。在主机上,LabVIEW显示屏通过RTDX COM API获取数据,并将它们显示在显示屏的左边。利用信号的功率谱可以检验目标系统中FIR滤波器是否正常工作。处理后的信号通过LabVIEW,将其功率谱显示在右上部分;目标系统的原始信号通过LabVIEW的FIR滤波器,再将其功率谱显示在右下部分。比较这两个功率谱便可确认目标系统的滤波器是否正常工作。

RTDX适合于各种控制、伺服和音频应用。例如,无线电通信产品可以通过RTDX捕捉语音合成算法的输出以检验语音应用程序的执行情况;嵌入式系统也可从RTDX获益;硬磁盘驱动设计者可以利用RTDX测试他们的应用软件,不会因不正确的信号加到伺服马达上而与驱动发生冲突;引擎控制器设计者可以利用RTDX在控制程序运行的同时分析随环境条件而变化的系数。对于这些应用,用户都可以使用可视化工具,而且可以根据需要

8

第一章 CCS概述

选择信息显示方式。

9

第一章 CCS概述

1.5 CCS文件和变量

本节简述CCS文件夹、CCS的文件类型及CCS环境变量。

1.5.1安装文件夹

安装进程将在安装CCS的文件夹(典型情况为:c:\\ti)中建立子文件夹。此外,子文件夹又建立在Windows目录下(c:\\windows or c:\\winnt)。

C:\\ti包含以下目录: ? bin.各种应用程序

? C2800\\bios。DSP/BIOS API的程序编译时使用的文件

? C2800\\cgtools.Texas instruments源代码生成工

? C2800\\examples.源程序实例 ? C2800\\rtdx. RTDX文件

? C2800\\tutorial.本手册中使用的实例文件 ? cc\\bin.关于CCS环境的文件

? cc\\gel.与CCS一起使用的GEL文件 ? docs.PDS格式的文件和指南 ? myprojects.用户文件夹

1.5.2文件扩展名

以下目录结构被添加到Windows目录: ? ti\\drivers.各种DSP板驱动文件

? ti\\plugins.和CCS一起使用的插件程序 ? ti\%uninstall.支持卸载CCS软件的文件

当使用CCS时,你将经常遇见下述扩展名文件: ? project.mak.CCS使用的工程文件 ? program.c.C程序源文件

10

第一章 CCS概述

? ? ? ? ? ? ? program.asm. 汇编程序源文件

filename.h.C程序的头文件,包含DSP/BIOS API模块的头文件 filename.lib.库文件

project.cmd.连接命令文件

program.obj.由源文件编译或汇编而得的目标文件

program.out.(经完整的编译、汇编以及连接的)可执行文件 project.wks. 存储环境设置信息的工作区文件,

? program.cdb.配置数据库文件。采用DSP/BIOS API的应用程序需要这类文件,对于其它应用程序则是可选的。 保存配置文件时将产生下列文件: ? programcfg.cmd.连接器命令文件 ? programcfg.h28.头文件

? programcfg.s28.汇编源文件

11

第四章 算法和数据测试

第二章 开发一个简单的应用程序

本章使用hello world实例介绍在CCS中创建、调试和测试应用程序的基本步骤;介绍CCS的主要特点,为在CCS中深入开发DSP软件奠定基础。

在使用本实例之前,你应该已经根据安装说明书完成了CCS安装。建议在使用CCS时利用目标板而不是仿真器。如果没有CCS而只有代码生成工具和Code Composer或者是利用仿真器在进行开发,你只要按第二章和第四章中的步骤执行即可。

2.1 创建工程文件

在本章中,将建立一个新的应用程序,它采用标准库函数来显示一条hello world 消息。

1. 如果CCS安装在c:\\ti中,则可在c:\\ti\\myprojects建立文件夹

adcshujucaiji 。(若将CCS安装在其它位置,则在相应位置创建文件夹hello1。)

2. 将c:\\ti\\c2800\\tutorial\\hello1中的所有文件拷贝到上述新文件夹。

3. 从Windows Start菜单中选择Programs→Code Composer Studio

?C5400→CCStudio。(或者在桌面上双击Code Composer Studio图标。)

注:CCS设置

12

第四章 算法和数据测试

如果第一次启动CCS时出现错误信息,首先确认是否已经安装了CCS。如果利用目标板进行开发,而不是带有CD-ROM的仿真器,则可参看与目标板一起提供的文档以设置正确的I/O端口地址。

4. 选择菜单项Project→New。

5. 在Save New Project As窗口中选择你所建立的工作文件夹并点击

Open。键入adcshujucaiji作为文件名并点击Save,CCS就创建了adcshujucaiji.mak的工程文件,它存储你的工程设置,并且提供对工程

所使用的各种文件的引用。

13

第四章 算法和数据测试

2.2 向工程添加文件

1. 选择Project→Add Files to Project,选择hello.c并点击Open。

2. 选择Project→Add Files to Project,在文件类型框中选择*.asm。选择

vector.asm并点击Open。该文件包含了设置跳转到该程序的C入口点的RESET中断(c_int00)所需的汇编指令。(对于更复杂的程序,可

在vector.asm定义附加的中断矢量,或者,可用3.1节上所说明的DSP/BIOS来自动定义所有的中断矢量)

3. 选择Project→Add Files to Project,在文件类型框中选择*.cmd。选择

hello.cmd并点击Open,hello.cmd包含程序段到存储器的映射。 4. 选择Project→Add Files to Project,进入编译库

文件夹(C:\\ti\\c2800\\cgtools\\lib)。在文件类型框中选择*.o*,*.lib。选择rts.lib并点击Open,

该库文件对目标系统DSP提供运行支持。 5. 点击紧挨着Project、Myhello.mak、Library和

Source旁边的符号+展开Project表,它称之为

Project View。 注:打开Project View

如果看不到Project View,则选择View→Project。如果这时选择过Bookmarks图标,仍看不到Project View,则只须再点击Project View底部的文件图标即可。

6. 注意包含文件还没有在Project View中出现。在工程的创建过程中,

CCS扫描文件间的依赖关系时将自动找出包含文件,因此不必人工地向工程中添加包含文件。在工程建立之后,包含文件自动出现在Project View中。

如果需要从工程中删除文件,则只需在Project View中的相应文件上点击鼠标右键,并从弹出菜单中选择Remove from project即可。 在编译工程文件时,CCS按下述路径顺序搜索文件: ? 包含源文件的目录

? 编译器和汇编器选项的Include Search Path中列出的目录(从左到右)

14

第四章 算法和数据测试

2.3 查看源代码

1. 双击Project View中的文件hello.c,可在窗口的右半部看到源代码。 2. 如想使窗口更大一些,以便能够即时地看到更多的源代码,你可以选择

Option→Font使窗口具有更小的字型。 /* ======== hello.c ======== */

#include #include \#define BUFSIZE 30 struct PARMS str = { 2934, 9432, 213, 9432, &str };

/** ======== main ========**/ void main() {

#ifdef FILEIO int i;

char scanStr[BUFSIZE]; char fileStr[BUFSIZE]; size_t readSize; FILE *fptr; #endif

/* write a string to stdout */

puts(\#ifdef FILEIO /* clear char arrays */

for (i = 0; i < BUFSIZE; i++) {

scanStr[i] = 0 /* deliberate syntax error */ fileStr[i] = 0;

15

第四章 算法和数据测试

}

/* read a string from stdin */ scanf(\

/* open a file on the host and write char array */ fptr = fopen(\fprintf(fptr, \fclose(fptr);

/* open a file on the host and read char array */ fptr = fopen(\fseek(fptr, 0L, SEEK_SET);

readSize = fread(fileStr, sizeof(char), BUFSIZE, fptr); printf(\fclose(fptr); #endif }

当没有定义FILEIO时,采用标准puts()函数显示一条hello world消息,它只是一个简单程序。当定义了FILEIO后(见2.5节),该程序给出一个输入提示,并将输入字符串存放到一个文件中,然后从文件中读出该字符串,并把它输出到标准输出设备上。

16

第四章 算法和数据测试

2.4 编译和运行程序

CCS会自动将你所作的改变保存到工程设置中。在完成上节之后,如果你退出了CCS,则通过重新启动CCS和点击Project→Open,即可返回到你刚才停止工作处。

注:重新设置目标系统DSP

如果第一次能够启动CCS,但接下来得到CCS不能初始化目标系统DSP的出错信息则可选择Debug→Reset DSP菜单项。若还不能解决上述问题,你可能需要运行你的目标板所提供的复位程序。

为了编译和运行程序,要按照以下步骤进行操作: 1. 点击工具栏按钮或选择Project→Rebuild All ,CCS重新编译、

汇编和连接工程中的所有文件,有关此过程的信息显示在窗口底部的信息框中。 2. 选择File→Load Program,选择刚重新编译过的程序adshujucaiji.out(它

应该在c:\\ti\\myprojects\\adshujucaiji文件夹中,除非你把CCS安装在别的地方)并点击Open。CCS把程序加载到目标系统DSP上,并打开Dis_Assembly窗口,该窗口显示反汇编指令。(注意,CCS还会自动打开窗口底部一个 标有Stdout的区域,该区域用以显示程序送往Stdout的输出。)

3. 点击Dis_Assembly窗口中一条汇编指令(点击指令,而不是点击指令

的地址或空白区域)。按F1键。CCS将搜索有关那条指令的帮助信息。这是一种获得关于不熟悉的汇编指令的帮助信息的好方法。 4. 点击工具栏按钮或选择Debug→Run。 注:屏幕尺寸和设置

工具栏有些部分可能被Build窗口隐藏起来,这取决于屏幕尺寸和设置。为了看到整个工具栏,请在Build窗口中点击右键并取消Allow Docking选择。

当运行程序时,可在Stdout窗口中看到hello world消息。

17

第四章 算法和数据测试

2.5 修改程序选项和纠正语法错误

在前一节中,由于没有定义FILEIO,预处理器命令(#ifdef 和#endif)之间的程序没有运行。在本节中,使用CCS设置一个预处理器选项,并找出和纠正语法错误。

1. 选择Project→Options。

2. 从Build Option窗口的Compiler栏的Category列表中选择Symbles。

在Define Symbles框中键入FILEIO并按Tab键。

注意,现在窗口顶部的编译命令包含-d选项,当你重新编译该程序时,程序中#ifdef FILEIO语句后的源代码就包含在内了。(其它选项可以是变化的,这取决于正在使用的DSP板。)

3. 点击OK保存新的选项设置。 4. 点击(Rebuild All)工具栏按钮或选择Project→Rebuild All。无

论何时,只要工程选项改变,就必须重新编译所有文件。

5. 出现一条说明程序含有编译错误的消息,点击Cancel。在Build tab 区

18

第四章 算法和数据测试

域移动滚动条,就可看到一条语法出错信息。

6. 双击描述语法错误位置的红色文字。注意到hello.c源文件是打开的,

光标会落在该行上: fileStr[i] = 0 7. 修改语法错误(缺少分号)。注意,紧挨着编辑窗口题目栏的文件名旁

出现一个星号(*),表明源代码已被修改过。当文件被保存时,星号随之消失。

8. 选择File→Save 或按Ctrl+S可将所作的改变存入hello.c。 9. 点击(Incremental Build)工具栏按钮或选择Project→Build,CCS

重新编译已被更新的文件。

19

第四章 算法和数据测试

2.6 使用断点和观察窗口

当开发和测试程序时,常常需要在程序执行过程中检查变量的值。在本节中,可用断点和观察窗口来观察这些值。程序执行到断点后,还可以使用单步执行命令。

1. 选择File→Reload Program.

2. 双击Project View中的文件hello.c。可以加大窗口,以便能看到更多的源代码。

3. 把光标放到以下行上:

fprintf(fptr, “%S”, scacStr);

4. 点击工具栏按钮或按F9,该行显示为高亮紫红色。(如果愿意

的话,可通过Option→Color改变颜色。)

5. 选择View→Watch Window。CCS窗口的右下角会出现一个独立区域,在程序运行时,该区域将显示被观察变量的值。

6. 在Watch Window区域中点击鼠标右键,从弹出的表中选择Insert New

Expression。

7. 键入表达式*scanStr并点击

OK。

8. 注意局部变量*scanStr被列在

Watch window中,但由于程序当前并未执行到该变量的main()函数,因此没有定义。 9. 选择Debug→Run或按F5。 10. 在相应提示下,键入goodbye

并点击OK。注意,Stdout框以蓝色显示输入的文字。

还应注意,Watch Window中显示出*scanStr的值。

在键入一个输入字符串之后,程序运行并在断点处停止。程序中将要

20

第四章 算法和数据测试

执行的下一行以黄色加亮。

11. 点击(Step Over)工具栏按钮或

按F10以便执行到所调用的函

数fprintf()之后。

12. 用CCS提供的step命令试验: ■ Step Into (F2)

■ Step over (F10) ■ Step Out (Shift F7)

■ Run to Cursor (Ctrl F10)

13. 点击工具栏按钮或按F5运行程序到结束。 21

Code Composer Studio 教程

3 基于DSP的数据采集设计实例

3.1 安装驱动程序

(1)安装仿真器驱动程序

连接接仿真器、DSP开发板,将仿真器经USB接口脸上电脑之后系统提示“使用找到新硬件向导”,选择驱动文件“XDS 510 USB Driver”,完成之后系统提示新硬件可用。如下图所示。

(2)安装仿真器的CCS驱动

找到驱动文件“XDS 510 CCS Driver”,运行,安装到CCS3.3软件所在的文件夹里面,具体如下图所示。

I

Code Composer Studio 教程

3.2 启动CCS前的设置

(1).打开“Setup CCStudio V3.3 ”,在“Available Factory Boards”下选择“F2812 XDS510 Emulator”

(2).在“system configuration”下的“F2812 XDS510 Emulator”右键选择“properties”,对其进项设置,具体设置如下图。

(3). 点击“Save and Quit”完成芯片设置,系统自动启动CCS 3.3操作界面。

II

Code Composer Studio 教程

3.3 创建AD数据采集工程

(1) 选择“Project→New(工程→新建)”,弹出工程建立对话框。

(2) 在Project栏输入文件名adshujucaiji。工作目录是D:\\ccstudio_v3.3\\myprojects\\,其他两项也选默认即可。

(3) 单击完成按钮,将在工程窗口的Project下面创建adshujucaiji工程。

III

Code Composer Studio 教程

3.4 项工程中添加源文件

(1) 将从ti官方网站上下载的源文件复制到 D:\\ccstudio_v3.3\\myprojects\\adshujucaiji文件夹内。

(2)在“projects”下右键点击工程名“adshujucaiji”选择“add File to project…”,将复制到文件夹“adshujucaiji”中的源文件全部加载进来。如下图所示。

3.5 程序的编写

3.5.1 程序编写思路

(1). 一个DSP程序的构成。

一个完整的DSP程序主要由库文件,.c源文件,.h头文件以及.cmd连接命令文件组成。

(2).DSP程序的编写思路

一个DSP程序要完成设想的功能,需要完成系统初始化,所使用的外设的初始化,中断初始化,已经终端服务程序的编写。其中系统,外设初始化只需要对相应的寄存器进行设置即可以完成。中断服务程序根据我们所需要的处理算法进行编写。 (3).现在总结起来DSP2812其实可以分为以下几个部分:时钟(DSP工作的动力)、外设(DSP实现相应的功能都是有对应的外设来实现的)、中断和中断服务程序。只要把这四个部分弄懂了,DSP的使用应该就没多大问题。DSP的不同功能主要有对应的外设实现,实际上只要掌握了一种外设的使用方(寄存器、中断、时钟的设置)其他的都可以用同样的步骤使用。

IV

Code Composer Studio 教程

首先将程序分成:系统初始化、所使用的外设的初始化、三级中断设置、中断服务程序、链接命令文件(.cmd文件)和头文件几个部分。在系统初始化程序中了解系统时钟、外设端口、看门狗的设置方法以及相关寄存器的使用,在外设初始化程序中,对应该外设的使用原理,了解“这个寄存器起什么作用,这样设置起什么作用”,掌握该外设设备(联想到所有的外设)初始化时必须设置的内容有哪些,需要特殊设施的寄存器有哪些。

之后了解外设级、PIE级和CPU级中断初始化、开中断、关中断的设置方法、顺序和原因。中断服务程序完成特殊的数据处理,按照自己的算法编写就可以,但要注意在所有的中断服务程序中都要对三级中断进行相应的设置,以保证中断服务程序能够连续不断地运行下去。在.CMD文件中完成对内部存储器外扩存储器的分配,了解相关指令的作用和使用方法。 3.5.2 程序工作流程

在进行软件设计之前,首先明确系统的工作流程,简单介绍如下: (1)DSP上电,等待采集开始命令。

(2)使用事件管理器EVA的通用定时器周期中断来触发ADC的采集动作。 (3)进行数据的校正和融合处理。

(4)将融合后的数据经eCAN总线传送到上位机。

本系统使用EVA的通用定时器1的周期中断来触发AD的转换,当ADC完成 SEQ1中定义的端口的数据采集转换时,触发中断,进入中断服务程序。DSP F2812的AD为12 位精度,由于各种因素的影响,测量值存在误差,需进行校正。校正完成之后对该次测量获得的两个数值进行联合kalman滤波器数据融合,完成融合操作后将得到的数据存入eCAN总线的发送邮箱,将数据发送到上位机,一次操作完成。之后退出中断程序,等待下一次中断触发信号的到来。本系统就按照怎样的顺序完成真空度的数据采集、校正、融合和传输操作 。

整个软件系统可以分为如下几个部分:系统初始化,用来完成DSP寄存器的设置,各级中断的清零,系统时钟、外设时钟的设置,踢除看门狗、初始化AD、EVA等操作;终端服务程序的设置,用来完成采样结果的移位操作、校正,联合kalman滤波器数据融合以及eCAN总线的数据传输;链接命令文件的编写,由于使用了外扩存储器,为保证程序执行的速度,将程序空间分配到片内存储器,程序执行过程中产生的数据存储到片外存储器中。

V

Code Composer Studio 教程

系统上电系统初始化否检测开始?是通用定时器器1中断?否是AD进行指定端口的数据采集SEQ1中转换完成?否是采样结果校正基于联合kalman滤波器器的数据融合eCAN通信

3.5.3系统初始化 sysctrl() 采样完成是上位机处理否结束(1)系统时钟设置,通过高速时钟预订标寄存器(HISPCP)、低速时钟预订标寄存器(LOSPCP)和锁相环寄存器设置,获得高、第速时钟,使能相关外设时钟。如下图所示

VI

Code Composer Studio 教程

(2)中断初始化

首先关闭全局中断,关闭外设中断,并清除所左右的中断标志位。 DINT; IER = 0x0000; IFR = 0x0000;

其次初始化PIE控制寄存器,由函数InitPiectrl()实现。将所有的PIE级中断标志位和中断使能位清零。并将AD中断所在组对应的中断应答寄存器中的相应位置零。 最后使能PIE向量表,由函数InitPieVectable()实现。 3.5.4 端口设置

数据采集使用同步转换模式,对通道ADCINA0和ADCINB0同时采样8次。所以将这两个端口设置成普通输入输出端口且为输入模式。

? ? ? ? ? ? ? ?

VII

// 关闭总中断 // 关闭外设中断 // 清中断标志

void InitGpio(void) {

EALLOW;

GpioMuxRegs.GPAMUX.bit.PWM3_GPIOA2=0; GpioMuxRegs.GPADIR.bit.GPIOA0=0;

GpioMuxRegs.GPBMUX.bit.PWM7_GPIOB0=0; GpioMuxRegs.GPBDIR.bit.GPIOB0=0;

GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4=1;

Code Composer Studio 教程

? ? ? ? ? ?

GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6=1; GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7=1; GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7=1; GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6=1; EDIS; }

3.5.5 数据采集外设AD的设置

F2812的ADC模块有16个通道,排序器SEQ1和SEQ2可以作为两个独立的8通道模块,也可以级联成一个16通道的模块。AD模块的内部结构如图3.5所示。虽然有两组输入通道和两个排序器,但是ADC模块中只有一个转换器,同一时刻只能对1路输入信号进行转换,当有多路信号需要进行转换时,ADC模块通过前端模拟多路复用器的控制,在同一时刻,只允许1路信号输入到ADC的转换器中。

在这两种工作方式下,AD能够通过对相关寄存器的设置对需要转换的通道进行排序,通过模拟多路转换器每次转换的通道。每个排序器转换完成,将所转换通道的值存储在其各自的转换结果寄存器中。我们可以通过设置排序寄存器,达到对一个通道进行多次转换的目的,这就是所说的过采样算法,对比单次采样转换,能够有效提高结果的精度

AnalogMUXADCINA0多路复用器多路复用器系统控制时钟ADCENCLKS/H-A12位ADC模块S/H-B高速预定标器HSPCLKSYSCLKOUTC28X Result Reg0Result Reg1┊Result Reg7Result Reg8┊Result Reg 150x70A8

┆ADCINA7 ADCINB0

ADCINB7

S/W

EVA GPIO/XINT2_ADCSOC

0x70AF0x70B0┆0x70B7ADC控制寄存器SOC自动排序器SEQ1自动排序器SEQ2SOCS/WEVB2812的ADC可以工作在顺序采样和同步采样两种工作模式。顺序采样也就是按照顺序对每个通道依次进行采样。

而同步采样,是同时采样一对通道,即ADCINA0和ADCINB0同时采样,ADCINA1和ADCINB1同时采样。

VIII

Code Composer Studio 教程

我们使用级联排序器的同时采样模式。此时排序器SEQ1和SEQ2级联成最多16个通道的排序器。

ADC模块只有接收到转换触发信号才可开始转换,如下表所示,我们采用事件管理器A的周期中断触发AD。

SEQ1 软件触发(软件SOC) SEQ2 软件触发(软件SOC) 级联SEQ 软件触发(软件SOC) 事件管理器A(EVA SOC) 事件管理器B(EVB SOC) 事件管理器A(EVA SOC) 事件管理器B(EVB SOC) 外部SOC引脚 外部SOC引脚 2812AD的16个通道是可以通过编程来进行选择在某一时刻究竟是哪一个通道被选通进行采样的。这个功能就需要通过ADC输入通道选择序列控制寄存器ADCCHSELSEQx(x=1,2,3,4)来实现。每一个输入通道选择序列控制寄存器都是16位的,被分成了4个功能位CONVxx,每一个功能位占据寄存器的4位,在AD转换的过程中,当前CONVxx位定义了要进行采样和转换的引脚。

为了能够对端口进行连续不断的采样,通用定时器1产生的AD采集触发信号频率应高于AD采集频率。我们采用的ADCLK为1.875M,每次触发共采集16次,加上采样窗口时间为6个ADCLK,转换频率约为13K。EVA使用低速时钟HISPCP,它的的通用定时器1的时钟为60M,周期为300,为连续增计数模式,它的周期匹配频率为0.2M,能够使ADC连续不断地采集数据。 输入到AD的时钟如下图所示

SYSCLKOUT120MHzPLLCR(8)ADCENCLKHISPCP(0001)HSPCLK60MHzXCLKIN30MHzADCCLK30MHzADCTRL1.CPS=1ADCRTL3.ADCCLKPS=8ADCLK1.875MHz13KHzADCTRL1.ACQ_PS=5

3.5.6 EVA的初始化

使用EVA通用定时器1的周期中断触发信号,EVA使用低速时钟HISPCP,它的的通用定时器1的时钟为60M,周期为300,为连续增计数模式,它的周期匹配频率为0.2M,能够使ADC连续不断地采集数据。 EVA的初始化程序如下

IX

Code Composer Studio 教程

? ? ? ? ? ? ? ? ? ?

void InitEVA(void) {

EALLOW;

EvaRegs.T1CMPR=0x0080;

EvaRegs.T1PR=0x012C; EvaRegs.GPTCONA.bit.T1TOADC=1; EvaRegs.T1CON.all=0x1042; EvaRegs.T1CNT=0x0000; EDIS; }

3.5.7 中断设置

(1)DSP的中断分为外设级、PIE级和CPU级,为了是CPU能够响应有中断出发时间引发的中断,需要将三级中断全部打开。

(2)我们使用的是ADC采集完成中断,当AD模块完成8次同步采集之后触发外设计中断,对应的中断标志位ADCIFR自动置位,如果此时ADC中断使能位ADCIER为1.并且ADC中断所在的中断组对应的中断应答寄存器PIEACK的相应位为0,则将外设级中断传送到PIE级。之后将PIE级虽在组对应的中断标志位置一,检查该组对应的中断使能位是否为1,如果是一,则将该终端传送到CPU级,直后执行对应的中断服务程序。

(3)为使得中断事件发生后CPU能够找到相应的中断服务程序,需要将中断服务程序的地址赋值给触发中断的外设事件在中断矢量列表(pievect)中对应的指针。 中断矢量列表中adc中断对应的指针如下图

? ? ? ?

在本实例中我们通过一下语句实现,其中“ad”使我们自己编写的中断服务程序的名字。 EALLOW;

PieVectTable.ADCINT=&ad; EDIS;

X

Code Composer Studio 教程

(3)为是外设级中断传输到PIE级将ad中断对应的中断使能位置1

(4)DSP所有的96个中断分成了12组,为使得中断程序能有外设级顺利的传输到CPU,需将AD中断所在的第一组的PIE级中断使能位置1。 (5)使能全局中断和全局实时中断。

? ? ? ? ?

具体程序如下:

IER |=M_INT1; //使能CPU的INT1中断 PieCtrlRegs.PIEIER1.bit.INTx6=1; //使能PIE中INIT中的ADCINT中断的中断使能位

EINT; //使能全局中断屏蔽位 ERTM;

3.5.8 循环等待程序

由于ad数据采集需要一定的时间,只有当采集完成之后才能触发中断,执行相应的中断服务程序。需要一个循环等待程序,等待中断时间的发生,当发生中断时间是,跳出循环。

for(;;);

3.5.9 编写相应的中断服务程序

(1)具体的数据处理算法都在中断服务程序中实现。具体算法具体编写,不再叙述。 (2)中断服务程序中需要对AD中断在中断应答寄存器中的相应位进行指令处理。因为在外设级中断向CPU传输的过程中中断应答寄存器自动复位。

(3)为是中断程序能够连续进行下去需要将AD的排序器进行复位,并清除ADcst中的中断标志位。具体程序如下:

? ?

XI

AdcRegs.ADCTRL2.bit.RST_SEQ1=1; AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;

Code Composer Studio 教程

? PieCtrlRegs.PIEACK.all=0x0001; //响应中断后用软件将PIEACK.X清零,已屏蔽该组中其他中断

3.5.10 程序编写编译连接生成输出文件 (1)点击

对程序进行编译连接、修改,直到无错误 。

3.5.11将输出文件通过仿真器输入到DSP中进行试验验证

在“Debug”中选择“.out”文件。将输出文件写入开发板

连接好开发板、仿真器。选择“File”—“Load program”,出现如下图的对话框。

XII

Code Composer Studio 教程

3.5.12进行试验 3.6总结

建立一个DSP工程的步骤

(1).设置“Setup CCStudio”选择合适的工作模式,设置相应参数。

(2). 启动CCS,建立新的工程,把TI官方提供的各种头文件、源文件添加到工程中。

(3). 编写程序

首先将程序分成:系统初始化、所使用的外设的初始化、三级中断设置、中断服务程序、链接命令文件(.cmd文件)和头文件几个部分。在系统初始化程序中了解系统时钟、外设端口、看门狗的设置方法以及相关寄存器的使用,外设级、PIE级和CPU级中断初始化、开中断、关中断的设置方法、顺序和原因。

中断服务程序完成特殊的数据处理,按照自己的算法编写就可以,但要注意在所有的中断服务程序中都要对三级中断进行相应的设置,以保证中断服务程序能够连续不断地运行下去。

在.CMD文件中完成对内部存储器外扩存储器的分配,了解相关指令的作用和使用方法。

(4).编译程序,修改错误,将生成的输出文件烧到DSP里面,进行相应实验。

XIII

本文来源:https://www.bwwdw.com/article/imfw.html

Top