




已阅读5页,还剩67页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 第4章DSP的软件开发与C语言编程 本章内容 4 1DSP开发工具与软件开发流程4 2集成开发环境CCS4 3DSP的C工程文件4 4DSPC语言程序设计基础4 5DSPC程序举例 2 4 1DSP开发工具与软件开发流程 1 DSP开发工具硬件TIXDS510 ExtendedDevelopmentSystem 硬件仿真器 DSK DSPStarterKit 初学者开发套件 瑞泰ICETEK 5100PP USBDSP开发系统 评估板 DSP教学实验系统 开发工具包括硬件 软件两部分 硬件部分主要是仿真器 Emulator 软件主要是集成开发环境CCS CodeComposerStudio DSP开发系统 仿真器 有PCI插卡式 并口式 USB接口式 目前多用USB接口式 即DSP开发系统通过USB接口与PC机相连 开发系统通过JTAG 基于扫描的仿真 接口与用户目标板相连 实现DSP软硬件调试与程序烧写 3 DSP评估板 也称为EVM板 目标板 DEMO板 实验板等 包括基本的DSP芯片及必要的电源 时钟 复位电路外 还经常包括用于程序调试的片外扩展存储器 扩展的A D D A转换器 键盘显示电路 EEPROM RS232串行接口 SPI接口 CAN接口驱动电路 简单应用电路等 4 2407DSP评估板原理框图 5 2407EVM板的主要性能指标如下 1 TMS320LF2407A 运行速度40MIPS 2 片内RAM2 5KW 3 扩展RAM64KW 4 片内16路10位A D转换器 采样时间375ns 5 扩展的4路12位D A转换器DAC7617 6 UART串行接口 符合RS 232C标准 7 16路PWM输出 8 CAN总线接口 9 用户开关与指示灯 10 片内32KWFlash存储器 11 JTAG接口 用于仿真调试与Flash程序烧写 12 5V电源输入 板上3 3V电源管理 6 7 2 软件开发流程 软件开发流程框图 8 软件开发流程 1 编辑 生成源程序 asm c 头文件 h 与命令文件 cmd 2 编译与汇编 生成目标文件 obj 公共目标文件COFF格式 及列表文件 lst 3 连接 生成可执行代码文件 out 及映射文件 map 4 调试 通过JTAG接口下载到目标系统EVM 5 通过JTAG接口将程序固化烧写到Flash存储器 9 软件开发工具主要有源程序编辑器 Editor 编译器 Compiler 汇编器 Assembler 链接器 Linker 归档器 Archiver 运行时支持库 Run Time SupportLibrary 库建立程序 Library buildUtility HEX转换程序 HexConversionUtility 3 软件工具 10 绝对列表器 AbsoluteLister 和交叉引用列表器 Cross ReferenceLister 调试工具 Debuggingtools C 名称复原程序 C NameDemanglingUtility GEL语言 GeneralExtensionLanguage 通用扩展语言 DSP BIOS等 11 1 CCS软件安装与设置 CCS2 0 C2000 CCS3 3 驱动程序设置 Simulator PC模拟软件仿真 Emulator 实时DSP硬件仿真 4 2集成开发环境CCS 12 CCS运行主窗口 13 CCS主要工具 源程序编辑器 Editor C编译器 CCompiler 汇编器 Assembler 连接器 Linker 调试工具 Debug 十六进制转换公用程序 HexConversionUtility 14 2 CCS主要菜单与功能 典型的CCS运行界面如图所示 CCS的功能可以通过菜单或工具条按钮实现 主要的菜单项有File Edit View Project Debug等 这些菜单的使用与常用的集成开发软件VisualC 等使用方法基本一样 15 典型CCS运行界面 16 CodeComposerStudio ComponentsRobust Easy to UseDevelopmentEnvironment 17 Real timeDebugging Allowsyoutohaltinnon criticalcodefordebugwhiletime criticalinterruptscontinuetobeserviced Accessmemoryandregisterswithoutstoppingtheprocessor Implementedinsilicon notbyadebugmonitor Easy to use noapplicationresourcesrequired Haltandsinglestepnon timecriticalcode Time criticalinterruptsarestillserviced InControl IfTheProcessorStops TheSystemCanGoOutOfControl 18 File菜单 19 Project菜单 20 View菜单 21 Debug菜单 22 3 采用CCS开发应用程序的步骤 创建一个新工程 project 编辑源程序 asm c 与连接命令文件 cmd 将文件添加到该工程中 asm c h cmd 编译汇编连接 装载程序 调试程序 程序固化 23 调试程序 连续运行与单步运行 设置断点 查看与修改存储单元 查看与修改寄存器内容 观察和编辑变量 程序Animate运行和数据图形显示 24 C工程 Project 几种基本文件 CCS工程文件 扩展名为 pjt 由CCS自动生成 在CC CodeComposer 软件环境中 扩展名为 mak 源程序 汇编语言文件 asm C文件 c 头文件 h 定义寄存器映射地址 用户自定义的常量等 例如用于C程序的片内外设寄存器地址定义头文件f2407 c h 用于汇编语言程序的片内外设寄存器定义头文件F2407REGS A h等 链接命令文件 cmd 库文件 lib C24x运行时支持库为rts2xx lib 目标文件 obj COFF公共目标文件格式 列表文件 lst 汇编生成的文件 映射文件 map 存储器分配 可执行代码文件 out 4 3DSP的C工程文件 25 4 3 1公共目标文件格式COFF 编译 汇编与链接程序建立的目标文件采用共用目标文件格式 CommonObjectFileFormat COFF 便于模块化编程 管理代码段和存储器 即不必为程序代码或变量指定目标地址 汇编器根据命令用适当的段将各部分程序代码和数据连在一起 构成目标文件 链接器分配存储单元 即把各个段重新定位到目标存储器中 段 section 也称为块 是目标文件的最小单位 是在存储器中占据连续空间的代码和数据块 各段相互独立 26 目标文件中段与目标存储器之间的关系 汇编器的COFF文件格式包括三个默认的段 text段 即程序段 该段通常包含可执行代码即程序 data段 即数据段 该段通常包含已初始化的数据 bss段 即保留数据空间段 该段通常为未初始化的数据保留空间 27 汇编器和链接器允许用户建立和链接自定义的段 所有段可以分为初始化段和未初始化段两类 初始化段包含程序代码和数据 未初始化段则为未初始化的数据保留存储空间 汇编命令 sect和 usect可以分别用来创建自定义的初始化段和未初始化段 C编译器对C程序编译后也产生初始化段和未初始化段两类 具体的段名稍有不同 除了不使用 data段之外 还产生一些新的段 28 编译器对C语言编译后除了生成2个基本段 即 text bss外 还生成其他一些段 可分为初始化段和未初始化段 初始化段包含可执行代码或常数表 C编译器产生的初始化段有 pint const text cinit switch text段 包含可执行代码和常量 constant cinit段和 pint段 包含初始化变量和常量 const段 包含串常量 全局变量 静态变量的声明和初始化 switch段 包含switch语句表 29 未初始化段用于保留存储器 通常为RAM 空间 C编译器产生的为初始化段有 bss stack sysmem段 bss段 为全局和静态变量保留空间 stack段 为C系统堆栈 用于保护函数的返回地址 分配局部变量 调用函数时传递参数 sysmem段 为动态存储器分配保留空间 malloc函数使用 30 初始化段链接 31 未初始化段链接 32 存储器映射表 33 4 3 2链接命令文件 CCS的链接器可以有很多选项 如 l 包含库文件 stack 定义堆栈 o 定义输出文件 等 并且将用户软件定义的段与目标系统存储器物理地址对应关系定义清楚 链接器选项的实现通常采用工程选项菜单或链接器命令文件 cmd 两种方法 编写一个链接器命令文件 将所有链接器选项写在文件中 并将此文件加入到工程 这样CCS在进行编译链接时 会自动按照链接器命令文件中的选项进行 有两条链接器命令MEMORY和SECTIONS可以实现对程序存储器和数据存储器空间的分配 MEMORY命令定义目标存储器的配置 SECTIONS命令定义编程段与目标存储器的关系 34 MEMORY命令 MEMORY命令定义目标系统中可以使用的存储器范围 每个存储器范围具有名字 起始地址和长度 一般形式为MEMORY PAGE0 name origin constant length constant PAGEn name origin constant length constant PAGEn 定义存储器空间 n 0 254 通常PAGE0定义程序存储器 PAGE1定义数据存储器 name 存储器范围名字 可以是1 8个字符 origin或简写为o 存储器范围的起始地址 length或简写为l 存储器范围的长度 35 SECTIONS命令 SECTIONS命令用于将输出各段定位到所定义的存储器 一般形式为SECTIONS name property property name property property 在段名之后是是特性列表 定义段的内容以及是怎样分配的 段的特性 property 是装载位置 运行位置 输入段 段类型等 通常的特性符号 表示输出段装载位置 36 4 4DSPC语言程序设计基础 4 4 1数据类型4 4 2C语言运算符与基本语句4 4 3函数4 4 4指针4 4 5编译预处理命令4 4 6C语言与汇编语言混合编程4 4 7C28xDSP编译器的关键字 37 C语言程序设计优缺点 汇编语言程序设计 执行速度快 开发周期长 移植性和可读性差 C语言程序设计 开发周期短 移植性和可读性好 执行速度可以满足要求 38 C28xDSP具有优化的C编译器 它支持ANSIC标准 还具有一些不同于标准C的特征 DSP的基本数据类型如表所示 还具有数组 结构 联合等构造类型数据 4 4 1数据类型 39 TMS320C24xC的数据类型 40 4 4 2C语言运算符与基本语句 1 C语言运算符 2 C语言基本语句 C语言运算符有算术运算符 关系运算符 逻辑运算符 位操作运算符等 不同的运算符可以有不同的优先级 运算对象个数与结合方向 C语句有控制语句 表达式语句 函数调用语句 空语句和复合语句五类 控制语句有9种 41 与普通的C语言程序类似 DSPC程序是由若干模块化的函数构成 函数是C程序的基本模块 子程序就是由函数来实现的 用户可以根据需要定义自己的功能函数 也可以调用C编译器提供的标准函数 库函数 来完成某种特定的功能 注意函数调用的规则 4 4 3函数 42 C函数的一般格式为类型函数名 形式参数及其类型表 变量声明部分 执行语句部分 一个函数在程序中可以三种形态出现 函数定义 Definition 函数调用和函数声明 Declaration 函数定义相当于汇编语言中的一般子程序 函数调用相当于调用子程序 函数定义和函数调用不分先后 但若调用在定义之前 那么在调用前必须先进行函数声明 函数声明是一个没有函数体的函数定义 而函数调用则要求有函数名和实际参数表 43 可以用指针的方法访问变量 用指针访问数组 结构 联合变量非常方便 4 4 4指针 C语言中访问片内外数据存储器或外设寄存器 可以用指针的方法实现 例如 一种方法定义volatileunsignedint IMR volatileunsignedint 0 x0004这时 IMR为指针 则给寄存器IMR赋值可以用以下语句 IMR 0 x0010或者 另一种方法定义defineIMR volatileunsignedint 0 x0004这时 IMR为宏名 则给寄存器IMR赋值可以用以下语句IMR 0 x0010 44 C语言用指针访问数据存储器 或片内外设寄存器 可以用指针方法实现 一般将这些定义放到一个头文件 使用时 用编译预处理命令include包含该头文件即可 45 例 将DSP的数据存储器300H开始的16个单元复制到200H开始的单元 main inti unsignedint p1 p2 p3 定义3个指向无符号整型的指针p1 unsignedint 0 x300 用指针方式访问存储单元p2 unsignedint 0 x200 for i 0 p3 p1 i 16 i p3 p3 i 0 x300 0 x30F单元分别赋值0 15for i 0 p3 p2 i 16 i p3 p3 0 x1234 0 x200 0 x20F单元均赋值0 x1234for i 0 i 16 i p1 p2 p2 p1 将300H开始的16个单元复制到200H开始的单元while 1 46 宏定义 define definePI3 14159 defineUint16unsignedint typedefunsignedintUint16 defineEINTasm clrcINTM EINT defineIMR volatileunsignedint 0 x0004 定义一个宏代表中断屏蔽寄存器IMR 4 4 5编译预处理 文件包含 include include include f2407 c h 1 宏定义 文件包含与条件编译 47 条件编译 ifdef标识符程序段1 else程序段2 endif 48 pragma是一类编译预处理命令 directive 通知编译预处理器如何处理函数 C24xC C 支持如下pragma命令 CODE SECTION func sectionname DATA SECTION symbol sectionname INTERRUPT func FUNC EXT CALLED func FAST CALL func 2 pragma命令 49 CODE SECTION代码段它为函数func在一个名为sectionname的段 section 中指定空间 将一个代码对象连接到一个不同于 text段的空间时 该语法非常有用 例如charbufferA 80 pragmaCODE SECTION funA codeA charfunA inti voidmain charc c funA 1 charfunA inti returnbufferA i 50 DATA SECTION数据段它为符号symbol在一个名为sectionname的段中指定空间 将一个数据对象连接到一个不同于 bss段的空间时 该语法非常有用 例如 pragmaDATA SECTION bufferB my sect charbufferB 512 数据块bufferB被定位于my sect段中 my sect段在 cmd文件中规定物理地址 51 4 4 6C语言与汇编语言混合编程 在C程序中直接嵌入汇编语句 独立的C模块和汇编模块接口 独立编写C程序与汇编程序 分别编译 汇编生成目标代码模块 然后用连接器连接起来 从C程序中访问汇编程序变量 52 1 在C程序中直接嵌入汇编语句 C程序嵌入汇编语句是一种直接的C模块和汇编模块接口方法 可以在C程序中实现用C语言难以实现的一些硬件控制功能 另一方面 也可以用这种方法在C程序中的关键部分用汇编语句代替C语句以优化程序 这种方法的一个缺点是它比较容易破坏C环境 因为C编译器在编译嵌入了汇编语句的C程序时并不检查或分析所嵌入的汇编语句 直接在C语言程序中相应位置嵌入汇编语句 只需在汇编语句加上双引号和小括号 前面加asm标识符号 双引号内第一个字符应是空格 即 asm 汇编语句 例如asm NOP defineEINTasm CLRCINTM 开放中断EINT 53 2 独立的C模块和汇编模块接口 在编写独立的汇编程序时 必须注意以下几点 1 不论是用C语言编写的函数还是用汇编语言编写的函数 都必须遵循寄存器使用规则 2 必须保护函数要用到的几个特定寄存器 3 中断程序必须保护所有用到的寄存器 4 从汇编程序调用C函数时 第一个参数 最左边 必须放入累加器A中 剩下的参数按自右向左的顺序压入堆栈 5 调用C函数时 注意C函数只保护了几个特定的寄存器 而其他寄存器可以自由使用 6 长整型和浮点数在存储器中存放的顺序是低位字在高地址 高位字在低地址 54 7 如果函数有返回值 返回值存放在累加器中 8 汇编语言模块不能改变由C模块产生的 cinit段 如果改变其内容将会引起不可预测的后果 9 编译器在所有标识符 函数名 变量名等 前加下划线 10 任何在汇编程序中定义的对象或函数 如果需要在C程序中访问或调用 则必须用汇编指令 global定义 55 3 从C程序中访问汇编程序变量 从C程序中访问在汇编程序中定义的变量或常数 可以分为以下3种情况 1 访问在 bss段中定义的变量 2 访问不在 bss段中定义的变量 3 对于在汇编程序中用 set和 global伪指令定义的全局常数 也可以使用特殊的操作从C程序中访问它们 56 例4 5 在C程序中访问在 bss段中定义的变量 汇编程序 bss var 1 定义变量 global var 声明为外部变量C程序 externintvar 声明为外部变量var 1 访问变量 57 例4 6 在C程序中访问不在 bss段中定义的变量 汇编程序 global sine 声明为外部变量 sect sine tab 建立一个独立的段 sine 常数表起始地址 float0 0 float0 015987 float0 022145C程序 externfloatsine 声明为外部变量float sine p sine 声明一个指针指向该变量f sine p 4 作为普通数组访问sine数组 58 4 4 6C24xDSP编译器的关键字 C28xDSPC C 编译器 支持标准的const register volatile等关键字 还扩展了cregister interrupt等关键字 关键字const该关键字可以优化存储器的分配 加const到任何变量的定义可以确保其内的值不变 59 关键字volatile该关键字所定义的变量是可变的 可以被其他硬件修改 而不仅仅只能由C程序修改 优化器会尽量减少存储器的访问 所以有时必须禁止优化 特别是循环控制变量 例子volatileunsignedint ctrl while ctrl 0 xff 循环等待 直到ctrl地址的内容为0 xff 60 关键字cregster该扩展关键字允许高级语言读 写控制寄存器 在C24xC中 cregister仅限于中断使能寄存器IER和中断标志寄存器IFR 程序中应有如下声明externcregistervolatileunsignedintIER externcregistervolatileunsignedintIFR 可以用 位或 和 61 关键字interrupt该扩展关键字用来说明函数是一个中断函数 中断函数被定义成返回void类型 而且无参数调用 例如 interruptvoidint handler unsignedintflags 62 关于中断函数 中断的使能和屏蔽必须由程序员自己设置 中断程序没有参数传递 既使说明 也会被忽略 中断处理程序不能被正常的C程序调用 为了使中断程序与中断一致 在相应的中断矢量中必须放置一条转移指令 可以用 sect汇编伪指令建立一个简单的跳转指令表来完成此项功能 在汇编语言中断程序中 注意在符号名前面加上一个下划线 例如c int0记为 c int0 中断程序使用的所有寄存器 包括状态寄存器和程序中调用函数使用的寄存器都必须予以保护 63 XF指示灯闪烁C程序 xfdemo c include f2407 c h 2407DSP片内外设寄存器定义头文件voidDelay unsignedintnDelay 延时子程序 函数声明main SCSR1 0 x0200 设置时钟为2倍频 CLKIN 10MHz CLKOUT 20MHz 并禁止外设WDCR 0 xe8 禁止看门狗定时器 例4 71个LED指示灯连接到DSP的XF引脚 用C语言编程使之闪烁 4 5DSPC程序举例 64 while 1 asm clrcxf LED亮Delay 500 调用延时函数 延时500msasm setcxf LED灭Delay 500 调用延时函数 65 voidDelay unsignedintnDelay 自定义延时函数 CLKOUT 20MHz 延时约nDelay 1ms inti j k 0 for i 0 i nDelay i for j 0 j 1100 j k 66 例4 10 利用通用定时器1中断定时1ms 使IOPE1引脚上产生周期为1s的方波 令一个LED闪烁 CLKIN 20MHz CLKOUT 40MHz include f2407 c h 包含头文件 voidinterruptgptimer1 中断服务函数声明voidgpt1 init 定时器T1初始化函数声明unsignedintnCount 1 变量声明 67 main WDCR 0 xe8 关闭看门狗 SCSR1 0 x02fc 设置DSP运行频率为40MHz 2倍频 使能外设时钟MCRC 等中断 68 voidgpt1 init void T1初始化函数 EVAIMRA 0 x80 使能T1PINT定时器1周期中断 EVAIFRA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物联网工程师继续教育考试年试题大全
- 2025装饰装修工程劳务作业承包合同
- 服装导购招聘考试服装知识与销售技巧测试题
- 海水养殖日本对虾创新创业项目商业计划书
- 智慧娱乐超算系统创新创业项目商业计划书
- 大豆卵磷脂保健品创新创业项目商业计划书
- 期货委托合同(标准版)
- 2025员工全日制劳动合同
- 2025年安装合同的范本
- 2025年文化娱乐项目合作合同协议
- 职高课件模板
- 【生物】第四节 激素调节课件-2025-2026学年人教版生物八年级上册
- 卫生院安全生产培训课件
- 医院信息安全保密培训课件
- 物流紧急事件应急预案方案
- 期中专题复习-词汇句型训练-2025-2026学年 译林版2024 英语八年级上册 原卷
- 2025年全国中小学校科普知识竞赛题库(+答案)
- 2.2创新永无止境教学课件 2025-2026学年度九年级上册 道德与法治 统编版
- 幼儿创意玉米课件
- 矿山爆破作业安全培训课件
- 2025-2026学年九年级英语上学期第一次月考 (四川成都专用) 2025-2026学年九年级英语上学期第一次月考 (四川成都专用)解析卷
评论
0/150
提交评论