1628DSP04软件开发过程_第1页
1628DSP04软件开发过程_第2页
1628DSP04软件开发过程_第3页
1628DSP04软件开发过程_第4页
1628DSP04软件开发过程_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4讲

281x软件开发过程编程语言选择软件开发流程281x源程序的编写C语言对DSP寄存器的操作CCS开发环境简介1直接与硬件打交道,执行效率最高,但可移植性差。C编译器与C++编译器相比具有更高的编译效率,随着C编译器的发展,利用C编译器和C语言源文件所生成的目标代码,效率已经十分接近汇编语言程序。4.1编程语言C语言汇编语言在大多数应用场合,推荐使用C语言开发DSP程序。24.2软件开发流程DSP系统软件开发流程图

3允许用户将一组文件集中起来归入一个归档文件,该文件称作库。汇编程序支持宏语言,这个功能能让你编造自己的“指令”。接收C语言源代码并编译成相应的汇编语言的源代码。4.2软件开发流程存档器宏语言C编译器4将目标文件连接起来组成一个可执行的目标程序模块:将段分配到目标系统中已配置的存储器;重新定位符号和段,并给它们分配最后的地址;解析在输入文件之间未定义的外部引用。汇编器(assembler)把汇编语言源文件翻译成机器语言目标文件。该机器语言是基于公用目标文件格式(COFF)。COFF的最小单位叫做段(section)。4.2软件开发流程链接器汇编器5交叉引用列表器(cross-referencelister)是调试工具之一。它的输入是连接后的目标文件,产生一个交叉引用列表作为输出。该列表文件显示符号、它们的定义以及它们在连接的源文件中的引用。

绝对列表器(absolutelister)是一个调试工具,它将连接后的目标文件作为输入并创建.abs类型的输出文件。.abs文件产生目标代码绝对地址的列表。4.2软件开发流程交叉引用列表器绝对列表器6大多数的EPROM编程器不能接收COFF目标文件作为输入,利用十六进制转换应用程序将COFF目标文件转换为标准的ASCII码十六进制格式。C程序的一些任务(如字符串操作,以及三角函数)并不是C语言本身的一部分,通过运行时间支持函数用来执行这些任务。TMS320C28xx包含下列库:

如rts2800.lib为C/C++运行支持库;而rts2800_ml.libC/C++则为大内存模式运行支持库。4.2软件开发流程16进制转换应用程序运行时间支持函数74.3程序的编写1)源文件C语言文件或者汇编语言文件,后缀为.c或者.asm,实现DSP要完成的功能2)头文件,后缀为.h

定义寄存器映射地址、用户用到的常量和自定义的寄存器3)命令文件,后缀为.cmd

对程序和数据存储器空间进行分配

3种基本文件8序号头文件名(.h)主要内容1DSP28_Adc.h模数转换(ADC)寄存器的相关定义2DSP28_CpuTimers.h32位CPU定时器寄存器的相关定义3DSP28_DefaultISR.hF2812默认中断服务程序的定义4DSP28_DevEmu.hF2812硬件仿真寄存器的相关定义5DSP28_Device.h包含所有的头文件、目标CPU类型的选择6DSP28_Ecan.h增强型CAN寄存器的相关定义7DSP28_Ev.h事件管理器(EV)寄存器的定义8DSP28_GlobalPrototypes.h全局函数的声明9DSP28_Gpio.h通用输入输出(Gpio)寄存器相关定义10DSP28_McBsp.h多通道缓冲串行口(McBsp)寄存器相关定义11DSP28_PieCtrl.hPIE控制寄存器的相关定义12DSP28_PieVect.hPIE中断向量表的定义13DSP28_Sci.h串行通信接口(SCI)寄存器的相关定义14DSP28_Spi.h串行外围设备接口(SPI)寄存器的相关定义15DSP28_SysCtrl.h系统控制寄存器的相关定义16DSP28_Xintf.h外部接口寄存器的相关定义17DSP28_XIntrupt.h外部中断寄存器的相关定义9序号源文件名(.c)主要内容1DSP28_Adc.cAD初始化函数2DSP28_CpuTimers.cCPU定时器初始化函数3DSP28_ECan.c增强型Can初始化函数4DSP28_Ev.c事件管理器Ev初始化函数5DSP28_Gpio.c通用I/O模块初始化函数6DSP28_Mcbsp.c多通道缓冲串行口初始化函数7DSP28_Sci.c串行通信接口初始化函数8DSP28_Spi.c串行外围接口初始化函数9DSP28_SysCtrl.c系统控制模块初始化函数10DSP28_Xintf.c外部接口初始化函数11DSP28_XIntrupt外部中断初始化函数12DSP28_InitPeripherals.c包含了其他的外设初始化函数13DSP28_PieCtrl.cPIE控制模块初始化函数14DSP28_PieVect.c对PIE中断向量进行初始化15DSP28_DefaultIsr.c包含了F2812所有外设中断函数16DSP28_GlobalVariableDefs.c定义了F2812的全局变量和数据段程序10连接命令文件实现对程序存储器空间和数据存储器空间的分配,常用伪指令为Memory和Sections伪指令。Memory:用来标示实际存在目标系统中且可被使用的存储器范围,每个存储器范围具有名字,起始地址和长度。Sections:描述输入段怎样被组合到输出段内;在可执行程序内定义输出段;规定在存储器内何处放置输出段;允许重命名输出段。连接命令文件.cmd4.3程序的编写11PlacingSectionsinMemory.ebss.cinit.textMemoryM0SARAM(0x400)0x0000000x3D80000x000400M1SARAM(0x400)FLASH(0x20000)Sections.stack4.3程序的编写12Memory伪指令的一般语法MEMORY{PAGE0:namel[(attr)]:origin=constant,length=constant;PAGEn:namen[(attr)]:origin=constant,length=constant;}attr

规定与已命名范围有关的1~4个属性。

R 表示存储器可以读出;

W 表示存储器可以写入;

X 表示存储器含有可执行代码;

I 表示存储器可以初始化。origin

表示存储器范围的起始地址。length

表示存储器范围的长度。4.3程序的编写13SECTIONS{ name:[property,property,property,…] name:[property,property,property,…] name:[property,property,property,…]}以name(名字)开始的段的规格说明定义了一个输出段。段可能具有的特性:(1)装载位置:规定段将被装载在存储器内何处;(2)运行位置:定义段将在存储器内何处运行;(3)输入段:定义组成输出段的输入段;(4)段类型:定义特定段类型的标志;(5)填充值:定义用于填充未初始化空位的数值。SECTIONS伪指令的一般语法4.3程序的编写14MEMORY{PAGE0:/*ProgramSpace*/ FLASH:org=0x3D8000,len=0x20000PAGE1:/*DataSpace*/ M0SARAM:org=0x000000,len=0x400

}SECTIONS{ .text: > FLASH PAGE0 .stack: > M1SARAM PAGE1}4.3程序的编写连接命令文件(.cmd)154.4C语言对DSP寄存器的操作寄存器变量的定义方式struct位域结构名{类型说明符位域名1:位域长度类型说明符位域名2:位域长度…类型说明符位域名n:位域长度};例:structbs

//定义位域bs{inta:8;intb:2;intc:6;};“位域”数据结构16structSCICCR_BITS{Uint16SCICHAR:3;

//2:0字符长度控制位

Uint16ADDRIDLE_MODE:1;

//3多处理器模式控制位

Uint16LOOPBKENA:1;//4回送测试模式使能位

Uint16PARITYENA:1;//5极性使能位

Uint16PARITY:1;//6奇/偶极性选择位

Uint16STOPBITS:1;//7停止位个数

Uint16rsvd1:8;//15:8保留};structSCICCR_BITSbit;bit.SCICHAR=7;//SCI字符长度控制位为8位4.4C语言对DSP寄存器的操作17声明共同体unionSCICCR_REG{Uint16all;//可实现对寄存器整体操作

structSCICCR_BITSbit;

//可实现位操作};

unionSCICCR_REGSCICCR;//定义并使用SCICCR.all=0x007F; //整体操作SCICCR.bit.SCICHAR=5;//位操作4.4C语言对DSP寄存器的操作18创建结构体文件structSCI_REGS{unionSCICCR_REGSCICCR;

//通信控制寄存器

unionSCICTL1_REGSCICTL1;

//控制寄存器1Uint16SCIHBAUD;

//波特率寄存器(高字节)Uint16SCILBAUD;

//波特率寄存器(低字节)unionSCICTL2_REGSCICTL2;

//控制寄存器2unionSCIRXST_REGSCIRXST;

//接收状态寄存器

Uint16SCIRXEMU;

//接收仿真缓冲寄存器

unionSCIRXBUF_REGSCIRXBUF;

//接收数据寄存器

Uint16rsvd1;

//保留

Uint16SCITXBUF;

//发送数据缓冲寄存器

unionSCIFFTX_REGSCIFFTX;

//FIFO发送寄存器

unionSCIFFRX_REGSCIFFRX;

//FIFO接收寄存器

unionSCIFFCT_REGSCIFFCT;

//FIFO控制寄存器

Uint16rsvd2;

//保留

Uint16rsvd3;

//保留

unionSCIPRI_REGSCIPRI;

//FIFO优先级控制寄存器};externvolatilestructSCI_REGSSciaRegs;externvolatilestructSCI_REGSScibRegs;19例

对SCICCR按位进行操作SciaRegs.SCICCR.bit.STOPBITS=0;//1位停止位

SciaRegs.SCICCR.bit.PARITYENA=0;

//禁止极性功能

SciaRegs.SCICCR.bit.LOOPBKENA=0;//禁止回送测试模式功能

SciaRegs.SCICCR.bit.ADDRIDLE_MODE=0;//空闲线模式

SciaRegs.SCICCR.bit.SCICHAR=7;

//8位数据位SciaRegs.SCICCR.all=0x0007;例

对SCICCR整体进行操作SciaRegs.SCIHBAUD=0;//Unit16类型,直接给寄存器整体赋值SciaRegs.SCILBAUD=0xF3;4.4C语言对DSP寄存器的操作20使用DATA_SECTION方法将寄存器文件分配到数据空间将数据段映射到寄存器对应的存储空间#pragmaDATA_SECTION(SciaRegs,"SciaRegsFile");volatilestructSCI_REGSSciaRegs;#pragmaDATA_SECTION(ScibRegs,"ScibRegsFile");volatilestructSCI_REGSScibRegs;4.4C语言对DSP寄存器的操作寄存器文件的空间分配21将数据段映射到寄存器对应的存储空间MEMORY{

……PAGE1:SCI_A:origin=0x007050,length=0x000010SCI_B:origin=0x007750,length=0x000010

……}SECTIONS{

……SciaRegsFile:>SCI_A,PAGE=1ScibRegsFile:>SCI_B,PAGE=1

……}4.4C语言对DSP寄存器的操作224.5CCS的技术概述CodeComposerStudioTM硬件配置工程管理IDE编辑环境实时组件编译的高效率高效的

VLIW组件IDE调试

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论