16-28DSP-04软件开发过程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第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:FLASHPAGE0.stack:M1SARAMPAGE1}4.3程序的编写连接命令文件(.cmd)154.4C语言对DSP寄存器的操作寄存器变量的定义方式struct位域结构名{类型说明符位域名1:位域长度类型说明符位域名2:位域长度…类型说明符位域名n:位域长度};abc07915例: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的技术概

1 / 27
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功