DSP281xCC++头.doc

上传人:桔**** 文档编号:542954741 上传时间:2024-02-20 格式:DOC 页数:43 大小:808.51KB
返回 下载 相关 举报
DSP281xCC++头.doc_第1页
第1页 / 共43页
DSP281xCC++头.doc_第2页
第2页 / 共43页
DSP281xCC++头.doc_第3页
第3页 / 共43页
DSP281xCC++头.doc_第4页
第4页 / 共43页
DSP281xCC++头.doc_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《DSP281xCC++头.doc》由会员分享,可在线阅读,更多相关《DSP281xCC++头.doc(43页珍藏版)》请在金锄头文库上搜索。

1、目录:1 简介 1.1 DSP281x C/C+头文件和外设例程程序包安装1.2 目录结构2 外设位域结构编程方法 2.1 传统#define 方法 2.2 位域和结构方法2.2.1 外设寄存器结构 2.3 增加位域2.3.1 使用Bits-Fields编程时的Read-Modify-Write 考虑2.3.2 使用Bits-Fields编程时的代码大小考虑3 外设范例 3.1 开始 3.2 例程结构3.2.1 包含文件3.2.2 源代码3.2.3 连接命令文件 3.3 例子编程流程 3.4 包含的例子 3.5 从FLASH开始执行例子4 逐步使用头文件和范例代码 4.1 准备 4.2 包含D

2、SP281X外设头文件 4.3 包含通用范例代码5 常见问题和处理 5.1 read-modify-wriye的影响5.1.1 多标志位寄存器写1 清零5.1.2 Volatile Bits 寄存器6 版本变化7 包含内容 7.1 支持DSP281X的头文件 7.1.1 DSP281X的头文件主函数 7.1.2 DSP281X的头文件外设位域和寄存器结构定义文件 7.1.3 CCS的 .gel 文件 7.1.4 变量名和数据段7.2 通用范例代码 7.2.1 支持的外设中断扩展模块 7.2.2 特殊外设文件 7.2.3 有用函数源文件 7.2.4 范例连接 .cmd文件1 简介 TI针对DSP

3、281x系列DSP芯片使用通用的C/C+语言编写了外设头文件和范例程序。这些代码可以作为应用的工具或根据使用者的需要而作为开发平台的基础。传统的编程方法需要程序员自行编写寄存器的H文件和所需的片内外设的初始化、配置文件,与传统的编程方法比较,基于C281x C/C+的头文件提供了软件开发的程序框架,其中包含有寄存器结构定义文件、外设头文件和器件的宏与类型定义等系统所需的各种文件。通过在那新的或原有的工程文件使用外设头文件,开发者可很容易的使用C或C+语言来控制片上外设。除此之外,程序员可以改动工程中需要用到的外设和主控制程序,还可以从提供的范例代码中挑选有用的函数,丢弃那些不需要的函数。这样程

4、序编写简便、结构清晰、易于修改和维护,同时由于框架不需做太大的变动,程序员可以将精力集中于算法的研究,从而加速项目或产品的研发进度。注意: 本章没有提供使用CCS来编写C或连接或汇编代码的向导。前提是用户已经有了281x的硬件平台且通过计算机连接到CCS软件。使用者应该了解怎么使用CCS通过JTAG下载程序并能进行基本的DEBUG操作。1.1 DSP281x C/C+头文件和外设例程程序包安装在使用DSP281x C/C+头文件前,计算机中必须安装有CCS FOR 2000,然后必须安装DSP281x C/C+头文件和外设例程程序包,此文件可在TI网址下载,安装程序包为sprc097.rar。

5、解压缩后直接点击安装,显示如下画面;按提示继续操作,选择相应目录点击Next安装完成。在ticdsc28dsp281xv100doc目录下有相应帮助说明。1.2目录结构安装后,可以看到C281x C/C+头文件和外设例程清晰的目录结构。目录结构当前的版本为V1.00,从结构图可以看出C/C+头文件、外设例程和共享源代码分别单独存放。这种文件分类方法使查找文件方便,易于使用者快捷的将这些文件融合到新的或原来的工程文件中。 表1 DSP281x 主目录结构目录默认安装路径。doc文档(包含版本更新信息)DSP281x_headers合并外设头文件到新工程文件所需的文件。头文件的bit-field结

6、构方法的描述请见第3节如何将外设头文件添加到新的或已有工程文件请见第4节DSP281x_examples基于DSP281x 头文件的CCS编译的程序代码这些例程说明了281x片上外设的配置关于这些例程的综述请见第3节DSP281x_common通过在DSP_281X外设程序中使用共享源文件来说明使用DSP_281X外设头文件来完成各种任务。如对新的工程文件有帮助,可以随意使用这些文件。第6节给出了这些文件的列表。DSP281x_headers和DSP281x_common目录下的源文件根据文件类型被进一步分为各个子目录。表2列出了这些子目录及其文件的类型。子目录描述DSP281x_header

7、scmd分配位域结构的连接命令文件,详见第2节DSP281x_headerssource需要并入新的或原有的项目文件的头文件的源文件DSP281x_headersinclude281x片上外设的头文件子目录描述DSP281x_commoncmd281x的存储器命令范例文件DSP281x_ common source281x外设例程通用 .h 文件DSP281x_ common include281x外设例程通用 .c 文件2 外设位域结构编程方法 DSP281x头文件和外设例程使用bit-field 结构方法来映射和访问基于281x的外设寄存器。本节介绍这种方法并与传统的#define方法进行

8、了比较。2.1 传统#define 方法 传统使用C语言访问寄存器的方法是通过使用#define宏来创建每个寄存器的地址标志。例如:这种#define的定义方法可以重复来定义每个外设的每个寄存器。即使是的几个同类外设,例如SCI-A SCI-B,每个寄存器都可以根据其地址被独立的分开。传统的#define方法的不足主要有以下几条: 访问寄存器的每一位困难;不能在CCS的watch window看到寄存器的位变化;不能利用由CCS自动完成的代码向导的优势;对于相同外设,头文件的开发者无法利用代码重用的优势。2.2 位域和结构方法 位域结构的编程方法使用C语言将同一类外设的所有寄存器规为一组。然后

9、连接器将每个C语言编写的外设寄存器结构体映射为存储器空间。这种映射允许编译器使用CPU的DP指针直接访问外设寄存器。除此之外,许多寄存器的位域也被定义了,这样编译器就可以直接读或操作寄存器内的单独位。2.2.1 外设寄存器结构 2.1节中使用#define方法定义了CPU Timer 0寄存器。本节同样定义CPU Timer 0寄存器,但是使用C语言结构体将CPU Timer 寄存器统一定义。连接器将在内存中映射CPU Timer 0的寄存器结构体。注意以下几点:寄存器名字出现顺序必须与其在内存中分配的顺序相一致。内存中保留的空间,在结构体中也用保留变量(rsvd1 rsvd2)表示,除非占用

10、保留空间,否则这些保留结构体成员不会被使用。 Uint16 Uint32分别表示无符号 16-bit , 32-bit。在28x系列中,有unsigned int 和unsigned long两种类型。这主要是操作方便考虑,其相应的类型定义可以在DSP281x_Device.h中找到。 寄存器文件结构体定义用来声明一个访问寄存器的变量。芯片的每个外设都需要这样定义。多个同类外设使用同样的结构体定义。例如,在某个器件有三个CPU Timer,则可以被定义为三个 volatile struct CPUTIMER_REGS变量,如下: 声明变量时关键字volatile很重要,关键字volatile将

11、告诉编译器变量的内容能被硬件改变,这样编译器就不会优化使用volatile定义的变量。 编译器使用DATA_SECTION 宏将每个外设结构体的相应变量分配到数据段。下面的例子,变量CpuTimer0Regs被分配到CpuTimer0RegsFile数据段。数据段再次为器件的每个外设寄存器结构体变量分配地址空间。每个结构体被分到其自己的数据段后,连接器直接映射每个数据段到内存映射寄存器,如下所示:通过将变量直接映射到相同的外设寄存器内存地址空间,开发者可以使用C语言访问所需的变量成员来访问寄存器。如想写CPU-Timer 0 TCR 寄存器,则程序员不得不访问CpuTimer0Regs变量中的

12、TCR成员。2.3 增加某一位 实际中可能要经常直接访问寄存器的中的某位。C281x C/C+ 头文件和外设例程 中使用位域结构编程方法对许多片上寄存器的位进行了定义。例如,可以对每个CPU-Timer寄存器的每个位定义。CPU-Timer Control寄存器的位定义如下: 使用统一体声明寄存器的优点就是既可以使寄存器以位域结构体被访问,又可以使其被当作一个16位或32位的变量整体被访问。例如,timer control 寄存器的统一体定义如下:一旦每个寄存器的位域和统一体定义被确立,则CPU-Timer 寄存器结构体则能以统一体的定义方式被访问。这样在C语言代码中,就可以用位域或单独量来操

13、作CpuTimer 寄存器了。位域结构方法具有以下的一些优点: 使用者不需要定义标志就可以操作寄存器的位; 在CCS的watch window可以直接查看寄存器文件和位; 当使用CCS时,编辑器将会自动弹出你所要输入的结构/位成分提示列表;这种自动的提示使编写代码变得很容易,从而省去了查找寄存器和位名字文档的麻烦。2.3.1 使用位域编程时的Read-Modify-Write考虑 当对寄存器内的某一位进行写操作时,硬件将会产生一次read-modify-write操作,就是说,寄存器的内容被读出,其中的一位被修改,然后整个寄存器内容再被写回。对于28x器件这些操作在一个时钟周期即可完成。 当寄

14、存器内容被写回时,寄存器内其他位将会以原值写回。由于一些寄存器不推荐使用位域方法访问,所以没有统一体定义。 这些例外的寄存器是那些对查询(读)某位有益的寄存器,包括: 当写1时即清除某位,如的事件管理标志寄存器; 无论何时访问都需要以一定的方式写的寄存器,如看门狗控制寄存器。 那些没有位或统一体定义的寄存器不能以 .bit或.all访问,如下:2.3.2使用位域编程方法时的代码量考虑使用位域定义访问寄存器使得代码易读、易修改、易维护。同时这种方法对访问或查询寄存器的某一位也非常有效。然而如果多次访问某一寄存器,每次使用.bit将会比使用一次.all访问寄存器的代码多得多。例如: .bit的方法

15、使得代码易读易改,但代码量稍有增加。如果代码长短对程序很重要则可以使用.all结构方法一次写整个寄存器。3 外设实例 在C281x C/C+ Header Files and Peripheral Examples的DSP281x_examples目录下有几个工程项目例程,这些例程使用DSP281x V1.00头文件配置片上外设。3.4节给出了例程的清单。3.1 入门 按以下步骤装载the DSP281x CPU-Timer例程作为开始。其他例子的调试步骤大同小异。1.使用F2812 eZdsp或其他的硬件平台,在同CCS相连接。2. 装载例程的GEL或工程项目文件每个例程都包含一个CCS的GEL文件,这个文件自动装载工

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号