DSP281X头文件的快速入门(中文版)

更新时间:2024-06-30 05:35:01 阅读量: 综合文库 文档下载

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

C281x C/C++头文件和外设例程的快速入门

闭吕庆 玉林师范学院电子科技创新实践基地

目 录

1. 芯片支持 ................................................................................................................................................................. 2 2. 简介 ......................................................................................................................................................................... 2

2.1 回顾历史 ..................................................................................................................................................... 2 2.2 文件的放置(目录结构) ......................................................................................................................... 2 3. Bit-Field(位-域)结构方法的理解 .................................................................................................................... 3 4. 外设例程项目 ......................................................................................................................................................... 3

4.1 开始 ............................................................................................................................................................. 3

4.1.1 在CCS3.x中开始 ............................................................................................................................... 3 4.2 在CCS V4中开始 ..................................................................................................................................... 5 4.3 例程结构 ..................................................................................................................................................... 6

4.3.1 包含的文件 ..................................................................................................................................... 6 4.3.2 源代码 ............................................................................................................................................. 7 4.3.3 Linker Command Files 连接器命令文件 ................................................................................... 7 4.4 例程程序流程 ............................................................................................................................................. 8 4.5 包含的例程 ............................................................................................................................................... 10 4.6 在Flash中执行例程 ............................................................................................................................... 10 5. 合并头文件到例程代码的步骤 ........................................................................................................................... 12

5.1 开始前的准备 ........................................................................................................................................... 13 5.2 把DSP281x外设头文件包含进来 ........................................................................................................... 13 5.3 包含共享例程代码 ................................................................................................................................... 14 6. 故障解决报告和常见问题回答 ........................................................................................................................... 15

V1.20快速入门教程 德州仪器

1. 芯片支持

本软件包支持281x系列芯片。包括如下:TMS320F2812、TMS320F28112、TMS320F2810、TMS320C2812、TMS320C2811、TMS320C2810、TMS320R2812、TMS320R2811。 文档中TMS320F2812、TMS320F28112、TMS320F2810、TMS320C2812、TMS320C2811、TMS320C2810、TMS320R2812、TMS320R2811相应的简称为F2812、F2811、F2810、C2812、C2811、C2810、R2812、R2811.

2. 简介

DSP281x 外部头文件和SPRC097中的例程减轻了德州仪器‘281x 系列DSP’的C/C++代码编写工作。这些代码可作为学习工具,或者当前用户开发平台的基础。 ? 学习工具

本下载包包含了几个针对281x 开发平台的CCS例程项目。其中的一个平台是数字系列的F2812 USB评估开发板。 这些例程像我们展示了器件的初始化和片上外设的使用所必须的步骤。所提供的例程可复制和修改作为用户平台的一部分,以加快携带有不同外设配置的实验的进程。 这些项目经过简单修改连接器命令文件的存储器分配后,可移植到其他芯片上。 ? 开发平台

外部头文件能够容易的加入到一个新的或者已经存在的项目里,成为它们的一部分,以支持这些平台利用C/C++代码访问片上外设。此外,用户可以从提供的例程里挑选出一些函数作为使用,或者把剩下的删除。

开始前,先了解本文档所提供的信息,如下所示:

? DSP281x C/C++C外部头文件中使用的位-域结构方法的概述 ? 包括的外部例程概述

? 把外部头文件加入到一个新的或者已经存在的项目的步骤 ? 终端故障的解决和常见问题的回答

? 用户从早前发布的V.58转到V1.00或者更新版本的终端移植

最后,本文档不提供C代码编写、CCS使用或者C28x 编译和汇编的指导。假设读者已经拥有一个281x硬件平台,并已经设置和连接到一个安装有CCS软件的主机上。用户应该具有使用CCS从JTAG下载代码和平台基本调试操作的基础。 V1.20版做了一些小的修正和在头文件和例程中安排了一些注释,也增加了几个例程文件夹,DSP280x_examples_ccsv4,带有一些CCS V4支持的例程。

(其他省略)

2.1 回顾历史

2.2 文件的放置(目录结构)

在安装时,C281x C/C++头文件和SPRC097外部例程被分段在一个已经定义好的目录结构里。默认时,源文件被安装在c:\\tidcs\\c28\\DSP281x\\ directory.

2

德州仪器 C281x C/C++头文件和外设例程的快速入门

表1. DSP281x 的主目录结构

描述 基本的安装目录。默认是---\\v120, \\doc 包括早前发布版本历史回顾的说明文档 \\DSP281x_headers 文件被要求与外设头文件合并进一个项目中。 头文件使用的bit-field(位-域)结构,见第3节 把头文件加入到一个新的或者已经存在的项目的论述见第5节 \\DSP281x_examples 基于DSP281x头文件的CCS例程项目 这些例程展示了如何配置281x片上的众多外设。一个例程的使用概述见第4节。 \\DSP281x_examples_ccsv4 编译时带浮点单元的CCS V4版例程项目。这些例程放在同一个\\DSP281x_examples目录下,但它们是为CCS V4版建立的,不能在CCS3.x版上运行。一个这样的例程使用见第4节。 DSP281x_common 被许多DSP281x例程项目共享的共享文件,这些例程说明了如何使用DSP281x头文件方法来完成任务。这些文件的使用是可以选择的,但在新项目里,它们可能很有用。文件的列表见第7节。 上述的DSP281x_headers 和 DSP281x_common目录的源文件被分别放置在子目录中,每个子目录放置一种类型的文件。表2列出了子目录和各个子目录里的文件类型的描述

表2 DSP281x 的子目录结构

子目录 描述 DSP281x_headers\\cmd 分配bit-field(位-域)结构的连接器命令文件,见第3节 DSP281x_headers\\source 把头文件添加到新的或者已经存在的项目时要求的源文件 DSP281x_headers\\include 每个281x片上外设的头文件 DSP281x_common\\cmd 在281x芯片上分配内存的内存命令文件例程 DSP281x_common\\include 被DSP281x外设例程使用的共享头文件 DSP281x_common\\source 被DSP281x外设例程使用的共享源文件 目录 3. Bit-Field(位-域)结构方法的理解

DSP281x头文件和外设例程使用了Bit-Field(位-域)结构方法来映射和访问TI ‘281x 系列 DSPs的外部寄存器。这个技术使用的更多信息,可参考笔记Programming TMS32028xxand 28xxxPeripherals in C/C++ (SPRAA85)。

这个应用笔记探索了使C/C++代码更容易执行的硬件抽象层。

4. 外设例程项目

在DSP281x_examples目录下的C281x C/C++头文件和外设例程(在SPRC097中)中,有几个例程项目使用了DSP281x头文件来配置片上外设。

4.1 开始

4.1.1 在CCS3.x中开始

为了开始,我们需按照以下的步骤来装载DSP281x CPU-Timer 例程。其他例程的设置步骤也相似。 1. 把硬件平台连接到一个按照有CCS软件的主机上。 2. 装载例程的GEL文件(.gel)或者项目文件(.pjt)

3

V1.20快速入门教程 德州仪器

每个例程都包含有一个CCS Gel文件来自动下载项目、编译项目和打开观察窗口。作为选择,项目本身也可以被直接装载,而代替使用包含的GEL文件来装载。 装载CPU-Timer例程的Gel文件步骤如下:

1) 在CCS软件中,点击菜单:File-----Load Gel

2) 浏览CPU Timer例程目录:DSP281x_examples\\cpu_timer 3) 选中Example_281xCpuTimer.gel

4) 点击CCS软件的GEL菜单,选择DSP281x CpuTimerExample-> Load_and_Build_Project 经过以上步骤后,项目将并编译建立和下载。 3. 编辑DSP28_Device.h

编辑include目录下的DSP28_Device.h文件,以使得项目的器件符合实际目标板。默认是2812.

/******************************************************************** * DSP281x_headers\\include\\DSP281x_Device.h

********************************************************************/ #define TARGET 1

//--------------------------------------------------------------------------- // User To Select Target Device: #define DSP28_F2812 TARGET #define DSP28_F2811 0 #define DSP28_F2810 0

4. 编辑DSP281x_Examples.h

编辑DSP281x_Examples.h文件,设定SYSCLKOUT周期(默认为150MHz),设计程序可参考下方程序:

/******************************************************************** * DSP281x_common\\include\\DSP281x_Examples.h

********************************************************************/ ……

#define CPU_RATE 6.667L // for a 150MHz CPU clock speed (SYSCLKOUT) //#define CPU_RATE 7.143L // for a 140MHz CPU clock speed (SYSCLKOUT) //#define CPU_RATE 8.333L // for a 120MHz CPU clock speed (SYSCLKOUT) //#define CPU_RATE 10.000L // for a 100MHz CPU clock speed (SYSCLKOUT) //#define CPU_RATE 13.330L // for a 75MHz CPU clock speed (SYSCLKOUT) //#define CPU_RATE 20.000L // for a 50MHz CPU clock speed (SYSCLKOUT) //#define CPU_RATE 33.333L // for a 30MHz CPU clock speed (SYSCLKOUT) //#define CPU_RATE 41.667L // for a 24MHz CPU clock speed (SYSCLKOUT) //#define CPU_RATE 50.000L // for a 20MHz CPU clock speed (SYSCLKOUT) //#define CPU_RATE 66.667L // for a 15MHz CPU clock speed (SYSCLKOUT)

//#define CPU_RATE 100.000L // for a 10MHz CPU clock speed (SYSCLKOUT)//-----------

5. 检查主要的源文件Example_281xCpuTimer.c顶部的注释

例程的简单描述和所有例程中的假设条件,以及所有的外设要求都列在主源文件顶部的注释上。 6. 完成例程要求的所有硬件的设置

完成主源文件注释指出的所有硬件的设置。DSP281xCPU-Timer例程只要求硬件被设置成“从H0中引导”。其他的例程可能会有额外的硬件设置要求,例如把几个管脚连接在一起,或者把管脚上拉或下拉。表3列出了引导模式管脚的设置,以供参考。

4

德州仪器 C281x C/C++头文件和外设例程的快速入门

GPIOF4 1 0 0 0 0 0 表3 281x引导模式的设置

GPIOF12 GPIOF3 GPIOF2 Mode Boot to flash 0x3F7FF6 X X X Call SPI boot loader 1 X X Call SCI boot loader 0 1 1 Boot to H0 SARAM 0x3F8000 0 1 0 Boot to OTP 0x3D7800 0 0 1 Call parallel boot loader 0 0 0 7. 装载代码

一旦完成所有的硬件配置,点中CCS的GEL菜单,选择DSP281x CpuTimerExample-> Load_Code。这将装载.out文件到28x器件中,感兴趣的变量也被移入观察窗口watch window,器件复位,执行主函数起始处的代码。每次器件复位时,GEL文件都被设置用来装载代码,因此,如果不想要这种操作(复位时装载代码),可在这时把GEL文件删除了。在名字上点击右键,选择删除,即可把GEL文件删除。

8. 运行例程,添加变量到观察窗口上,或者检查存储器的内容。 9. 实验、修改、重建例程。

如果你想修改例程,我们建议把整个要修改的头文件包做一个备份,或者至少首先创建一个原始文件的备份。Ti 公司提供的新例程里,都已经假设用户已经拥有了基本的文件。 更多的例程结构和流程细节见4.2、4.3节。

10. 完成上述步骤后,从CCS中删除项目和例程里的GEl文件。

在它的名字上点击右键,选择删除,即可删除GEl文件。

例程使用DSP2802x_headers目录里的头文件和共享DSP2802x_common目录里的源文件。只是,特定例程里的特有文件放置在example目录下。

注意:下载包里的大多数例程代码使用bit- field结构来访问寄存器。这有利于用户学习如何使用外设和器件。使用bit- field有利于代码的生成,使得用户更加容易阅读和修改。这种方法相比.all方式,将导致一些头部代码。此外,例程项目关闭了优化编译。如果想打开优化器,用户可以改变这个编译设置。

4.2 在CCS V4中开始

为了开始,下列步骤用来装载32位的CPU-Timer例程。其他例程是设置步骤类似。 1. 2. 3. 4. 5. 6.

7. 建立和装载代码

一旦所有硬件配置完成后,在CCS V4版本中,进入菜单Target->Debug Active Project。

在CCS V4里,这将打开Debug框图,建立项目,装载.out文件进28x芯片中,复位,到主函数的起始处执行代码。默认情况下,在CCS V4里,每次当Debug Active Project被选中时,代码都自动的被建立,而.out文件被装载入28x器件中。

8. 运行例程,添加变量到观察窗口上,或者检查存储器的内容。

在代码顶部的扇区注释里,这里应该有一个变量观察的表格。通过选中和右键,可以把这些变量添加到观察窗口上。然后选择‘添加观察表达式’。现在,我们感兴趣的变量都已经被添加到观察窗口上

5

德州仪器 C281x C/C++头文件和外设例程的快速入门

面的改变,可使它在Flash里执行。

1. 更改连接器命令文件,使代码连接到Flash。

从项目中删除F2812_EzDSP_RAM_lnk.cmd文件,并添加F2812.cmd或F2810.cmd. F2812.cmd和F2810.cmd都存放在DSP281x_common\\cmd\\目录下。 2. 添加DSP281x_common\\source\\DSP281x_CSMPasswords.asm到项目 文件包含了密码,这个密码将被编成入CMS的密码位置。在开发阶段,推荐把密码设置成0xFFFF,以使得器件容易解码。更多关于CSM的信息见TMS320F28x System Control and Interrupts Reference Guide (SPRU078)。

3. 修改代码来复制(从Flash的装载地址到SARAM的运行地址)函数到SARAM中执行。

尤其是,Flash的等待状态初始化程序必须在SARAM中执行。在DSP281x例程里,将在SARAM中执行的函数必须通过编译器的CODE_SECTION分配到ramfuncs扇区,#pragma的语句 如下例子所示:

/******************************************************************** * DSP281x_common\\source\\DSP281x_SysCtrl.c

********************************************************************/ #pragma CODE_SECTION(InitFlash, \

ramfuncs扇区被存储器连接器命令文件分配给一个在Flash的装载地址和一个在SARAM里的运行地址,如下所示:

/******************************************************************** * DSP281x_common\\include\\F2812.cmd

********************************************************************/ SECTIONS {

ramfuncs : LOAD = FLASHD, RUN = RAML0,

LOAD_START(_RamfuncsLoadStart), LOAD_END(_RamfuncsLoadEnd), RUN_START(_RamfuncsRunStart), PAGE = 0

}

连接器将为上面特殊的地址分配一个特有的标号。如下所示:

地址 Load start Load end Run start 标号 RamfuncsLoadStart RamfuncsLoadEnd RamfuncsRunStart 在使用MemCopy程序或者C库里的标准memcopy()函数来从Flash复制函数到SARAM时,这些变化都将被用到。

使用MemCopy函数例程来完成Flash到SARAM的复制。

A. 添加DSP281x_common\\source\\DSP281x_MemCopy.c文件到项目。

B. 添加下面的函数原型到例程源代码。你可以在DSP281x_Examples.h 文件了进行。

/******************************************************************** * DSP281x_common\\include\\DSP281x_Examples.h

********************************************************************/

MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);

11

V1.20快速入门教程 德州仪器

C. 添加下列的变量声明到你的源代码里,来告诉编译器这些变量的存在。连接器命令文件将为每

个变量分配地址,如步骤3所示的连接器命令文件特有的。对于DSP281x例程,这些已经在DSP281x_Examples.h.里。

/******************************************************************** * DSP281x_common\\include\\DSP281x_Examples.h

********************************************************************/ extern Uint16 RamfuncsLoadStart; extern Uint16 RamfuncsLoadEnd;

extern Uint16 RamfuncsRunStart;

D. 在每个需要从Flash复制到SARAM的扇区里,修改代码来调用MemCopy函数。

/******************************************************************** * DSP281x_examples\\Flash source file

********************************************************************/

MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);

4. 修改代码来调用Flash初始化例程。

这个函数将初始化Flash的等待状态,并使能Flash的管道模式。

/******************************************************************** * DSP281x peripheral example .c file

********************************************************************/

InitFlash();

5. 设置跳线,使其满足‘从flash中引导’的模式。 每种引导模式要求的跳线设置如下表所示:

表8 281x引导模式的设置 GPIOF4 GPIOF12 GPIOF3 GPIOF2 Mode 1 0 0 0 0 0 X 1 0 0 0 0 X X 1 1 0 0 X X 1 0 1 0 Boot to flash 0x3F7FF6 Call SPI boot loader Call SCI boot loader Boot to H0 SARAM 0x3F8000 Boot to OTP 0x3D7800 Call parallel boot loader 对使用数字序列F2812评估目标板的用户,请参考评估目标板的用户使用指导,正确的跳线来使用选择的引导模式。

更多有关281x引导模式的信息,参考TMS320F28x Boot ROM Reference Guide (SPRU095)。 6. 建立代码,并编程器件。

在CCS V4中,当代码调试时被载入器件中,它自动编程到flash存储器上。

这也可以从数字序列网站上使用SDFlash来完成。此外,可用C2000 on-chip Flash programmer plug-in在CCS V3.x完成下载。

7. 在CCS V3版本中,调试,下载项目进CCS,可用File->Load Symbols->Load Symbols Only。

当工作在调试环境时,只装载标号信息和有用,因为这时调试器不能或者不需要像在ROM或者Flash一样装载目标代码。

5. 合并头文件到例程代码的步骤

以下的步骤用来合并外设头文件和例程代码到你拥有的项目里。如果你已经拥有一个使用V.58头文件的项目,也可参考第7节的移动小报告。

12

德州仪器 C281x C/C++头文件和外设例程的快速入门

5.1 开始前的准备

1. 装载和逐步安排整个例程项目

装载和逐步安排一个例程项目,使得我们熟悉头文件和例程代码。见第4节。 2. 创建一个你想使用的源文件的备份。

– DSP281x_headers: 代码被要求合并头文件到你的项目中 – DSP281x_common: 大部分被例程项目共享的源代码

– DSP281x_examples: 使用头文件和共享代码的例程项目。

5.2 把DSP281x外设头文件包含进来

把DSP281x外设头文件包含进你的项目,将使得你在你的代码中使用bit-field(位-域)结构的方法来访问DSP上的外设。为了合并头文件到一个新的或者已经存在的项目,可遵照如下步骤完成:

1. #include “DSP281x_Device.h”在你的源文件中

这包含的文件将依次包含所有的外设特有的头文件和使用位-域结构方法访问外设要求定义的变量。

/******************************************************************** * User’s source file

********************************************************************/ #include “DSP281x_Device.h”

2. 编辑DSP281x_Device.h文件,选择你建立的目标:

在下面的例子里,文件被配置来对F2812器件建立 。

/******************************************************************** * DSP281x_headers\\include\\DSP281x_Device.h

********************************************************************/ #define TARGET 1

#define DSP28_F2812 TARGET #define DSP28_F2811 0 #define DSP28_F2810 0

3. 添加DSP281x_GlobalVariableDefs.c源文件到项目中

文件可在DSP281x_headers\\source\\目录下找到: - 被用来访问外设寄存器的变量的描述

- 数据扇区的#pragma分配,连接器用来放置变量到存储器中的合适位置。 4. 添加合适的DSP281x连接器命令头文件到项目

如第3节所述,当使用DSP281x头文件的方式时,外设寄存器结构的数据扇区被分配到连接器定位的外设寄存器存储空间上。

为了在你的项目中完成存储器的分配,DSP281x_headers\\cmd\\目录下的其中一个连接器命令文件必须被包含到你的项目中。

- 对non-DSP/BIOS项目: DSP281x_Headers_nonBIOS.cmd - 对DSP/BIOS项目: DSP281x_Headers_BIOS.cmd

添加连接器头文件到项目的方法,取决于所使用的CCS版本。

? CCS V2.2及其早期版本 省略

? CCS V3.x

a) 打开菜单:Project->Build Options b) 选择Linker tab,然后选择Basic.

13

V1.20快速入门教程 德州仪器

c) 在库寻找路径,添加系统中DSP281x_headers\\cmd的目录路径。 ? CCS V4

省略

5. 添加DSP281x头文件的目录路径到你的项目中

? CCS V3.x

指定头文件所在位置为目录: a) 打开菜单:Project->Build Options

b) 选择Compiler选项卡 c) 选择pre-processor. d) 在Include Search Path,添加系统中DSP281x_headers\\include所在位置的目录路径。 ? CCS V4.x 省略

6. 对build options的额外建议:

下面是增加的compiler and linker options。这些选项可通过Project->Build Options菜单来设置。 -ml 选择Advanced,检查-ml

在大存储器模式下建立。这个设置可使得数据扇区可定位于28x器件的4M存储器的任何位置上。

-pdr 选择Diagnostics,检查-pdr。

假设不是很严重的警告,编译器使用一个警告来说明代码是合法但有疑问的。在很多情况下,被-pdr假设的这些警告能够警惕你,代码可能在后面引起问题。 - Linker Tab

-w 选择高级,检查-w

关于输出扇区的警告。如果在你的代码中存在任何未分配的存储器扇区,这个选项将提醒你。默认时,连接器将尝试放置未分配扇区的代码和数据到一个合法的存储器空间中,而不向用户提醒。然后,当扇区被放置在一个不希望的空间时,这可能引起问题。

5.3 包含共享例程代码

在你的项目里包含共用源代码,将允许你促使已经写好的针对器件的代码的改变。履行如下所示的步骤,可合并共享源代码到一个新的或者已经存在的项目上。 1. 在你的源文件上 #include “DSP281x_Examples.h”

这个包含文件将包含例程代码使用的共用的定义和描述 。

/******************************************************************** * User’s source file

********************************************************************/ #include “DSP281x_Examples.h”

2. 添加到达example include文件的目录路径到你的项目上。

CCS 3.x

指定头文件所在位置为目录:

e) 打开菜单:Project->Build Options

14

德州仪器 C281x C/C++头文件和外设例程的快速入门

f) 选择Compiler选项卡 g) 选择pre-processor. h) 在Include Search Path,添加系统中DSP281x__common\\include所在位置的目录路径。 目录间使用分号隔开。

包含项目included目录路径的例子如下所示:

..\\..\\DSP281x_headers\\include;..\\..\\DSP281x_common\\include ? CCS V4.x 省略

6. 故障解决报告和常见问题回答

15

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

Top