ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:595.16KB ,
资源ID:11607065      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11607065.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(2812初学手册.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

2812初学手册.docx

1、2812初学手册目录: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 准备

2、 4.2 包含DSP281X外设头文件 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 简介

3、 TI针对DSP281x系列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网址下载,安装程序包为sprc

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

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

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

8、fine方法进行了比较。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很重要,关键字v

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

12、Regs变量中的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访问寄存器的代码多得多。例如:

15、 .bit的方法使得代码易读易改,但代码量稍有增加。如果代码长短对程序很重要则可以使用.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或工程项目文件每个例程都包

16、含一个CCS的GEL文件,这个文件自动装载工程项目、编译代码、配置观察窗。同样如不使用GEL文件可以直接装载工程文件。按照以下顺序装载DSP281x CPU-Timer的GEL文件:a 打开CCS:File-Load GELb 浏览CPU Timer 例程目录:DSP281x_examplescpu_timerc 选择并打开Example_281xCpuTimer.gel文件d 从CCS的GEL下拉菜单中选择DSP281x CpuTimerExample- Load_and_Build_Project装载并编译整个工程项目例程。3 查看Example_281xCpuTimer.c原文件中mai

17、n主文件最上面的注释文件Example_281xCpuTimer.c在main程序开始有简短的介绍,包括所有的设定、所需的硬件。4 安装调试程序所需的硬件 安装源文件中指出需备的硬件。DSP281xCPU-Timer 例程只需要硬件处于“Boot to H0”方式。其他的例程可能需要额外的硬件配置,如将模式配置引脚短接或接高、接地。表3列出引导模式的设置,便于参考。对于使用F2812 eZdsp的用户而言,可以选择相应的跳线来选择引到模式。关于281x引导模式更详细的信息可以参看TMS320F28x Boot ROM Reference Guide (SPRU095).、5 装载代码 硬件安装

18、配置完成后,从CCS的GEL下拉菜单选择DSP281x CpuTimerExample- Load_Code将.out文件下载到28器件内,在观察窗输入感兴趣的变量,复位然后执行代码到主程序开始的地方。每次当器件复位时,GEL文件会重新装载输出文件。如果不想这样,可以把GEL删掉,只要选择GEL文件,点击右键选择remove即可。6 执行程序,在观察窗增加变量,检查内存内容7 试验、修改、重新构建例程 当打算对例程进行一些修改时,最好拷贝一份完整的程序来修改或者至少对原始文件作个备份。TI提供的新的例程是以这些基本文件为基础的。 3.2节和3.3节对程序结构和流程有更详细的描述。8从CCS中移

19、除GEL文件或工程项目文件。 移除GEL文件,只要选中文件名点击右键选择remove即可。例程中使用了the DSP281x_headers 目录中的头文件和DSP281x_common目录中的共享文件。只是example目录下的文件针对不同的例子程序也就不尽相同。注意:多数的例程都使用位域的方法来访问寄存器。这样有利于更好的帮助使用如何去使用外设及器件。使用位域方法编程使得繁冗的代码易读易于修改。与.all方法比较只不过会增加些代码量。注意SPRC097文件中的例程文件关掉了编译优化器,如果需要可以重新设定编译环境,打开编译优化器。3.2 例程结构 每个例程都有非常简单的结构。其中包括独立的

20、原代码、共享原代码、头文件和连接命令文件。 3.2.1包含文件 所有的例程#include以下2个头文件。DSP281x_Device.h 这个文件位于DSP281x_headersinclude目录下。它需要使用DSP281x的外设头文件。这个文件包含所需的外设头文件和器件的宏与类型定义。DSP281x_Examples.h此文件定义了例程所需的参数。它不需要使用DSP281X的头文件,但是某些通用源代码要使用。这个文件在DSP281x_commoninclude目录下。3.2.2 源代码每个例程由相对独立的原代码组成,这个代码可以是通用的,也可以是共享的。DSP281x_GlobalVar

21、iableDefs.c使用DSP281x外设头文件的任何一个工程都必须包含这个源文件。在这个文件中,声明了外设寄存器的结构变量和数据段的分配。这个文件位于DSP281x_headerssource目录下。详细例程代码对某个具体的示例,这个文件是是特殊的,它的文件名有前缀Example_281x。Example_281xCpuTimer.c就是示例CPU Timer的具体文件,其它的例子中不使用这个文件。此文件位于DSP281x_examples目录下通用源代码 剩下的源代码文件在示例程序中是共享的。这些文件包含外设通用函数或可利用的实用程序。共享源文件在DSP2812x_sharedsourc

22、e目录下。用户可以在原有工程文件或新的工程文件中选择、合并一些或全部共享源文件。3.2.3 连接命令文件每一个示例都使用两个连接命令文件。这些文件详细的说明了代码和程序段的存储位置。一个连接文件用来将编译产生的段分配到片上存储区,另一个用来分配使用DSP281x外设头文件编程所需的外设寄存器结构体的数据段。 存储区连接分配:连接文件如表4所示,它用来分配片上存储段。这些连接文件在DSP281x_commoncmd目录下。每一个实例将选择以下文件中的一个,具体选择那一个由示例中的存储器决定。表4 存储连接命令文件存储连接命令文件示例目录描述F2812_EzDSP_RAM_ink.cmdDSP28

23、1x_commoncmdEZdsp存储图只分配了SARAM的位置,无Flash,OTP或CSM密码保护位置F2810.cmdDSP281x_commoncmdF2810存储连接命令文件,包含所有的Flash,OTP和CSM密码保护存储位置F2812.cmdDSP281x_commoncmdF2812存储连接命令文件,包含所有的Flash,OTP和CSM密码保护存储位置F2812_Xintfroot.cmdDSP281x_commoncmd来自F812 XINTF zone 7 的bootDSP头文件结构数据段分配:任何一个使用DSP281x头文件外设结构的工程必须包含一个连接命令文件,这个连接

24、命令文件将外设寄存器结构数据段分配到正确的存储位置。在v.058的头文件中,位置分配是包含在存储连接文件中的。为了容许将头文件从源代码中分离出来,分配文件被分成一个单独的文件,如表5所示。表5 DSP281x外设头连接命令文件DSP281x外设头连接命令文件目录描述DSP281x_Headers_BIOS.cmdDSP281x_HeaderscmdLink.cmd分配BIOS工程中的头文件变量。这个文件必须包含在任意一个使用头文件的BIOS的工程中,详见4.2DSP281x_Headers_nonBIOS.cmdDSP281x_HeaderscmdLink.cmd分配BIOS工程中的头文件变量

25、。这个文件必须包含在任意一个使用头文件的nonBIOS的工程中,详见4.23.3 示例程序流程在配置281x器件时,所有的示例程序都和以下推荐的流程相似。表1反应了大致的流程:3.4 DSP281x C/C+头文件和外设例程程序包所包含的例程表6 包含的示例示例描述adc_seqmode_testADC Seq 方式检测.通道A0连续转换,记录在存储器中adc_seq_ovd_tests使用排序ADC检测,超过芯片的C版本相应的特性。adc_soc使用ADCINA3和ADCINA2两通道做ADC转换。中断使能,使用SEQ1,EVA配置产生一个周期的ADC SOC。cpu_timer配置cpu

26、timer0,在每次ISR中断服务程序里工作累加计数一次。ecan_back2backeCAN自检测模式例程。在高速的时候,用eCAN连续的传送数据ev_pwm事件管理器PWM示例。本程序使用EV 定时器产生PWM波形。可以使用示波器来观测这个波形。ev_timer_period事件管理器定时器示例。本程序使用EVA和EVB定时器,在一个周期溢出的时候,触发中断。每次中断服务程序中累加计数。flash将EV定时器例程从SARAM移到Flash。其中包含将程序从SARAM拷贝到Flash的相关步骤。为了更快的执行,也将部分中断服务程序从Flash复制到SARAMgpio_ loopback通用I

27、O口回送检测。本程序中,将8位的GPIO口配置为输出,8位口配置为输入。配置为输出的管脚和输出的管脚形成一个闭环。输出数据从输入管脚中读回。gpio_ toggle使用DATA,SET/CLEAR和TOGGLE寄存器等不同的方法切换所有的IO管脚。可以使用示波器观测这些管脚mcbsp_loopback配置McBSP做为回送检测。使用查询来代替中断mcbsp_loopback_interrupts配置McBSP做为回送检测。使用中断和先进先出寄存器。run_from_xintf本示例说明使用F2812eZdsp开发板如何从XINTF zone 7导入和配置XINTF存储器接口sci_autoba

28、ud外部连接SCI-A和SCI-B,在两个外设之间传送数据。使用SCI的自动波特特性。在不同的波特率下做重复测试sci_loopbackSCI示例代码,使用SCI模块的回送测试模式传送数据。本程序使用位查询,而不是中断。sci_loopback_ interruptsSCI示例代码,使用内部回送测试模式,通过SCI-A传送数据。同时使用中断方法和先进先出寄存器。spi_loopbackSPI示例,使用外部回送检测模式传送数据spi_loopback_interruptsSPI示例,使用外部回送检测模式传送数据。同时使用中断方法和先进先出寄存器。sw_prioritized_interrupts

29、在大多数应用中,可以使用标准中断硬件优先级。本示例说明了如果有需要,可以使用一种中断软件优先级的方法, watchdog说明喂狗和间接喂狗触发中断3.5从Flash执行的例程大部分DSP281x示例属于“H0引导”模式,都是从SARAM开始执行的。下面的示例(DSP281x_exampleFlash)在“flash引导”模式下,程序将从Flash开始执行。这个示例是事件管理定时器的例子,通过以下的改变使它从Flash开始执行。1 改变连接命令文件连接flash从工程文件夹中将F2812_281x_EzDSP_RAM_lnk.cmd移去,添加F2812.cmd或F2810.cmd。F2812.c

30、md和 F2810.cmd在DSP281x_commoncmd目录下。2添加DSP281x_commonsourceDSP281x_CSMPasswords.asm到工程中。这个文件含有密码,此密码将被编程,放在CSM密码位置。建议在开发阶段将此密码设为0xFFFF,这样器件可以很容易打开。详细的信息可以参考TMS320F28x System control 和Interrupts Reference Guide(SPRU078).3.修改代码,拷贝那些从Flash的导入地址到它们在SARAM中的运行地址过程中必须在SARAM中运行的函数。特别的,flash等待状态初始化程序必须在SARAM外

31、执行。在DSP281x的例程中,那些从SARAM执行的函数,通过下面所示的编译 CODE_SECTION #pragma声明,已经被分配在ramfuns区段中。然后,寄存器连接命令文件(如下所示)在ramfuns段中分配flash导入地址和 SARAM的运行地址。象上面的详细说明一样,连接器将特殊符号分配到固定的地址,如下:使用包含示例MemCopy程序或c库的标准mencopy()功能,这些符号能被用来从Flash到SARM拷贝函数.执行从flash到SARAM的拷贝功能,需包含示例MemCopy函数: a. 添加DSP281x_commonsourceDSP281x_MemCopy到工程项目

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1