DSP软件开发与C语言编程.ppt

上传人:max****ui 文档编号:6338408 上传时间:2020-02-23 格式:PPT 页数:79 大小:2.29MB
返回 下载 相关 举报
DSP软件开发与C语言编程.ppt_第1页
第1页 / 共79页
DSP软件开发与C语言编程.ppt_第2页
第2页 / 共79页
DSP软件开发与C语言编程.ppt_第3页
第3页 / 共79页
点击查看更多>>
资源描述
2020 2 23 山东大学控制学院张东亮 1 第4章DSP的软件开发与C语言编程 本章内容 4 1DSP开发工具与软件开发流程4 2集成开发环境CCS4 3DSP的C工程文件4 4DSPC语言程序设计基础4 5DSPC程序举例 2020 2 23 山东大学控制学院张东亮 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软硬件调试与程序烧写 2020 2 23 山东大学控制学院张东亮 3 DSP评估板 也称为EVM板 目标板 DEMO板 实验板等 包括基本的DSP芯片及必要的电源 时钟 复位电路外 还经常包括用于程序调试的片外扩展存储器 扩展的A D D A转换器 键盘显示电路 EEPROM RS232串行接口 SPI接口 CAN接口驱动电路 简单应用电路等 F2812DSP评估板 2020 2 23 山东大学控制学院张东亮 4 F2812DSP评估板原理框图 开发系统与评估板 2020 2 23 山东大学控制学院张东亮 5 2812EVM板的主要性能指标如下 1 TMS320F2812 运行速度150MIPS 2 片内RAM18K字 3 扩展RAM64K字 4 片内16路12位A D转换器 最大采样速率12 5MSPS 5 扩展的4路12位D A转换器DAC7617 6 两路UART串行接口 符合RS 232C标准 7 16路PWM输出 8 CAN总线标准接口 9 用户开关与指示灯 10 片内128K字Flash存储器 带128位加密位 11 IEEE1149 1兼容的逻辑扫描电路即JTAG接口 用于仿真调试 12 5V电源输入 板上3 3V 1 8V电源管理 2020 2 23 山东大学控制学院张东亮 6 2020 2 23 山东大学控制学院张东亮 7 2 软件开发流程 软件开发流程框图 2020 2 23 山东大学控制学院张东亮 8 软件开发流程 1 编辑 生成源程序 asm c 头文件 h 与命令文件 cmd 2 编译与汇编 生成目标文件 obj 公共目标文件COFF格式 及列表文件 lst 3 连接 生成可执行代码文件 out 及映射文件 map 4 调试 通过JTAG接口下载到目标系统EVM 5 通过JTAG接口将程序固化烧写到Flash存储器 2020 2 23 山东大学控制学院张东亮 9 软件开发工具主要有源程序编辑器 Editor 编译器 Compiler 汇编器 Assembler 链接器 Linker 归档器 Archiver 运行时支持库 Run Time SupportLibrary 库建立程序 Library buildUtility HEX转换程序 HexConversionUtility 3 软件工具 2020 2 23 山东大学控制学院张东亮 10 绝对列表器 AbsoluteLister 和交叉引用列表器 Cross ReferenceLister 调试工具 Debuggingtools C 名称复原程序 C NameDemanglingUtility GEL语言 GeneralExtensionLanguage 通用扩展语言 DSP BIOS等 2020 2 23 山东大学控制学院张东亮 11 1 CCS软件安装与设置 CCS2 0 C2000 CCS3 3 驱动程序设置 Simulator PC模拟软件仿真 Emulator 实时DSP硬件仿真 4 2集成开发环境CCS 2020 2 23 山东大学控制学院张东亮 12 CCS运行主窗口 2020 2 23 山东大学控制学院张东亮 13 CCS主要工具 源程序编辑器 Editor C编译器 CCompiler 汇编器 Assembler 连接器 Linker 调试工具 Debug 十六进制转换公用程序 HexConversionUtility 2020 2 23 山东大学控制学院张东亮 14 2 CCS主要菜单与功能 典型的CCS运行界面如图所示 CCS的功能可以通过菜单或工具条按钮实现 主要的菜单项有File Edit View Project Debug等 这些菜单的使用与常用的集成开发软件VisualC 等使用方法基本一样 2020 2 23 山东大学控制学院张东亮 15 典型CCS运行界面 2020 2 23 山东大学控制学院张东亮 16 CodeComposerStudio ComponentsRobust Easy to UseDevelopmentEnvironment 2020 2 23 山东大学控制学院张东亮 17 Real timeDebugging Allowsyoutohaltinnon criticalcodefordebugwhiletime criticalinterruptscontinuetobeserviced Accessmemoryandregisterswithoutstoppingtheprocessor Implementedinsilicon notbyadebugmonitor Easy to use noapplicationresourcesrequired Haltandsinglestepnon timecriticalcode Time criticalinterruptsarestillserviced InControl IfTheProcessorStops TheSystemCanGoOutOfControl 2020 2 23 山东大学控制学院张东亮 18 File菜单 2020 2 23 山东大学控制学院张东亮 19 Project菜单 2020 2 23 山东大学控制学院张东亮 20 View菜单 2020 2 23 山东大学控制学院张东亮 21 Debug菜单 2020 2 23 山东大学控制学院张东亮 22 3 采用CCS开发应用程序的步骤 创建一个新工程 project 编辑源程序 asm c 与连接命令文件 cmd 将文件添加到该工程中 asm c h cmd 编译汇编连接 装载程序 调试程序 程序固化 2020 2 23 山东大学控制学院张东亮 23 调试程序 连续运行与单步运行 设置断点 查看与修改存储单元 查看与修改寄存器内容 观察和编辑变量 程序Animate运行和数据图形显示 2020 2 23 山东大学控制学院张东亮 24 C工程 Project 几种基本文件 CCS工程文件 扩展名为 pjt 由CCS自动生成 在CC CodeComposer 软件环境中 扩展名为 mak 源程序 汇编语言文件 asm C文件 c 头文件 h 定义寄存器映射地址 用户自定义的常量等 例如 头文件DSP281x Adc h定义了ADC寄存器 头文件DSP281x PieVec h定义了PIE中断矢量 链接命令文件 cmd 库文件 lib 运行时支持库rts2800 ml lib 目标文件 obj COFF公共目标文件格式 列表文件 lst 汇编生成的文件 映射文件 map 存储器分配 可执行代码文件 out 4 3DSP的C工程文件 2020 2 23 山东大学控制学院张东亮 25 4 3 1公共目标文件格式COFF 编译 汇编与链接程序建立的目标文件采用共用目标文件格式 CommonObjectFileFormat COFF 便于模块化编程 管理代码段和存储器 即不必为程序代码或变量指定目标地址 汇编器根据命令用适当的段将各部分程序代码和数据连在一起 构成目标文件 链接器分配存储单元 即把各个段重新定位到目标存储器中 段 section 也称为块 是目标文件的最小单位 是在存储器中占据连续空间的代码和数据块 各段相互独立 2020 2 23 山东大学控制学院张东亮 26 目标文件中段与目标存储器之间的关系 汇编器的COFF文件格式包括三个默认的段 text段 即程序段 该段通常包含可执行代码即程序 data段 即数据段 该段通常包含已初始化的数据 bss段 即保留数据空间段 该段通常为未初始化的数据保留空间 2020 2 23 山东大学控制学院张东亮 27 汇编器和链接器允许用户建立和链接自定义的段 所有段可以分为初始化段和未初始化段两类 初始化段包含程序代码和数据 未初始化段则为未初始化的数据保留存储空间 汇编命令 sect和 usect可以分别用来创建自定义的初始化段和未初始化段 C编译器对C程序编译后也产生初始化段和未初始化段两类 具体的段名稍有不同 除了不使用 data段之外 还产生一些新的段 2020 2 23 山东大学控制学院张东亮 28 编译器对C语言编译后除了生成2个基本段 即 text bss外 还生成其他一些段 可分为初始化段和未初始化段 初始化段包含可执行代码或常数表 C编译器产生的初始化段有 pint const econst text cinit switch text段 包含可执行代码和常量 constant cinit段和 pint段 包含初始化变量和常量 const段 包含串常量 全局变量 静态变量的声明和初始化 econst段 包含串常量 全局变量 静态变量的声明和初始化 变量由farconst修饰 或用大存储器模型 初始化后放进远 far 存储器 switch段 包含switch语句表 2020 2 23 山东大学控制学院张东亮 29 未初始化段用于保留存储器 通常为RAM 空间 C编译器产生的为初始化段有 bss ebss stack sysmem和 esysmem段 bss段 为全局和静态变量保留空间 ebss段 为全局和静态变量保留空间 变量由far修饰 或用大存储器模型使用 stack段 为C系统堆栈 用于保护函数的返回地址 分配局部变量 调用函数时传递参数 sysmem段 为动态存储器分配保留空间 malloc函数使用 esysmem段 为动态存储器分配保留空间 farmalloc函数使用 2020 2 23 山东大学控制学院张东亮 30 初始化段链接 2020 2 23 山东大学控制学院张东亮 31 未初始化段链接 2020 2 23 山东大学控制学院张东亮 32 存储器映射表 2020 2 23 山东大学控制学院张东亮 33 4 3 2链接命令文件 CCS的链接器可以有很多选项 如 l 包含库文件 stack 定义堆栈 o 定义输出文件 等 并且将用户软件定义的段与目标系统存储器物理地址对应关系定义清楚 链接器选项的实现通常采用工程选项菜单或链接器命令文件 cmd 两种方法 编写一个链接器命令文件 将所有链接器选项写在文件中 并将此文件加入到工程 这样CCS在进行编译链接时 会自动按照链接器命令文件中的选项进行 有两条链接器命令MEMORY和SECTIONS可以实现对程序存储器和数据存储器空间的分配 MEMORY命令定义目标存储器的配置 SECTIONS命令定义编程段与目标存储器的关系 2020 2 23 山东大学控制学院张东亮 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 存储器范围的长度 2020 2 23 山东大学控制学院张东亮 35 SECTIONS命令 SECTIONS命令用于将输出各段定位到所定义的存储器 一般形式为SECTIONS name property property name property property 在段名之后是是特性列表 定义段的内容以及是怎样分配的 段的特性 property 是装载位置 运行位置 输入段 段类型等 通常的特性符号 表示输出段装载位置 2020 2 23 山东大学控制学院张东亮 36 4 4DSPC语言程序设计基础 4 4 1数据类型4 4 2C语言运算符与基本语句4 4 3函数4 4 4指针4 4 5编译预处理命令4 4 6C语言与汇编语言混合编程4 4 7C28xDSP编译器的关键字 2020 2 23 山东大学控制学院张东亮 37 C语言程序设计优缺点 汇编语言程序设计 执行速度快 开发周期长 移植性和可读性差 C语言程序设计 开发周期短 移植性和可读性好 执行速度可以满足要求 2020 2 23 山东大学控制学院张东亮 38 C28xDSP具有优化的C编译器 它支持ANSIC标准 还具有一些不同于标准C的特征 DSP的基本数据类型如表所示 还具有数组 结构 联合等构造类型数据 4 4 1数据类型 2020 2 23 山东大学控制学院张东亮 39 TMS320C28xC的数据类型 1 C28x编译器基本数据类型 2020 2 23 山东大学控制学院张东亮 40 片内外设寄存器通常通过结构与联合变量的方法进行访问 2 结构 例如 GPIOA口的MUX复用控制寄存器可用位段 bitfield 结构表示 structGPAMUX BITS unsignedintPWM1 GPIOA0 1 第0位unsignedintPWM2 GPIOA1 1 unsignedintC2TRIP GPIOA14 1 unsignedintC3TRIP GPIOA15 1 第15位 2020 2 23 山东大学控制学院张东亮 41 例如 GPIOD口的MUX复用控制寄存器结构 structGPDMUX BITS unsignedintT1CTRIP PDPA GPIOD0 1 第0位unsignedintT2CTRIP PDPA GPIOD1 1 1unsignedintrsvd1 3 4 2 保留unsignedintT3CTRIP PDPA GPIOD5 1 5unsignedintT4CTRIP PDPA GPIOD6 1 6unsignedintrsvd2 9 15 7 保留 当一个结构中有效字段 位段 的长度不足16位时 可以加入保留字段 以保证数据的完整性 结构变量的定义与成员变量的引用 例如 structGPDMUX BITSbit bit为GPDMUX BITS类型变量bit T1CTRIP PDPA GPIOD0 1 将D0位定义为PDPA功能 2020 2 23 山东大学控制学院张东亮 42 联合体 也称为共用体 类型 可以将不同类型的数据存放在同一个地方 且占据同样大小的存储空间 例如 定义联合体类型GPDMUX REG unionGPDMUX REG unsignedintall all为无符号整型变量structGPDMUX BITSbit bit为结构型变量 联合变量的定义与成员变量的引用 例如 unionGPDMUX REGGPDMUX GPDMUX为联合类型变量GPDMUX all 1 将D0引脚定义为PDPA功能 其他为数字I O 3 联合 2020 2 23 山东大学控制学院张东亮 43 联合可以出现在结构和数组中 结构和数组也可以出现在联合中 例如 结构类型GPIO MUX REGS structGPIO MUX REGS unionGPAMUX REGGPAMUX unionGPDMUX REGGPDMUX 结构变量的定义与成员变量的引用 例如 structGPIO MUX REGSGpioMuxRegs 表示GpioMuxRegs是结构GPIO MUX REGS的一个变量可以采用点运算符的方法引用各成员变量 GpioMuxRegs GPAMUX all 0 x077F CAP1 3 PWM1 6 T1pwmGpioMuxRegs GPDMUX bit T1CTRIP PDPA GPIOD0 1 PDPAGpioMuxRegs GPDMUX bit T2CTRIP SOCA GPIOD1 0 GPIOD1GpioMuxRegs GPDMUX bit T3CTRIP PDPB GPIOD5 0 GPIOD5GpioMuxRegs GPDMUX bit T4CTRIP SOCB GPIOD6 0 GPIOD6定义GPIOA口时 采用了一条C语句 而定义GPIOD口时 采用了4条C语句 编程风格可以编程者自己决定 2020 2 23 山东大学控制学院张东亮 44 4 4 2C语言运算符与基本语句 1 C语言运算符 2 C语言基本语句 C语言运算符有算术运算符 关系运算符 逻辑运算符 位操作运算符等 不同的运算符可以有不同的优先级 运算对象个数与结合方向 C语句有控制语句 表达式语句 函数调用语句 空语句和复合语句五类 控制语句有9种 2020 2 23 山东大学控制学院张东亮 45 与普通的C语言程序类似 DSPC程序是由若干模块化的函数构成 函数是C程序的基本模块 子程序就是由函数来实现的 用户可以根据需要定义自己的功能函数 也可以调用C编译器提供的标准函数 库函数 来完成某种特定的功能 注意函数调用的规则 4 4 3函数 2020 2 23 山东大学控制学院张东亮 46 C函数的一般格式为类型函数名 形式参数及其类型表 变量声明部分 执行语句部分 一个函数在程序中可以三种形态出现 函数定义 Definition 函数调用和函数声明 Declaration 函数定义相当于汇编语言中的一般子程序 函数调用相当于调用子程序 函数定义和函数调用不分先后 但若调用在定义之前 那么在调用前必须先进行函数声明 函数声明是一个没有函数体的函数定义 而函数调用则要求有函数名和实际参数表 2020 2 23 山东大学控制学院张东亮 47 可以用指针的方法访问变量 用指针访问数组 结构 联合变量非常方便 4 4 4指针 例如 指向结构类型的指针变量pstructGPDMUX BITS p structGPDMUX BITSbit p bit的成员T1CTRIP PDPA GPIOD0可用下述3种形式之一访问bit T1CTRIP PDPA GPIOD0 p T1CTRIP PDPA GPIOD0p T1CTRIP PDPA GPIOD0 2020 2 23 山东大学控制学院张东亮 48 ANSIC新标准增加了一种void 指针类型 即可以定义一个指针变量 但不指定它是指向哪一种数据类型 例unsignedlong Source void 地址 PieVectTableInit被 void 强制成了void 类型 指针Source为unsignedlong类型 例如 描述中断矢量表的指针PINTtypedefunsignedintUint16 定义一种类型Uint16Uint16i typedefinterruptvoid PINT void 指针PINT指向中断函数structPIE VECT TABLE PINTPIE1 RESERVED PINTPIE2 RESERVED 2020 2 23 山东大学控制学院张东亮 49 C语言用指针访问数据存储器 或片内外设寄存器 可以用指针方法实现 例如 从扩展的外设接口读取开关状态 然后输出到扩展的指示灯外设接口 defineLBDS unsignedint 0 xc0000 扩展的外设寄存器 指示灯 defineDIPS unsignedint 0 xc0001 扩展的外设寄存器 开关LBDS DIPS 读取拨码开关状态直接送指示灯显示一般将这些定义放到一个头文件 使用时 用编译预处理命令include包含该头文件即可 2020 2 23 山东大学控制学院张东亮 50 main inti unsignedint px py pz px unsignedint 0 x80000 py unsignedint 0 x80100 for i 0 pz px i 16 i pz pz i for i 0 pz py i 16 i pz pz 0 x1234 for i 0 i 16 i px py py px while 1 例4 3 将数据存储器80000H开始的16个单元复制到80100H开始的单元 2020 2 23 山东大学控制学院张东亮 51 例4 4扩展外部接口 编写C程序将4个开关状态反应到4个指示灯 include DSP281x Device h DSP281xHeadfileIncludeFile 定义指示灯控制寄存器地址和寄存器类型 defineLBDS unsignedint 0 xc0000 定义拨码开关控制寄存器地址和寄存器类型 defineDIPS unsignedint 0 xc0001 main InitSysCtrl 初始化DSP运行时钟 自定义函数while 1 LBDS DIPS 读取拨码开关状态直接送指示灯显示 2020 2 23 山东大学控制学院张东亮 52 宏定义 define definePI3 14159 defineUint16unsignedint typedefunsignedintUint16 defineEINTasm clrcINTM EINT defineEALLOWasm EALLOW 4 4 5编译预处理 文件包含 include include include DSP281x Device h 1 宏定义 文件包含与条件编译 2020 2 23 山东大学控制学院张东亮 53 条件编译 ifdef标识符程序段1 else程序段2 endif 2020 2 23 山东大学控制学院张东亮 54 pragma是一类编译预处理命令 directive 通知编译预处理器如何处理函数 C28xC C 支持如下pragma命令 CODE SECTION func sectionname DATA SECTION symbol sectionname INTERRUPT func FUNC EXT CALLED func FAST CALL func 2 pragma命令 2020 2 23 山东大学控制学院张东亮 55 CODE SECTION代码段它为函数func在一个名为sectionname的段 section 中指定空间 将一个代码对象连接到一个不同于 text段的空间时 该语法非常有用 例如charbufferA 80 pragmaCODE SECTION funA codeA charfunA inti voidmain charc c funA 1 charfunA inti returnbufferA i 2020 2 23 山东大学控制学院张东亮 56 DATA SECTION数据段它为符号symbol在一个名为sectionname的段中指定空间 将一个数据对象连接到一个不同于 bss段的空间时 该语法非常有用 例如 pragmaDATA SECTION bufferB my sect charbufferB 512 数据块bufferB被定位于my sect段中 my sect段在 cmd文件中规定物理地址 2020 2 23 山东大学控制学院张东亮 57 4 4 6C语言与汇编语言混合编程 在C程序中直接嵌入汇编语句 独立的C模块和汇编模块接口 独立编写C程序与汇编程序 分别编译 汇编生成目标代码模块 然后用连接器连接起来 从C程序中访问汇编程序变量 2020 2 23 山东大学控制学院张东亮 58 1 在C程序中直接嵌入汇编语句 C程序嵌入汇编语句是一种直接的C模块和汇编模块接口方法 可以在C程序中实现用C语言难以实现的一些硬件控制功能 另一方面 也可以用这种方法在C程序中的关键部分用汇编语句代替C语句以优化程序 这种方法的一个缺点是它比较容易破坏C环境 因为C编译器在编译嵌入了汇编语句的C程序时并不检查或分析所嵌入的汇编语句 直接在C语言程序中相应位置嵌入汇编语句 只需在汇编语句加上双引号和小括号 前面加asm标识符号 双引号内第一个字符应是空格 即 asm 汇编语句 例如asm NOP defineEINTasm CLRCINTM 开放中断EINT 2020 2 23 山东大学控制学院张东亮 59 2 独立的C模块和汇编模块接口 在编写独立的汇编程序时 必须注意以下几点 1 不论是用C语言编写的函数还是用汇编语言编写的函数 都必须遵循寄存器使用规则 2 必须保护函数要用到的几个特定寄存器 3 中断程序必须保护所有用到的寄存器 4 从汇编程序调用C函数时 第一个参数 最左边 必须放入累加器A中 剩下的参数按自右向左的顺序压入堆栈 5 调用C函数时 注意C函数只保护了几个特定的寄存器 而其他寄存器可以自由使用 6 长整型和浮点数在存储器中存放的顺序是低位字在高地址 高位字在低地址 2020 2 23 山东大学控制学院张东亮 60 7 如果函数有返回值 返回值存放在累加器中 8 汇编语言模块不能改变由C模块产生的 cinit段 如果改变其内容将会引起不可预测的后果 9 编译器在所有标识符 函数名 变量名等 前加下划线 10 任何在汇编程序中定义的对象或函数 如果需要在C程序中访问或调用 则必须用汇编指令 global定义 2020 2 23 山东大学控制学院张东亮 61 3 从C程序中访问汇编程序变量 从C程序中访问在汇编程序中定义的变量或常数 可以分为以下3种情况 1 访问在 bss段中定义的变量 2 访问不在 bss段中定义的变量 3 对于在汇编程序中用 set和 global伪指令定义的全局常数 也可以使用特殊的操作从C程序中访问它们 2020 2 23 山东大学控制学院张东亮 62 例4 5 在C程序中访问在 bss段中定义的变量 汇编程序 bss var 1 定义变量 global var 声明为外部变量C程序 externintvar 声明为外部变量var 1 访问变量 2020 2 23 山东大学控制学院张东亮 63 例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数组 2020 2 23 山东大学控制学院张东亮 64 4 4 6C28xDSP编译器的关键字 C28xDSPC C 编译器 支持标准的const register volatile等关键字 还扩展了cregister interrupt far near等关键字 关键字const该关键字可以优化存储器的分配 加const到任何变量的定义可以确保其内的值不变 2020 2 23 山东大学控制学院张东亮 65 关键字volatile该关键字所定义的变量是可变的 可以被其他硬件修改 而不仅仅只能由C程序修改 优化器会尽量减少存储器的访问 所以有时必须禁止优化 特别是循环控制变量 例子volatileunsignedint ctrl while ctrl 0 xff 循环等待 直到ctrl地址的内容为0 xff 2020 2 23 山东大学控制学院张东亮 66 关键字cregster该扩展关键字允许高级语言读 写控制寄存器 在F281xC中 cregister仅限于中断使能寄存器IER和中断标志寄存器IFR 程序中应有如下声明externcregistervolatileunsignedintIER externcregistervolatileunsignedintIFR 可以用 位或 和 2020 2 23 山东大学控制学院张东亮 67 关键字interrupt该扩展关键字用来说明函数是一个中断函数 中断函数被定义成返回void类型 而且无参数调用 例如 interruptvoidint handler unsignedintflags 2020 2 23 山东大学控制学院张东亮 68 关于中断函数 中断的使能和屏蔽必须由程序员自己设置 中断程序没有参数传递 既使说明 也会被忽略 中断处理程序不能被正常的C程序调用 为了使中断程序与中断一致 在相应的中断矢量中必须放置一条转移指令 可以用 sect汇编伪指令建立一个简单的跳转指令表来完成此项功能 在汇编语言中断程序中 注意在符号名前面加上一个下划线 例如c int00记为 c int00 中断程序使用的所有寄存器 包括状态寄存器和程序中调用函数使用的寄存器都必须予以保护 2020 2 23 山东大学控制学院张东亮 69 关键字farC C 编译器的默认寻址空间是64K 所有指针的默认大小为16位 C28x支持的寻址空间达4M字 即22位 加上far关键字限定符的指针大小为22位 可以寻址4M字空间 2020 2 23 山东大学控制学院张东亮 70 include DSP281x Device h DSP281xHeaderfileIncludeFile 定义指示灯寄存器地址和寄存器类型 defineLBDS unsignedint 0 xc0000 指定地址的整型变量voidDelay unsignedintnDelay 延时子程序 函数声明main unsignedintuLED 4 1 2 4 8 控制字0001 0010 0100 1000数组inti InitSysCtrl 初始化DSP运行时钟 自定义函数 系统时钟150MHz 使能外设时钟 禁止WDwhile 1 例4 74个LED指示灯接到DSP通过CPLD扩展的外部简单接口电路 其地址为0 xc0000 用C语言编程使之闪烁 4 5DSPC程序举例 2020 2 23 山东大学控制学院张东亮 71 for i 0 i 0 i LBDS uLED i 反向顺序送控制字Delay 256 延时 2020 2 23 山东大学控制学院张东亮 72 voidDelay unsignedintnDelay 延时程序 自定义函数 intii jj kk 0 for ii 0 ii nDelay ii for jj 0 jj 512 jj kk 2020 2 23 山东大学控制学院张东亮 73 include DSP281x Device h DSP281xHeaderfileIncludeFile 定义指示灯寄存器地址和寄存器类型voidDelay unsignedintnDelay 延时子程序 函数声明 defineCTRGR int 0 x108000 控制板全局控制寄存器 defineCTRLR int 0 x108007 控制板辅助控制寄存器main InitSysCtrl 初始化PLL CLKOUT 150M 使能外设时钟 禁止WDEALLOW GpioMuxRegs GPBMUX all 00 ConfigureMUXsasdigitalI OsGpioMuxRegs GPBDIR all 0 x00FF GPIODIRselectGPIOB7 1asoutputEDIS 例4 81个LED指示灯接到DSP的通用输入输出接口GPIOB5 用C语言编程使之闪烁 2020 2 23 山东大学控制学院张东亮 74 voidDelay unsignedintnDelay 延时程序 自定义函数 intii jj kk 0 for ii 0 ii nDelay ii for jj 0 jj 512 jj kk CTRGR 0 初始化ICETEK CTRCTRGR 0 x80 CTRGR 0 CTRLR 0 关闭东西方向的交通灯CTRLR 0 x40 关闭南北方向的交通灯CTRGR 2 while 1 GpioDataRegs GPBDAT bit GPIOB5 0 Delay 10 GpioDataRegs GPBDAT bit GPIOB5 1 Delay 10 2020 2 23 山东大学控制学院张东亮 75 例4 9 1个LED指示灯接到DSP通过扩展的外部简单接口电路的最低位 其地址为0 xc0000 采用通用定时器T1中断方式定时200ms 用C语言编程使之闪烁 即引脚上产生周期为400ms的方波 XCLKIN 30MHz SYSCLKOUT 150MHz include DSP281x Device h DSP281x寄存器头文件 defineLBDS unsignedint 0 xc0000 定义指示灯寄存器地址interruptvoideva timer1 isr void voidEVA Timer1 定时器初始化 EvaRegs GPTCONA all 0 初始化EVATimer1EvaRegs T1PR 0 x9895 定时周期为5 12us T1PR 1 0 2sEvaRegs EVAIMRA bit T1PINT 1 使能定时器1的周期中断EvaRegs EVAIFRA bit T1PINT 1 写1清除定时器1的周期中断标志EvaRegs T1CNT 0 x0000 计数寄存器从0开始EvaRegs T1CON all 0 x1740 连续增计数 128分频 打开定时器 2020 2 23 山东大学控制学院张东亮 76 main InitSysCtrl 初始化DSP运行时钟 时钟频率150MHzEALLOW SysCtrlRegs HISPCP all 0 x0003 高速时钟频率 25MHzEDIS DINT 关闭总中断IER 0 x0000 清中断使能IFR 0 x0000 清中断标志InitPieCtrl 初始化PIE控制寄存器InitPieVectTable 初始化PIE中断向量表EVA Timer1 初始化EVATimer1EALLOW PieVectTable T1PINT 2020 2 23 山东大学控制学院张东亮 77 依次使能各级中断 外设中相应中断位 PIE控制器 CPUPieCtrlRegs PIEIER2 all M INT4 GP定时器1使能位于PIE第2组第4个 将其使能IER M INT2 使能的PIE第2组可屏蔽中断2 INT2 EINT 开总中断LBDS 0 指示灯全灭while 1 等待中断 interruptvoideva timer1 isr void LBDS 1 产生方波 最低位指示灯亮灭切换EvaRegs EVAIMRA bit T1PINT 1 使能定时器1的周期中断EvaRegs EVAIFRA bit T1PINT 1 写1清除定时器1的周期中断标志PieCtrlRegs PIEACK all PIEACK GROUP2 清零PIEACK中的第2组中断对应位 2020 2 23 山东大学控制学院张东亮 78 思考题与习题 DSP应用系统的软件开发流程是什么 采用CCS集成开发环境进行软件开发调试的步骤是什么 DSP的硬件仿真器与软件仿真器有什么异同点 什么是COFF格式 它有什么特点 说明 text段 data段 bss段分别包含什么内容 链接命令文件包括哪些内容 MEMORY命令和SECTION命令分别有什么作用 DSPC语言有哪些特点 C28xDSP编译器有哪些数据类型 2020 2 23 山东大学控制学院张东亮 79 如何访问片内外设寄存器的某些位 如何直接访问存储器单元 pragma编译预处理命令有什么用途 C语言与汇编语言混合编程有哪些方法 C28xDSP的C编译器扩展了哪几个关键字 1个LED指示灯接到DSP的通用I O引脚GPIOB4 采用通用定时器T1中断方式定时200ms 用C语言编程使之闪烁 XCLKIN 30MHz SYSCLKOUT 150MHz
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!