DSP软件开发与C语言编程课件

上传人:s9****2 文档编号:568269364 上传时间:2024-07-23 格式:PPT 页数:79 大小:2.29MB
返回 下载 相关 举报
DSP软件开发与C语言编程课件_第1页
第1页 / 共79页
DSP软件开发与C语言编程课件_第2页
第2页 / 共79页
DSP软件开发与C语言编程课件_第3页
第3页 / 共79页
DSP软件开发与C语言编程课件_第4页
第4页 / 共79页
DSP软件开发与C语言编程课件_第5页
第5页 / 共79页
点击查看更多>>
资源描述

《DSP软件开发与C语言编程课件》由会员分享,可在线阅读,更多相关《DSP软件开发与C语言编程课件(79页珍藏版)》请在金锄头文库上搜索。

1、第4章 DSP的软件开发与C语言编程本章内容:本章内容:4.1 DSP开发工具与软件开发流程开发工具与软件开发流程4.2 集成开发环境集成开发环境CCS4.3 DSP的的C工程文件工程文件 4.4 DSP C语言程序设计基础语言程序设计基础4.5 DSP C程序举例程序举例7/23/20241山东大学控制学院 张东亮 4.1 DSP开发工具与软件开发流程开发工具与软件开发流程1. DSP开发工具开发工具硬件硬件TI XDS510 (Extended Development System)硬件仿真器。硬件仿真器。DSK(DSP Starter Kit)初学者开发套件。初学者开发套件。瑞泰瑞泰 I

2、CETEK-5100PP/USB DSP开发系统。开发系统。评估板。评估板。DSP教学实验系统教学实验系统 。 开发工具包括硬件、软件两部分。硬件部分主要是仿真开发工具包括硬件、软件两部分。硬件部分主要是仿真器器(Emulator),软件主要是集成开发环境软件主要是集成开发环境CCS (Code Composer Studio)。 DSP开发系统开发系统(仿真器仿真器)有有PCI插卡式、并口式、插卡式、并口式、USB接口接口式,目前多用式,目前多用USB接口式,即接口式,即DSP开发系统通过开发系统通过USB接口与接口与PC机相连,开发系统通过机相连,开发系统通过JTAG(基于扫描的仿真)接口

3、与基于扫描的仿真)接口与用户目标板相连,实现用户目标板相连,实现DSP软硬件调试与程序烧写。软硬件调试与程序烧写。 7/23/20242山东大学控制学院 张东亮 DSP评估板评估板(也称为也称为EVM板、目标板、板、目标板、 DEMO板、实验板、实验板等板等),包括基本的,包括基本的DSP芯片及必要的电源、时钟、复位电路芯片及必要的电源、时钟、复位电路外,还经常包括用于程序调试的片外扩展存储器、扩展的外,还经常包括用于程序调试的片外扩展存储器、扩展的A/D、D/A转换器、键盘显示电路、转换器、键盘显示电路、EEPROM、RS232串行接串行接口、口、SPI接口、接口、CAN接口驱动电路、简单应

4、用电路等。接口驱动电路、简单应用电路等。 F2812DSP评估板评估板7/23/20243山东大学控制学院 张东亮F2812DSP评估板评估板原理框图原理框图开发系统开发系统与评估板与评估板7/23/20244山东大学控制学院 张东亮2812 EVM板的主要性能指标如下:板的主要性能指标如下:(1) TMS320F2812,运行速度,运行速度150MIPS。(2) 片内片内RAM 18K字。字。(3) 扩展扩展RAM 64K字。字。(4) 片内片内16路路12位位A/D转换器转换器, 最大采样速率最大采样速率12.5MSPS。(5) 扩展的扩展的4路路12位位D/A转换器转换器DAC7617。

5、(6) 两路两路UART串行接口,符合串行接口,符合RS-232C标准。标准。(7) 16路路PWM输出。输出。(8) CAN总线标准接口。总线标准接口。(9) 用户开关与指示灯。用户开关与指示灯。(10) 片内片内128K字字Flash存储器,带存储器,带128位加密位。位加密位。(11) IEEE1149.1兼容的逻辑扫描电路即兼容的逻辑扫描电路即JTAG接口,用于仿真调试。接口,用于仿真调试。(12) +5V电源输入电源输入, 板上板上3.3V, 1.8V电源管理。电源管理。7/23/20245山东大学控制学院 张东亮7/23/20246山东大学控制学院 张东亮2. 软件开发流程软件开发

6、流程软件开发流程框图软件开发流程框图 7/23/20247山东大学控制学院 张东亮 软件开发流程软件开发流程 1)编辑编辑:生成源程序(:生成源程序(*.asm, *.c)、)、头文件头文件(*.h)与命令文件与命令文件(*.cmd)。2)编译与汇编编译与汇编:生成目标文件:生成目标文件(*.obj ,公共目标文件公共目标文件COFF格式格式)及列表文件及列表文件(*.lst)。3)连接连接:生成可执行代码文件:生成可执行代码文件(*.out)及映射文件及映射文件(*.map)。4)调试调试:通过:通过JTAG接口下载到目标系统接口下载到目标系统EVM。5) 通过通过JTAG接口将程序接口将程

7、序固化固化烧写到烧写到Flash 存储器存储器 。7/23/20248山东大学控制学院 张东亮 软件开发工具主要有软件开发工具主要有 源程序编辑器源程序编辑器(Editor) 编译器编译器(Compiler) 汇编器汇编器(Assembler) 链接器链接器(Linker) 归档器归档器(Archiver) 运行时支持库运行时支持库(Run-Time-Support Library) 库建立程序库建立程序(Library-build Utility) HEX转换程序转换程序(Hex Conversion Utility)3. 软件工具软件工具7/23/20249山东大学控制学院 张东亮 绝对列

8、表器绝对列表器(Absolute Lister)和交叉引用列表器和交叉引用列表器(Cross-Reference Lister) 调试工具调试工具(Debugging tools) C+名称复原程序名称复原程序(C+ Name Demangling Utility) GEL语言语言 (General Extension Language,通用扩展语言,通用扩展语言) DSP/BIOS等。等。7/23/202410山东大学控制学院 张东亮1. CCS软件安装与设置软件安装与设置CCS2.0 C2000 (CCS3.3)驱动程序设置。驱动程序设置。Simulator: PC模拟软件仿真。模拟软件仿

9、真。Emulator: 实时实时DSP硬件仿真。硬件仿真。 4.2 集成开发环境集成开发环境CCS7/23/202411山东大学控制学院 张东亮CCS运行主窗口运行主窗口 7/23/202412山东大学控制学院 张东亮CCS主要工具主要工具源程序编辑器源程序编辑器(Editor)。C编译器(编译器(C Compiler)。)。汇编器(汇编器(Assembler)。)。连接器(连接器(Linker)。)。调试工具调试工具(Debug)。十六进制转换公用程序十六进制转换公用程序(Hex Conversion Utility)。7/23/202413山东大学控制学院 张东亮2. CCS主要菜单与功能

10、主要菜单与功能 典型的典型的CCS运行界面如图所示。运行界面如图所示。CCS的功能可以通的功能可以通过菜单或工具条按钮实现。主要的菜单项有过菜单或工具条按钮实现。主要的菜单项有File、Edit、View、Project、Debug等。这些菜单的使用与常用的集等。这些菜单的使用与常用的集成开发软件成开发软件Visual C+等使用方法基本一样。等使用方法基本一样。 7/23/202414山东大学控制学院 张东亮典型典型CCS运行界面运行界面7/23/202415山东大学控制学院 张东亮Code Composer Studio ComponentsRobust, Easy-to-Use Deve

11、lopment EnvironmentHelpHelpCPU CPU WindowWindowMemory windowMemory windowGraph Graph windowwindowProject Manager:Project Manager:Source & object filesSource & object filesFile dependenciesFile dependenciesCompiler, Assembler Compiler, Assembler & Linker build options& Linker build optionsStatus Stat

12、us windowwindowFull C/C+ & Assembly Full C/C+ & Assembly Debugging:Debugging:C & ASM SourceC & ASM SourceMixed modeMixed modeDisassembly (patch)Disassembly (patch)Set Break PointsSet Break PointsSet probe PointsSet probe PointsWatch windowWatch windowProductive Editor:Productive Editor:Structure Exp

13、ansionStructure ExpansionMenus or IconsMenus or Icons7/23/202416山东大学控制学院 张东亮Real-time DebuggingReal-time DebuggingAllows you to halt in non-critical code for debug while time-critical interrupts continue to be serviced. Access memory and registers without stopping the processor.Implemented in silico

14、n, not by a debug monitor: Easy-to-use, no application resources requiredInterrupt void ISR_1() Main() function() Halt and single step non-time critical codeTime-critical interrupts are still serviced.In Control, If The Processor Stops, The System Can Go Out Of Control7/23/202417山东大学控制学院 张东亮File菜单菜单

15、7/23/202418山东大学控制学院 张东亮Project菜单菜单7/23/202419山东大学控制学院 张东亮View菜单7/23/202420山东大学控制学院 张东亮Debug菜单菜单7/23/202421山东大学控制学院 张东亮3. 采用采用CCS开发应用程序的步骤开发应用程序的步骤1)创建一个新工程创建一个新工程(project)。2)编辑源程序编辑源程序(*.asm, *.c)与连接命令文件与连接命令文件(*.cmd) 。3)将文件添加到该工程中将文件添加到该工程中(*.asm, *.c, *.h, *.cmd)。4)编译汇编连接。编译汇编连接。5)装载程序。装载程序。6)调试程序

16、。调试程序。7)程序固化。程序固化。7/23/202422山东大学控制学院 张东亮调试程序调试程序连续运行与单步运行。连续运行与单步运行。设置断点。设置断点。查看与修改存储单元。查看与修改存储单元。查看与修改寄存器内容。查看与修改寄存器内容。观察和编辑变量。观察和编辑变量。程序程序Animate运行和数据图形显示。运行和数据图形显示。7/23/202423山东大学控制学院 张东亮C工程工程(Project)几种基本文件几种基本文件CCS工工程程文文件件(扩扩展展名名为为.pjt)。由由CCS自自动动生生成成。在在CC(Code Composer)软件环境中,扩展名为软件环境中,扩展名为.mak

17、。 源程序源程序: 汇编语言文件汇编语言文件(*.asm), C文件文件(*.c)。头头文文件件(*.h): 定定义义寄寄存存器器映映射射地地址址,用用户户自自定定义义的的常常量量等等。例例如如,头头文文件件DSP281x_Adc.h定定义义了了ADC寄寄存存器器, 头文件头文件DSP281x_PieVec.h定义了定义了PIE中断矢量。中断矢量。链接命令文件链接命令文件(*.cmd)。)。库文件库文件(*.lib)。)。 运行时支持库运行时支持库rts2800_ml.lib。目标文件目标文件(*.obj):COFF公共目标文件格式。公共目标文件格式。列表文件列表文件(*.lst):汇编生成的

18、文件。汇编生成的文件。映射文件映射文件(*.map): 存储器分配。存储器分配。可执行代码文件可执行代码文件(*.out)。4.3 DSP 的的C工程文件工程文件7/23/202424山东大学控制学院 张东亮4.3.1 公共目标文件格式公共目标文件格式COFF 编译、汇编与链接程序建立的目标文件采用共用目标编译、汇编与链接程序建立的目标文件采用共用目标文件格式(文件格式(Common Object File Format, COFF),便于),便于模块化编程、管理代码段和存储器,即不必为程序代码或模块化编程、管理代码段和存储器,即不必为程序代码或变量指定目标地址。变量指定目标地址。 汇编器根据

19、命令用适当的段将各部分程序代码和数据汇编器根据命令用适当的段将各部分程序代码和数据连在一起,构成目标文件。链接器分配存储单元,即把各连在一起,构成目标文件。链接器分配存储单元,即把各个段重新定位到目标存储器中。个段重新定位到目标存储器中。 段段(section,也称为块,也称为块)是目标文件的最小单位,是在是目标文件的最小单位,是在存储器中占据连续空间的代码和数据块,各段相互独立。存储器中占据连续空间的代码和数据块,各段相互独立。 7/23/202425山东大学控制学院 张东亮目标文件中段与目标存储器之间的关系目标文件中段与目标存储器之间的关系 汇编器的汇编器的COFF文件格式包括三个默认的段

20、:文件格式包括三个默认的段:.text段,即程序段段,即程序段,该段通常包含可执行代码即程序。该段通常包含可执行代码即程序。.data段,即数据段段,即数据段,该段通常包含已初始化的数据。该段通常包含已初始化的数据。.bss段,即保留数据空间段段,即保留数据空间段,该段通常为未初始化的数据保留空间。该段通常为未初始化的数据保留空间。7/23/202426山东大学控制学院 张东亮 汇编器和链接器允许用户建立和链接自定义的段。汇编器和链接器允许用户建立和链接自定义的段。所有段可以分为初始化段和未初始化段两类。初始化所有段可以分为初始化段和未初始化段两类。初始化段包含程序代码和数据。未初始化段则为未

21、初始化的段包含程序代码和数据。未初始化段则为未初始化的数据保留存储空间。汇编命令数据保留存储空间。汇编命令.sect和和.usect可以分别可以分别用来创建自定义的初始化段和未初始化段。用来创建自定义的初始化段和未初始化段。 C编译器对编译器对C程序编译后也产生初始化段和未初始程序编译后也产生初始化段和未初始化段两类,具体的段名稍有不同,除了不使用化段两类,具体的段名稍有不同,除了不使用.data段段之外,还产生一些新的段。之外,还产生一些新的段。 7/23/202427山东大学控制学院 张东亮 编译器对编译器对C语言编译后除了生成语言编译后除了生成2个基本段,即个基本段,即.text、.bs

22、s外外,还生成其他一些段。还生成其他一些段。 可分为初始化段和未初始化段。可分为初始化段和未初始化段。 初始化段初始化段包含可执行代码或常数表。包含可执行代码或常数表。C编译器产生的初始编译器产生的初始化段有化段有 .pint、.const、.econst、.text、.cinit、.switch 。.text段,包含可执行代码和常量段,包含可执行代码和常量(constant)。.cinit段和段和.pint段,包含初始化变量和常量。段,包含初始化变量和常量。.const段,包含串常量,全局变量、静态变量的声明和初始段,包含串常量,全局变量、静态变量的声明和初始化。化。.econst段,包含串

23、常量,全局变量、静态变量的声明和初始段,包含串常量,全局变量、静态变量的声明和初始化。变量由化。变量由far const修饰,或用大存储器模型,初始化后放进修饰,或用大存储器模型,初始化后放进远远(far)存储器。存储器。.switch段,包含段,包含switch语句表。语句表。7/23/202428山东大学控制学院 张东亮未初始化段未初始化段用于保留存储器用于保留存储器(通常为通常为RAM)空间。空间。C编译器编译器产生的为初始化段有产生的为初始化段有.bss、.ebss、.stack、.sysmem和和.esysmem段。段。.bss段,为全局和静态变量保留空间。段,为全局和静态变量保留空

24、间。.ebss段,为全局和静态变量保留空间。变量由段,为全局和静态变量保留空间。变量由far 修饰,修饰,或用大存储器模型使用。或用大存储器模型使用。.stack段,为段,为C系统堆栈。用于保护函数的返回地址、分系统堆栈。用于保护函数的返回地址、分配局部变量、调用函数时传递参数。配局部变量、调用函数时传递参数。.sysmem段段,为动态存储器分配保留空间为动态存储器分配保留空间, malloc函数使用。函数使用。.esysmem段段,为动态存储器分配保留空间,为动态存储器分配保留空间,far malloc函数函数使用。使用。7/23/202429山东大学控制学院 张东亮初始化段链接初始化段链接

25、 段名称段名称描述描述限制限制.text可执行代码和常量可执行代码和常量程序程序.cint已初始化的全局与静态变量的已初始化的全局与静态变量的C初始初始化记录化记录低低64K数据数据.pint全局构造器全局构造器(C+ constructor)表表程序程序.switch实现实现switch语句表语句表程序程序/低低64K数据数据.const已初始化的全局与静态已初始化的全局与静态const修饰变修饰变量,串常量量,串常量低低64K数据数据.econstfar costant变量变量数据任何位置数据任何位置7/23/202430山东大学控制学院 张东亮未初始化段链接未初始化段链接 段名称段名称内

26、容内容限制限制.bss全局与静态变全局与静态变量量低低64K数数据据.ebssfar全局与静态全局与静态变量变量数据任数据任何位置何位置.stack堆栈空间堆栈空间低低64K数数据据.sysmemmalloc函数存函数存储区储区低低64K数数据据.esysmemfar malloc函数函数存储区存储区数据任数据任何位置何位置7/23/202431山东大学控制学院 张东亮存储器映射表存储器映射表 段段(Section)存储器类型存储器类型(Type of Memory)页面页面(Page).textROM 或或RAM0.cintROM 或或RAM0.pintROM 或或RAM0.switchRO

27、M 或或RAM0,1.constROM 或或RAM1.econstROM 或或RAM1.bssRAM1.ebssRAM1.stackRAM1.sysmemRAM1.esysmemRAM17/23/202432山东大学控制学院 张东亮4.3.2 链接命令文件链接命令文件 CCS的链接器可以有很多选项,如的链接器可以有很多选项,如-l(包含库文件包含库文件)、-stack(定义堆栈定义堆栈)、-o(定义输出文件定义输出文件)等,并且将用户软件定等,并且将用户软件定义的段与目标系统存储器物理地址对应关系定义清楚。义的段与目标系统存储器物理地址对应关系定义清楚。 链接器选项的实现通常采用工程选项菜单或

28、链接器命链接器选项的实现通常采用工程选项菜单或链接器命令文件令文件(.cmd)两种方法。两种方法。 编写一个链接器命令文件,将所有链接器选项写在文编写一个链接器命令文件,将所有链接器选项写在文件中,并将此文件加入到工程,这样件中,并将此文件加入到工程,这样CCS在进行编译链接在进行编译链接时,会自动按照链接器命令文件中的选项进行。时,会自动按照链接器命令文件中的选项进行。 有两条链接器命令有两条链接器命令MEMORY和和SECTIONS可以实现对可以实现对程序存储器和数据存储器空间的分配。程序存储器和数据存储器空间的分配。MEMORY命令定义命令定义目标存储器的配置,目标存储器的配置,SECT

29、IONS命令定义编程段与目标存命令定义编程段与目标存储器的关系。储器的关系。 7/23/202433山东大学控制学院 张东亮MEMORY命令命令 MEMORY命令定义目标系统中可以使用的存储器范围,命令定义目标系统中可以使用的存储器范围,每个存储器范围具有名字、起始地址和长度。一般形式为每个存储器范围具有名字、起始地址和长度。一般形式为MEMORYPAGE 0: name: origin=constant, length=constant;PAGE n: name: origin=constant, length=constant; PAGE n:定义存储器空间。:定义存储器空间。n=0254

30、. 通常通常PAGE 0定义定义程序存储器,程序存储器,PAGE 1定义数据存储器。定义数据存储器。name:存储器范围名字。可以是:存储器范围名字。可以是18个字符。个字符。origin或简写为或简写为o:存储器范围的起始地址。:存储器范围的起始地址。length或简写为或简写为l:存储器范围的长度。:存储器范围的长度。7/23/202434山东大学控制学院 张东亮SECTIONS命令命令 SECTIONS命令用于将输出各段定位到所定义的存储器。命令用于将输出各段定位到所定义的存储器。一般形式为一般形式为SECTIONSname: property, property, name: prop

31、erty, property, 在段名之后是是特性列表,定义段的内容以及是怎样分配在段名之后是是特性列表,定义段的内容以及是怎样分配的。段的特性的。段的特性(property)是装载位置、运行位置、输入段、段是装载位置、运行位置、输入段、段类型等。通常的特性符号类型等。通常的特性符号“”表示输出段装载位置。表示输出段装载位置。 7/23/202435山东大学控制学院 张东亮4.4 DSP C语言程序设计基础语言程序设计基础4.4.1 数据类型数据类型4.4.2 C语言运算符与基本语句语言运算符与基本语句4.4.3 函数函数4.4.4 指针指针4.4.5 编译预处理命令编译预处理命令4.4.6

32、C语言与汇编语言混合编程语言与汇编语言混合编程4.4.7 C28x DSP编译器的关键字编译器的关键字7/23/202436山东大学控制学院 张东亮C语言程序设计优缺点语言程序设计优缺点汇编语言程序设计汇编语言程序设计: 执行速度快。执行速度快。 开发周期长、移植性和可读性差开发周期长、移植性和可读性差 。 C语言程序设计语言程序设计:开发周期短、移植性和可读性好。开发周期短、移植性和可读性好。执行速度可以满足要求。执行速度可以满足要求。7/23/202437山东大学控制学院 张东亮 C28x DSPC28x DSP具有优化的具有优化的C C编译器,它支持编译器,它支持ANSI ANSI C

33、C 标准。还具有一些不同于标准标准。还具有一些不同于标准C C的特征。的特征。 DSP的基本数据类型如表所示,还具有数的基本数据类型如表所示,还具有数组、结构、联合等构造类型数据。组、结构、联合等构造类型数据。4.4.1 数据类型数据类型7/23/202438山东大学控制学院 张东亮TMS320C28x C的数据类型的数据类型 1. C28x编译器基本数据类型编译器基本数据类型7/23/202439山东大学控制学院 张东亮 片内外设寄存器通常通过结构与联合变量的方法进行片内外设寄存器通常通过结构与联合变量的方法进行访问。访问。2. 结构结构例如,例如,GPIO A口的口的MUX复用控制寄存器可

34、用位段复用控制寄存器可用位段(bit field)结构表示结构表示struct GPAMUX_BITS unsigned int PWM1_GPIOA0:1;/第第0位位unsigned int PWM2_GPIOA1:1; unsigned int C2TRIP_GPIOA14:1; unsigned int C3TRIP_GPIOA15:1;/第第15位位;7/23/202440山东大学控制学院 张东亮例如,例如,GPIO D口的口的MUX复用控制寄存器结构复用控制寄存器结构struct GPDMUX_BITS unsigned int T1CTRIP_PDPA_GPIOD0:1;/第第0

35、位位unsigned int T2CTRIP_PDPA_GPIOD1:1;/1unsigned int rsvd1:3;/4:2,保留保留unsigned int T3CTRIP_PDPA_GPIOD5:1;/5unsigned int T4CTRIP_PDPA_GPIOD6:1;/6unsigned int rsvd2:9;/15:7,保留保留; 当一个结构中有效字段当一个结构中有效字段(位段位段)的长度不足的长度不足16位时,位时,可以加入保留字段,以保证数据的完整性。可以加入保留字段,以保证数据的完整性。 结构变量的定义与成员变量的引用,例如,结构变量的定义与成员变量的引用,例如,str

36、uct GPDMUX_BITS bit; /bit为为 GPDMUX_BITS 类型变量类型变量bit. T1CTRIP_PDPA_GPIOD0=1 /将将D0位定义为位定义为PDPA功能功能7/23/202441山东大学控制学院 张东亮 联合体联合体(也称为共用体也称为共用体)类型,可以将不同类型的数类型,可以将不同类型的数据存放在同一个地方,且占据同样大小的存储空间。据存放在同一个地方,且占据同样大小的存储空间。例如,定义联合体类型例如,定义联合体类型GPDMUX_REG ,union GPDMUX_REG unsigned int all;/all 为无符号整型变量为无符号整型变量str

37、uct GPDMUX_BITS bit; /bit为结构型变量为结构型变量 ; 联合变量的定义与成员变量的引用,例如,联合变量的定义与成员变量的引用,例如,union GPDMUX_REG GPDMUX; / GPDMUX为联合类型变量为联合类型变量GPDMUX.all=1; /将将D0引脚定义为引脚定义为PDPA功能功能,其他为数字其他为数字I/O3. 联合联合7/23/202442山东大学控制学院 张东亮 联合可以出现在结构和数组中,结构和数组也可以出现在联合中。联合可以出现在结构和数组中,结构和数组也可以出现在联合中。例如,结构类型例如,结构类型GPIO_MUX_REGS,struct

38、GPIO_MUX_REGS union GPAMUX_REG GPAMUX;union GPDMUX_REG GPDMUX; ; 结构变量的定义与成员变量的引用,例如,结构变量的定义与成员变量的引用,例如, struct GPIO_MUX_REGS GpioMuxRegs;/表示表示GpioMuxRegs是结构是结构GPIO_MUX_REGS的一个变量的一个变量可以采用点运算符的方法引用各成员变量,可以采用点运算符的方法引用各成员变量, GpioMuxRegs.GPAMUX.all=0x077F; /CAP1-3, PWM1-6, T1pwm GpioMuxRegs.GPDMUX.bit.T1

39、CTRIP_PDPA_GPIOD0=1; /PDPA GpioMuxRegs.GPDMUX.bit.T2CTRIP_SOCA_GPIOD1=0; /GPIOD1 GpioMuxRegs.GPDMUX.bit.T3CTRIP_PDPB_GPIOD5=0; /GPIOD5 GpioMuxRegs.GPDMUX.bit.T4CTRIP_SOCB_GPIOD6=0; /GPIOD6 定义定义GPIO A口时,采用了一条口时,采用了一条C语句。而定义语句。而定义GPIO D口时,采用了口时,采用了4条条C语句。语句。 编程风格可以编程者自己决定。编程风格可以编程者自己决定。7/23/202443山东大学

40、控制学院 张东亮4.4.2 C语言运算符与基本语句语言运算符与基本语句 1. C语言运算符语言运算符2. C语言基本语句语言基本语句 C语言运算符有算术运算符、关系运算符、逻辑运语言运算符有算术运算符、关系运算符、逻辑运算符、位操作运算符等。不同的运算符可以有不同的优算符、位操作运算符等。不同的运算符可以有不同的优先级、运算对象个数与结合方向。先级、运算对象个数与结合方向。 C语句有控制语句、表达式语句、函数调用语句、语句有控制语句、表达式语句、函数调用语句、空语句和复合语句五类。控制语句有空语句和复合语句五类。控制语句有9种。种。7/23/202444山东大学控制学院 张东亮 与普通的与普通

41、的C语言程序类似,语言程序类似,DSP C程序是由若程序是由若干模块化的函数构成。函数是干模块化的函数构成。函数是C程序的基本模块,程序的基本模块,子程序就是由函数来实现的。子程序就是由函数来实现的。 用户可以根据需要定义自己的功能函数,也可以用户可以根据需要定义自己的功能函数,也可以调用调用C编译器提供的标准函数(库函数)来完成某种编译器提供的标准函数(库函数)来完成某种特定的功能。特定的功能。 注意函数调用的规则。注意函数调用的规则。4.4.3 函数函数 7/23/202445山东大学控制学院 张东亮 C函数的一般格式为函数的一般格式为类型函数名(形式参数及其类型表)类型函数名(形式参数及

42、其类型表)变量声明部分;变量声明部分;执行语句部分;执行语句部分; 一个函数在程序中可以三种形态出现:函数定义一个函数在程序中可以三种形态出现:函数定义(Definition)、函数调用和函数声明()、函数调用和函数声明(Declaration)。函)。函数定义相当于汇编语言中的一般子程序。函数调用相当于调数定义相当于汇编语言中的一般子程序。函数调用相当于调用子程序。函数定义和函数调用不分先后,但若调用在定义用子程序。函数定义和函数调用不分先后,但若调用在定义之前,那么在调用前必须先进行函数声明。函数声明是一个之前,那么在调用前必须先进行函数声明。函数声明是一个没有函数体的函数定义,而函数调用

43、则要求有函数名和实际没有函数体的函数定义,而函数调用则要求有函数名和实际参数表。参数表。 7/23/202446山东大学控制学院 张东亮 可以用指针的方法访问变量,用指针访问数组、结构、可以用指针的方法访问变量,用指针访问数组、结构、联合变量非常方便。联合变量非常方便。4.4.4 指针指针 例如,指向结构类型的指针变量例如,指向结构类型的指针变量p struct GPDMUX_BITS *p; struct GPDMUX_BITS bit; p=&bit; bit的成员的成员T1CTRIP_PDPA_GPIOD0可用下述可用下述3种形式之一访问种形式之一访问 bit.T1CTRIP_PDPA_

44、GPIOD0 (*p). T1CTRIP_PDPA_GPIOD0 p-T1CTRIP_PDPA_GPIOD07/23/202447山东大学控制学院 张东亮 ANSI C 新标准增加了一种新标准增加了一种 void *指针类型,即可以定义指针类型,即可以定义一个指针变量,但不指定它是指向哪一种数据类型,例一个指针变量,但不指定它是指向哪一种数据类型,例 unsigned long *Source=(void*)&PieVectTableInit; 地址地址&PieVectTableInit被被(void*)强制成了强制成了void *类型。指类型。指针针Source为为unsigned long

45、 类型。类型。 例如,描述中断矢量表的指针例如,描述中断矢量表的指针PINTtypedef unsigned int Uint16;/定义一种类型定义一种类型Uint16Uint16 i;typedef interrupt void (*PINT)(void);/指针指针PINT指向中断函数指向中断函数struct PIE_VECT_TABLE PINT PIE1_RESERVED; PINT PIE2_RESERVED; 7/23/202448山东大学控制学院 张东亮C语言用指针访问数据存储器(或片内外设寄存器)语言用指针访问数据存储器(或片内外设寄存器) 可以用指针方法实现。可以用指针方法

46、实现。 例如,从扩展的外设接口读取开关状态,然后输出到扩例如,从扩展的外设接口读取开关状态,然后输出到扩展的指示灯外设接口。展的指示灯外设接口。#define LBDS (*(unsigned int *)0xc0000) /扩展的外设寄存器,指示扩展的外设寄存器,指示灯灯#define DIPS (*(unsigned int *)0xc0001) /扩展的外设寄存器,开关扩展的外设寄存器,开关LBDS=DIPS;/读取拨码开关状态直接送指示灯显示读取拨码开关状态直接送指示灯显示 一般将这些定义放到一个头文件,使用时,用编译预处一般将这些定义放到一个头文件,使用时,用编译预处理命令理命令 i

47、nclude包含该头文件即可。包含该头文件即可。7/23/202449山东大学控制学院 张东亮main( )int i;unsigned int * px, * py, * pz;px=(unsigned int *)0x80000;py=(unsigned int *)0x80100;for ( i=0,pz=px; i16;i+,pz+ )(*pz)=i;for ( i=0,pz=py; i16;i+,pz+ ) (*pz)=0x1234;for ( i=0;i16; i+,px+,py+ ) (*py)=(*px);while(1) ;例例4-3,将数据存储器,将数据存储器80000H开

48、始的开始的16个单元复制到个单元复制到80100H开始的单元。开始的单元。7/23/202450山东大学控制学院 张东亮例例4-4 扩展外部接口,扩展外部接口, 编写编写C程序将程序将4个开关状态反应到个开关状态反应到4个个指示灯。指示灯。#include DSP281x_Device.h / DSP281x Head file Include File/ 定义指示灯控制寄存器地址和寄存器类型定义指示灯控制寄存器地址和寄存器类型#define LBDS (*(unsigned int *)0xc0000)/ 定义定义拨码开关控制寄存器地址拨码开关控制寄存器地址和寄存器类型和寄存器类型#defi

49、ne DIPS (*(unsigned int *)0xc0001)main( )InitSysCtrl();/初始化初始化DSP运行时钟运行时钟, 自定义函数自定义函数while ( 1 )LBDS=DIPS;/读取拨码开关状态直接送指示灯显示读取拨码开关状态直接送指示灯显示7/23/202451山东大学控制学院 张东亮宏定义宏定义 #define #define PI 3.14159#define Uint16 unsigned int (typedef unsigned int Uint16; )#define EINT asm(“ clrc INTM”)EINT;#define EAL

50、LOW asm(“ EALLOW”)4.4.5 编译预处理编译预处理 文件包含文件包含#include#include #include “DSP281x_Device.h”1. 宏定义、文件包含与条件编译宏定义、文件包含与条件编译7/23/202452山东大学控制学院 张东亮条件编译条件编译 #ifdef 标识符标识符程序段程序段1#else程序段程序段2#endif7/23/202453山东大学控制学院 张东亮 pragma是一类编译预处理命令(是一类编译预处理命令(directive),),通通知编译预处理器如何处理函数。知编译预处理器如何处理函数。C28x C/C+ 支持如下支持如下p

51、ragma命令,命令,CODE_SECTION(func, “section name”)DATA_SECTION(symbol, “section name”)INTERRUPT(func)FUNC_EXT_CALLED(func)FAST_CALL(func)2. pragma 命令命令7/23/202454山东大学控制学院 张东亮 CODE_SECTION 代码段代码段 它为函数它为函数func在一个名为在一个名为section name 的段的段(section)中指定空间。将一个代码对象连接到一个不同中指定空间。将一个代码对象连接到一个不同于于.text段的空间时,该语法非常有用。例

52、如段的空间时,该语法非常有用。例如char bufferA80;#pragma CODE_SECTION(funA, “codeA”)char funA(int i);void main( ) char c; c=funA(1);char funA(int i) return bufferAi;7/23/202455山东大学控制学院 张东亮 DATA_SECTION 数据段数据段 它为符号它为符号symbol在一个名为在一个名为section name 的段中指定的段中指定空间。将一个数据对象连接到一个不同于空间。将一个数据对象连接到一个不同于.bss段的空间段的空间时,该语法非常有用。例如时

53、,该语法非常有用。例如#pragma DATA_SECTION(bufferB, “my_sect”)char bufferB(512); 数据块数据块bufferB被定位于被定位于my_sect段中,段中, my_sect段在段在.cmd文件中规定物理地址。文件中规定物理地址。7/23/202456山东大学控制学院 张东亮4.4.6 C语言与汇编语言混合编程语言与汇编语言混合编程在在C程序中直接嵌入汇编语句。程序中直接嵌入汇编语句。独立的独立的C模块和汇编模块接口。模块和汇编模块接口。 独独立立编编写写C程程序序与与汇汇编编程程序序,分分别别编编译译、汇汇编生成目标代码模块,然后用连接器连接

54、起来。编生成目标代码模块,然后用连接器连接起来。从从C程序中访问汇编程序变量。程序中访问汇编程序变量。7/23/202457山东大学控制学院 张东亮1. 在在C程序中直接嵌入汇编语句程序中直接嵌入汇编语句C程程序序嵌嵌入入汇汇编编语语句句是是一一种种直直接接的的C模模块块和和汇汇编编模模块块接接口口方方法法。可可以以在在C程程序序中中实实现现用用C语语言言难难以以实实现现的的一一些些硬硬件件控控制制功功能能。另另一一方方面面,也也可可以以用用这这种种方方法法在在C程程序序中的关键部分用汇编语句代替中的关键部分用汇编语句代替C语句以优化程序。语句以优化程序。这这种种方方法法的的一一个个缺缺点点是

55、是它它比比较较容容易易破破坏坏C环环境境,因因为为C编编译译器器在在编编译译嵌嵌入入了了汇汇编编语语句句的的C程程序序时时并并不不检检查查或或分分析所嵌入的汇编语句。析所嵌入的汇编语句。 直接在直接在C语言程序中相应位置嵌入汇编语句,只需语言程序中相应位置嵌入汇编语句,只需在汇编语句加上双引号和小括号,前面加在汇编语句加上双引号和小括号,前面加asm标识符号标识符号,双引号内第一个字符应是空格。即,双引号内第一个字符应是空格。即, asm (“ 汇编语句汇编语句”) 例如例如 asmasm (“ “ NOP”NOP”); ; #define EINT #define EINT asmasm (

56、“ CLRC INTM”) / (“ CLRC INTM”) /开放中断开放中断 EINT;EINT;7/23/202458山东大学控制学院 张东亮2. 独立的独立的C模块和汇编模块接口模块和汇编模块接口在编写独立的汇编程序时,必须注意以下几点:在编写独立的汇编程序时,必须注意以下几点:(1)不不论论是是用用C语语言言编编写写的的函函数数还还是是用用汇汇编编语语言言编编写写的的函函数数,都必须遵循寄存器使用规则。都必须遵循寄存器使用规则。(2)必须保护函数要用到的几个特定寄存器。)必须保护函数要用到的几个特定寄存器。 (3)中断程序必须保护所有用到的寄存器。)中断程序必须保护所有用到的寄存器。

57、(4)从从汇汇编编程程序序调调用用C函函数数时时,第第一一个个参参数数(最最左左边边)必必须须放入累加器放入累加器A中,剩下的参数按自右向左的顺序压入堆栈。中,剩下的参数按自右向左的顺序压入堆栈。(5)调调用用C函函数数时时,注注意意C函函数数只只保保护护了了几几个个特特定定的的寄寄存存器器,而其他寄存器可以自由使用。而其他寄存器可以自由使用。(6)长长整整型型和和浮浮点点数数在在存存储储器器中中存存放放的的顺顺序序是是低低位位字字在在高高地址,高位字在低地址。地址,高位字在低地址。7/23/202459山东大学控制学院 张东亮 (7)如果函数有返回值,返回值存放在累加器中。)如果函数有返回值

58、,返回值存放在累加器中。 (8)汇汇编编语语言言模模块块不不能能改改变变由由C模模块块产产生生的的.cinit段段,如如果果改变其内容将会引起不可预测的后果。改变其内容将会引起不可预测的后果。(9)编编译译器器在在所所有有标标识识符符(函函数数名名、变变量量名名等等)前前加加下下划划线线“_”。 (10)任任何何在在汇汇编编程程序序中中定定义义的的对对象象或或函函数数,如如果果需需要要在在C程程序中访问或调用,则必须用汇编指令序中访问或调用,则必须用汇编指令.global定义。定义。7/23/202460山东大学控制学院 张东亮3. 从从C程序中访问汇编程序变量程序中访问汇编程序变量 从从C程

59、程序序中中访访问问在在汇汇编编程程序序中中定定义义的的变变量量或或常常数数,可以分为以下可以分为以下3种情况:种情况:(1)访问在)访问在.bss段中定义的变量。段中定义的变量。(2)访问不在)访问不在.bss段中定义的变量。段中定义的变量。 (3)对对于于在在汇汇编编程程序序中中用用.set和和.global伪伪指指令令定定义义的的全局常数,也可以使用特殊的操作从全局常数,也可以使用特殊的操作从C程序中访问它们。程序中访问它们。7/23/202461山东大学控制学院 张东亮例例4-5,在,在C程序中访问在程序中访问在.bss段中定义的变量。段中定义的变量。汇编程序:汇编程序:.bss _va

60、r,1;定义变量定义变量.global _var;声明为外部变量声明为外部变量C程序:程序:extern int var/声明为外部变量声明为外部变量var=1/访问变量访问变量 7/23/202462山东大学控制学院 张东亮例例4-6,在,在C程序中访问不在程序中访问不在.bss段中定义的变量。段中定义的变量。汇编程序:汇编程序:.global _sine;声明为外部变量声明为外部变量.sect “sine_tab” ;建立一个独立的段建立一个独立的段_sine:;常数表起始地址常数表起始地址.float 0.0.float 0.015987.float 0.022145C程序:程序:ext

61、ern float sine/声明为外部变量声明为外部变量float *sine_p=sine;/声明一个指针指向该声明一个指针指向该变量变量f=sine_p4; /作为普通数组访问作为普通数组访问sine数组数组7/23/202463山东大学控制学院 张东亮4.4.6 C28x DSP编译器的关键字编译器的关键字 C28x DSP C/C+编编 译译 器器 , 支支 持持 标标 准准 的的 const、register、 volatile等等 关关 键键 字字 , 还还 扩扩 展展 了了 cregister 、interrupt、 far、 near等关键字。等关键字。关键字关键字const

62、 该该关关键键字字可可以以优优化化存存储储器器的的分分配配。加加const 到到任任何何变变量的定义可以确保其内的值不变。量的定义可以确保其内的值不变。7/23/202464山东大学控制学院 张东亮关键字关键字volatile 该关键字所定义的变量是可变的,可以被其他硬件该关键字所定义的变量是可变的,可以被其他硬件修改,而不仅仅只能由修改,而不仅仅只能由C程序修改。优化器会尽量减少存程序修改。优化器会尽量减少存储器的访问,所以有时必须禁止优化,特别是循环控制储器的访问,所以有时必须禁止优化,特别是循环控制变量。例子变量。例子 volatile unsigned int *ctrl; while

63、(*ctrl != 0xff) ; /循环等待,直到循环等待,直到 ctrl 地址的内容为地址的内容为0xff7/23/202465山东大学控制学院 张东亮关键字关键字cregster 该扩展关键字允许高级语言读该扩展关键字允许高级语言读/写控制寄存器。写控制寄存器。 在在F281x C中,中,cregister仅限于中断使能寄存器仅限于中断使能寄存器IER和中断标志寄存器和中断标志寄存器IFR,程序中应有如下声明程序中应有如下声明 extern cregister volatile unsigned int IER; extern cregister volatile unsigned in

64、t IFR; 可以用可以用|(位或)和(位或)和&(位与位与)进行操作,例如进行操作,例如 IFR|=0x100; IFR&=0x100;7/23/202466山东大学控制学院 张东亮关键字关键字interrupt 该扩展关键字用来说明函数是一个中断函数。该扩展关键字用来说明函数是一个中断函数。 中断函数被定义成返回中断函数被定义成返回void类型,而且无参数调用,类型,而且无参数调用,例如,例如,interrupt void int_handler( )unsigned int flags;7/23/202467山东大学控制学院 张东亮关于中断函数关于中断函数中断的使能和屏蔽必须由程序员自己

65、设置。中断的使能和屏蔽必须由程序员自己设置。 中断程序没有参数传递,既使说明,也会被忽略。中断程序没有参数传递,既使说明,也会被忽略。中断处理程序不能被正常的中断处理程序不能被正常的C程序调用。程序调用。为了使中断程序与中断一致,在相应的中断矢量中必须为了使中断程序与中断一致,在相应的中断矢量中必须放置一条转移指令,可以用放置一条转移指令,可以用.sect汇编伪指令建立一个简汇编伪指令建立一个简单的跳转指令表来完成此项功能。单的跳转指令表来完成此项功能。在汇编语言中断程序中,注意在符号名前面加上一个下在汇编语言中断程序中,注意在符号名前面加上一个下划线,例如划线,例如c_int00记为记为_

66、c_int00。中断程序使用的所有寄存器,包括状态寄存器和程序中中断程序使用的所有寄存器,包括状态寄存器和程序中调用函数使用的寄存器都必须予以保护。调用函数使用的寄存器都必须予以保护。7/23/202468山东大学控制学院 张东亮关键字关键字far C/C+编译器的默认寻址空间是编译器的默认寻址空间是64K。所有指针的所有指针的默认大小为默认大小为16位。位。C28x支持的寻址空间达支持的寻址空间达4M字字, 即即22位。加上位。加上far关键字限定符的指针大小为关键字限定符的指针大小为22位,可以寻址位,可以寻址4M字空间。字空间。7/23/202469山东大学控制学院 张东亮#includ

67、e DSP281x_Device.h / DSP281x Header file Include File/定义定义指示灯寄存器地址指示灯寄存器地址和寄存器类型和寄存器类型#define LBDS (*( (unsigned int *)0xc0000) /指定地址的整型变量指定地址的整型变量void Delay(unsigned int nDelay); /延时子程序,函数声明延时子程序,函数声明main( )unsigned int uLED4=1,2,4,8; / /控制字控制字 0001, 0010,0100,1000 数组数组int i;InitSysCtrl( );/初始化初始化D

68、SP运行时钟,自定义函数运行时钟,自定义函数/系统时钟系统时钟150MHz, 使能外设时钟,禁止使能外设时钟,禁止WD while ( 1 )例例4-7 4个个LED指示灯接到指示灯接到DSP通过通过CPLD扩展的外部简单接口电路扩展的外部简单接口电路, 其地其地址为址为0xc0000。用。用C语言编程使之闪烁。语言编程使之闪烁。+3.3V+3.3V1k1kLEDLED4.5 DSP C程序举例程序举例7/23/202470山东大学控制学院 张东亮 for ( i=0;i=0;i- )LBDS=uLEDi;/反向顺序送控制字反向顺序送控制字Delay(256);/延时延时7/23/202471

69、山东大学控制学院 张东亮void Delay(unsigned int nDelay) /延时程序延时程序, 自定义函数自定义函数int ii, jj, kk=0;for ( ii=0; iinDelay; ii+ )for ( jj=0; jj512; jj+ ) kk+; 7/23/202472山东大学控制学院 张东亮#include DSP281x_Device.h / DSP281x Header file Include File/定义定义指示灯寄存器地址指示灯寄存器地址和寄存器类型和寄存器类型void Delay(unsigned int nDelay);/延时子程序,函数声明延时

70、子程序,函数声明#define CTRGR *(int *)0x108000/控制板全局控制寄存器控制板全局控制寄存器#define CTRLR *(int *)0x108007/控制板辅助控制寄存器控制板辅助控制寄存器main() InitSysCtrl();/初始化初始化PLL,CLKOUT=150M, 使能外设时钟,禁止使能外设时钟,禁止WD EALLOW; / GpioMuxRegs.GPBMUX.all=00; / Configure MUXs as digital I/Os GpioMuxRegs.GPBDIR.all=0x00FF; / GPIO DIR select GPIOB

71、7:1 as output EDIS; 例例4-8 1个个LED指示灯接到指示灯接到DSP的通用输入输出接口的通用输入输出接口GPIOB5。用。用C语言编程使之闪烁。语言编程使之闪烁。+3.3V+3.3V1k1kLEDLED7/23/202473山东大学控制学院 张东亮void Delay(unsigned int nDelay) /延时程序延时程序,自定义函数自定义函数int ii,jj,kk=0;for ( ii=0;iinDelay;ii+ ) for ( jj=0;jjPIE控制器控制器-CPU PieCtrlRegs.PIEIER2.all = M_INT4; /GP定时器定时器1使

72、能位于使能位于PIE第第2组第组第4个,将其使能个,将其使能IER |= M_INT2; /使能的使能的PIE第第2组可屏蔽中断组可屏蔽中断2(INT2)EINT; / 开总中断开总中断 LBDS=0;/ 指示灯全灭指示灯全灭while ( 1 ) ;/ 等待中断等待中断interrupt void eva_timer1_isr(void) LBDS= 1;/ 产生方波,最低位指示灯亮灭切换产生方波,最低位指示灯亮灭切换 EvaRegs.EVAIMRA.bit.T1PINT = 1;/ 使能定时器使能定时器1的周期中断的周期中断 EvaRegs.EVAIFRA.bit.T1PINT = 1;/

73、 写写1清除定时器清除定时器1的周期中断标志的周期中断标志 PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; / 清零清零PIEACK中的第中的第2组中断对应位组中断对应位 7/23/202477山东大学控制学院 张东亮思考题与习题思考题与习题1.DSP应用系统的软件开发流程是什么?应用系统的软件开发流程是什么?2.采用采用CCS集成开发环境进行软件开发调试的步骤是什集成开发环境进行软件开发调试的步骤是什么?么?3.DSP的硬件仿真器与软件仿真器有什么异同点?的硬件仿真器与软件仿真器有什么异同点?4.什么是什么是COFF格式?它有什么特点?格式?它有什么特点?5.

74、说明说明.text 段、段、.data段、段、.bss段段分别包含什么内容?分别包含什么内容?6.链接命令文件包括哪些内容?链接命令文件包括哪些内容?7.MEMORY命令和命令和SECTION命令分别有什么作用?命令分别有什么作用?8.DSP C语言有哪些特点?语言有哪些特点?9.C28x DSP编译器有哪些数据类型?编译器有哪些数据类型?7/23/202478山东大学控制学院 张东亮10.如何访问片内外设寄存器的某些位?如何访问片内外设寄存器的某些位?11.如何直接访问存储器单元?如何直接访问存储器单元?12.pragma编译预处理命令有什么用途?编译预处理命令有什么用途?13.C语言与汇编语言混合编程有哪些方法?语言与汇编语言混合编程有哪些方法?14.C28x DSP的的C编译器扩展了哪几个关键字?编译器扩展了哪几个关键字?15. 1个个LED指示灯接到指示灯接到DSP的通用的通用I/O引脚引脚GPIOB4。采。采用通用定时器用通用定时器T1中断方式定时中断方式定时200ms, 用用C语言编程使语言编程使之闪烁之闪烁, XCLKIN=30MHz, SYSCLKOUT=150MHz。7/23/202479山东大学控制学院 张东亮

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

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