DSP原理与应用第9章CCS

上传人:汽*** 文档编号:568480301 上传时间:2024-07-24 格式:PPT 页数:61 大小:1.70MB
返回 下载 相关 举报
DSP原理与应用第9章CCS_第1页
第1页 / 共61页
DSP原理与应用第9章CCS_第2页
第2页 / 共61页
DSP原理与应用第9章CCS_第3页
第3页 / 共61页
DSP原理与应用第9章CCS_第4页
第4页 / 共61页
DSP原理与应用第9章CCS_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《DSP原理与应用第9章CCS》由会员分享,可在线阅读,更多相关《DSP原理与应用第9章CCS(61页珍藏版)》请在金锄头文库上搜索。

1、第九章第九章 DSP集成软件开发环境集成软件开发环境第九章第九章 DSP集成软件开发环境集成软件开发环境9.1 CCS集成开发环境集成开发环境9.2 C语言程序基础语言程序基础9.3 混合语言编程混合语言编程9.4 芯片支持库芯片支持库(CSL)9.1 CCS集成开发环境集成开发环境CCS(Code Composer Studio)是TI公司为DSP推出的集成软件开发环境(IDE),提供了配置、建立、调试、跟踪和分析的工具,包括了应用程序开发必需的所有功能,便于对实时信号处理程序的编制和测试,能够加速开发进程,提高工作效率。 CCS是是DSP领域第一个领域第一个完整的、开放型集成完整的、开放型

2、集成开发环境开发环境(IDE)直观、易用直观、易用无需停止无需停止DSP运行即运行即可观察可观察DSP的信息的信息具有实时分析功能开具有实时分析功能开放的环境放的环境可加入第三方插件可加入第三方插件(Plug-Ins)CCS调试界面调试界面CCS调试界面调试界面菜单条菜单条标题区标题区编辑工具条编辑工具条编译工具条编译工具条数据显示数据显示窗口窗口 图形显示图形显示窗口窗口变量观察窗变量观察窗口口C源程序编源程序编辑窗口辑窗口反汇编调试反汇编调试窗口窗口编译运行结果编译运行结果显示窗口显示窗口调试调试工具条工具条工程管理工程管理窗口窗口信号分析图形化信号分析图形化u以自然的格式观察信号以自然的

3、格式观察信号u在变量有效时修改其值在变量有效时修改其值并观察它们的影响并观察它们的影响u多种专用的画图工具多种专用的画图工具n时域频域图时域频域图nFFTnEye diagramnConstellation plotnImage displays 可视化图形可视化图形CCS集成环境的组成集成环境的组成软软件件开开发发流流程程CCS集成开发环境集成开发环境提供一些类似提供一些类似VC的代码编辑功能的代码编辑功能语法高亮显示,自动缩近,文字查找等等语法高亮显示,自动缩近,文字查找等等原程序可以与反汇编同时显示原程序可以与反汇编同时显示CCS项目管理项目管理应用程序按项目来管理,应用程序按项目来管理

4、,按层次以图形化的方式显按层次以图形化的方式显示示*.cmd 文件文件*.h 头文件头文件*.lib 库文件库文件*.c 源程序源程序CCS图形化设置图形化设置各种编译选项,如各种编译选项,如C编译器选项,连接编译器选项,连接器选项等通过图形器选项等通过图形化方式来设置,不化方式来设置,不需要手工添加选项需要手工添加选项1、设置断点、设置断点将光标放置在需要设置断点的程序行前,点击将光标放置在需要设置断点的程序行前,点击Debug Breakpoints,或点,或点击工具栏按钮击工具栏按钮 ,即可完成一个断点的设置,点击工具栏按钮,即可完成一个断点的设置,点击工具栏按钮 可清除所可清除所有的断

5、点。有的断点。2、复位的、复位的3种方法种方法(1) Reset DSP:点击:点击Debug Reset CPU,初始化所有的寄存器内容并暂停,初始化所有的寄存器内容并暂停运行中的程序。使用此命令后,要重新装载运行中的程序。使用此命令后,要重新装载.out 文件后,再执行程序。文件后,再执行程序。(2) Restart:点击:点击Debug Restart ,将,将PC 值恢复到当前载入程序的入口值恢复到当前载入程序的入口地址。地址。(3) Go main:点击:点击Debug Go main,将程序运行到主程序的入口处暂停。,将程序运行到主程序的入口处暂停。3、执行程序的、执行程序的4种方

6、法种方法(1) 连续连续 执行:点击执行:点击Debug Run ,程序运行直到遇到断点为止。,程序运行直到遇到断点为止。(2) 暂停执行:点击暂停执行:点击Debug Halt ,程序停止运行。,程序停止运行。(3) 动画执行:点击动画执行:点击Debug Animate,用户反复运行程序,直到遇到断点,用户反复运行程序,直到遇到断点为止。为止。(4) 自由执行:点击自由执行:点击Debug Run Free ,禁止所有断点运行程序。,禁止所有断点运行程序。 CCS 常用功能常用功能CCS 常用功能常用功能4、单步执行的、单步执行的4 种方法种方法(1) 单步进入:快捷键单步进入:快捷键F8

7、,Debug Step Into,当调试语句不是基本的汇,当调试语句不是基本的汇编指令时,此操作进入语句内部编指令时,此操作进入语句内部(2) 单步执行:点击单步执行:点击Debug Step Over,此命令将函数或子函数当作一条,此命令将函数或子函数当作一条语句执行,不进入内部调试语句执行,不进入内部调试(3) 单步跳出:点击单步跳出:点击Debug Step Out,此命令作用为从子程序中跳出,此命令作用为从子程序中跳出(4) 执行到光标处:快捷键执行到光标处:快捷键Crtl+F10,Debug Run to Cursor,此命令作,此命令作用为将程序运行到光标处用为将程序运行到光标处5

8、、查看内存与变量、查看内存与变量(1) 查看变量:使用查看变量:使用View Watch Window 命令命令(2) 查看寄存器:使用查看寄存器:使用View Registers CPU Registers 命令命令(3) 查看内存:使用查看内存:使用View Memory 命令命令6、显示图形、显示图形 Probe(探点)(探点) 1)适合于算法的开发,功能验证适合于算法的开发,功能验证 2)可以完成这样的功能可以完成这样的功能从一个文件中读入数据到一个从一个文件中读入数据到一个DSP的缓冲区的缓冲区将一个将一个DSP的缓冲区写到文件中的缓冲区写到文件中 3)探点类似于断点,又不同于断点探

9、点类似于断点,又不同于断点运行到运行到Probe point,DSP会停顿下来会停顿下来完成一些动作后(读写文件),程序继续运行完成一些动作后(读写文件),程序继续运行 4)文件输入输出的设置:文件输入输出的设置:FileFile I/O 5) Probe的设置:类似断点的设置(用工具条)的设置:类似断点的设置(用工具条)示例示例0901CCS 常用功能常用功能CCS支持一维图形,二维图象(标准的数据格支持一维图形,二维图象(标准的数据格式),眼图等显示方式式),眼图等显示方式有放大、缩小等功能有放大、缩小等功能可以方便直观地判断算法执行的效果可以方便直观地判断算法执行的效果CCS 常用功能常

10、用功能GELGeneral Extension Language一种类似一种类似C的解释型语言,可实现循环等程序结的解释型语言,可实现循环等程序结构构提供基本的程序控制命令,类似以前提供基本的程序控制命令,类似以前emulator提提供的命令,供的命令,GEL_Go(), GEL_Reset() 等等等等可以制作菜单(可以加入到可以制作菜单(可以加入到CCS主菜单),对话主菜单),对话框,滑动条框,滑动条CCS 常用功能常用功能9.2 C语言程序基础语言程序基础一个最小的C应用程序至少要包含如下几个文件:1. 主程序文件program.c,这个文件必需包含一个main()函数作为C程序的入口点

11、;2. 链接器命令文件link.cmd,这个文件定义了DSP的存储空间以及代码段、数据段是如何分配到这些存储空间的;3. C运行库rts6700.lib,C运行库提供了标准C函数,以及C环境下的初始化函数c_int00()函数。库文件及其源代码位于CCS安装目录下的c6000cgtoolslib子目录下。4. 中断向量表文件vectors.asm,这个文件的代码作为中断服务表,必须由链接命令文件分配到0地址,或由ISTP指向的地址。DSP复位后,首先从0地址开始运行,然后跳转到rts6700.lib库内C运行环境的入口点_c_int00,完成初始化操作,再调用main()函数,执行用户的程序。

12、CCS 常用文件常用文件文件名文件名描述描述program.cC程序源文件程序源文件program.asm汇编程序源文件程序源文件program.sa线性性汇编程序源文件程序源文件vectors.asm中断向量表文件中断向量表文件filename.hC程序的程序的头文件,包含文件,包含DSP/BIOS API 模模块的的头文件文件filename.lib库文件文件project.cmd链接命令文件接命令文件program.obj由源文件由源文件编译或或汇编而得的目而得的目标文件文件program.out经完整的完整的编译、汇编以及以及链接后生成的可接后生成的可执行文件行文件program.ma

13、p经完整的完整的编译、汇编以及以及链接后生成的空接后生成的空间分配文件分配文件project.pjt存存储环境境设置信息的工程文件置信息的工程文件CMD文件 CMD文件由文件由3部分组成:部分组成:输入输出定义:输入输出定义:v*.obj文件:文件: 链接器要链接的目标文件链接器要链接的目标文件v*.lib文件:文件: 链接器要链接的库文件链接器要链接的库文件v*.map文件:链接器生成的交叉索引文件文件:链接器生成的交叉索引文件v*.out文件:文件: 链接器生成的可执行代码链接器生成的可执行代码v链接器选项链接器选项MEMORY命令:描述系统实际的硬件资源命令:描述系统实际的硬件资源SEC

14、TIONS命令:描述命令:描述“段段”如何定位如何定位MEMORY命令描述目标系统的存储空间命令描述目标系统的存储空间MEMORY PMEM: o = 00000000h, l = 00010000hBMEM: o = 00010000h, l = 00030000hMEMORY 命命令令namesoriginsLengthsMEMORY 存储器空间名: o = 十六进制存储器起始地址 , l = 十六进制存储器长度SECTIONS命令描述命令描述“段段”如何定位如何定位SECTIONS .text PMEM .csldata PMEM .stack PMEM .far PMEM .switc

15、h BMEM .tables BMEM .data BMEM .bss BMEM .sysmem BMEM .cinit PMEM .const BMEM .cio BMEMSECTIONS段名段名 存储器空间名存储器空间名-o sample.out/定义输出文件名定义输出文件名-m sample.map/定义存储器空间分配文件名定义存储器空间分配文件名-stack 100 /定义堆栈大小定义堆栈大小-l rts6700.lib /引用库文件引用库文件MEMORYPMEM:o = 00000000hl = 00010000hBMEM:o = 00010000hl = 00030000hSECT

16、IONS .text PMEM .csldata PMEM .stack PMEM .far PMEM .switch BMEM .tables BMEM .data BMEM .bss BMEM .sysmem BMEM .cinit PMEM .const BMEM .cio BMEMCMD 文件示例文件示例CMD 文件常用段名含义文件常用段名含义段名段名描述描述.cinit存放存放C程序中的程序中的变量初量初值和常量和常量.const存放存放C程序中的字符常量、浮点常量和用程序中的字符常量、浮点常量和用const 声声明的常量明的常量.text存放存放C程序的代程序的代码.bss为C程序

17、中的全局和静程序中的全局和静态变量保留存量保留存储空空间.far为C程序中用程序中用far 声明的全局和静声明的全局和静态变量保留空量保留空间.stack为C程序系程序系统堆堆栈保留存保留存储空空间,用于保存返回地,用于保存返回地址、函数址、函数间的参数的参数传递、存、存储局部局部变量和保存中量和保存中间结果果.sysmem用于用于C 程序中程序中malloc、calloc 和和realloc 函数函数动态分分配存配存储空空间SECTION “段段”Section “段段”概念:一块连续的储存空间,用于存放代概念:一块连续的储存空间,用于存放代码块或数据块码块或数据块在编程时,在编程时,“段段

18、”没有绝对定位,每个没有绝对定位,每个“段段”都认为是都认为是从从0地址开始的一块连续的储存空间,所以软件开发人员地址开始的一块连续的储存空间,所以软件开发人员只需要将不同代码块和数据块放到不同的只需要将不同代码块和数据块放到不同的“段段”中,而中,而无需关心这些无需关心这些“段段”究竟定位于系统何处究竟定位于系统何处优点:便于程序的模块化编程;便于工程化管理:可将优点:便于程序的模块化编程;便于工程化管理:可将软件开发人员和硬件开发人员基本上分离开软件开发人员和硬件开发人员基本上分离开重定位:由于所有的重定位:由于所有的“段段”都是从都是从0地址开始,所以程序地址开始,所以程序编译完成后无法

19、直接运行的,要让程序正确运行,必须编译完成后无法直接运行的,要让程序正确运行,必须对对“段段”进行重新定位,这个工作由链接器完成进行重新定位,这个工作由链接器完成cmd文件:文件: MEMORY命令描述系统硬件资源,命令描述系统硬件资源, SECTIONS命令描述软件人员程序中用到的命令描述软件人员程序中用到的“段段”如何如何定位到恰当的硬件资源上定位到恰当的硬件资源上SECTION 伪指令伪指令5个个SECTION伪指令伪指令.bsssymbol,size in word.text.data.sect“section name”symbol .usect“section name”,size

20、 in word其中其中symbol相当于变量名,相当于变量名,size in word保留的存储单元长度(以字为保留的存储单元长度(以字为单位)单位)初始化段和未初始化段初始化段和未初始化段.bss和和.usect为未初始化段,用于为变量、堆栈等保留一块存储空为未初始化段,用于为变量、堆栈等保留一块存储空间间.text、.data和和.sect为初始化段,用于存放代码块或有初值的数为初始化段,用于存放代码块或有初值的数据块据块系统定义的段和用户定义的段系统定义的段和用户定义的段.text、.data和和.bss为系统已定义好的段名为系统已定义好的段名用户根据需要用用户根据需要用. sect和

21、和.usect伪指令来定义段名,创建相应的伪指令来定义段名,创建相应的“段段”汇编程序中,程序员用汇编程序中,程序员用“段段”伪指令来组织程序的代码和数据伪指令来组织程序的代码和数据汇编器对汇编器对“段段”的处理的处理汇编器第一次遇到新汇编器第一次遇到新“段段”时,将该时,将该“段段”的段程序计的段程序计数器(数器(SPC)置为)置为0,并将随后的程序代码或数据顺序,并将随后的程序代码或数据顺序编译进该编译进该“段段”中中汇编器遇到同名汇编器遇到同名“段段”时,将它们合并,然后将随后的时,将它们合并,然后将随后的程序代码或数据顺序编译进该程序代码或数据顺序编译进该“段段”中中当汇编器遇到当汇编

22、器遇到.text、.data和和.sect伪指令时,汇编器伪指令时,汇编器停止将随后的程序代码或数据顺序编译进当前停止将随后的程序代码或数据顺序编译进当前“段段”中,中,而是顺序编译进遇到的而是顺序编译进遇到的“段段”中中当汇编器遇到当汇编器遇到.bss和和.usect伪指令时,汇编器并不结束伪指令时,汇编器并不结束当前当前“段段”,而只是简单地暂时脱离当前,而只是简单地暂时脱离当前“段段”,随后,随后的程序代码或数据仍将顺序编译进当前的程序代码或数据仍将顺序编译进当前“段段”中。中。.bss和和.usect伪指令,可以出现在伪指令,可以出现在.text、.data或或.sect“段段”中的任

23、何位置,它们不会影响这些中的任何位置,它们不会影响这些“段段”的内容的内容链接器对链接器对“段段”的处理的处理链接器对链接器对“段段”的处理有的处理有2个方面:个方面:将输入将输入“段段”组合产生输出组合产生输出“段段”v将多个将多个.obj文件中的同名文件中的同名“段段”合并一个输出合并一个输出“段段”v也可将不同名的也可将不同名的“段段”合并产生一个输出合并产生一个输出“段段”将输出将输出“段段”定位到实际的存储空间中定位到实际的存储空间中vMEMORY命令:命令: 用于扫描系统实际的硬件资源用于扫描系统实际的硬件资源vSECTIONS命令:用于描述程序中定义了哪些命令:用于描述程序中定义

24、了哪些“段段”,这,这些些“段段”是否需要合并?如何合并?合并产生的输出是否需要合并?如何合并?合并产生的输出“段段”定位到实际硬件资源的何处?定位到实际硬件资源的何处?链接器通过链接器通过*.cmd文件来获得上述这些信息文件来获得上述这些信息链接器还将检查各输出链接器还将检查各输出“段段”是否重叠、是否是否重叠、是否超界,避免了人工检查边界带来的隐患超界,避免了人工检查边界带来的隐患C运行环境运行环境 存储模型:存储模型:C程序的代码和数据如何定位程序的代码和数据如何定位系统定义系统定义v.cinit存放存放C程序中的变量初值和常量程序中的变量初值和常量v.const存放存放C程序中的字符常

25、量、浮点常量和用程序中的字符常量、浮点常量和用const声明的声明的常量常量v.switch存放存放C程序中程序中switch语句的跳针表语句的跳针表v.text存放存放C程序的代码程序的代码v.bss为为C程序中的全局和静态变量保留存储空间程序中的全局和静态变量保留存储空间v.far为为C程序中用程序中用far声明的全局和静态变量保留声明的全局和静态变量保留空间空间v.stack为为C程序系统堆栈保留存储空间,用于保存返回地址、程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果函数间的参数传递、存储局部变量和保存中间结果v.sysmem用于用于C程序中程

26、序中malloc、calloc和和realloc函数动态分配存函数动态分配存储空间储空间用户定义用户定义v#pragma CODE_SECTION (symbol, section name)v#pragma DATA_SECTION (symbol, section name)C运行环境运行环境寄存器使用规则寄存器使用规则C编译器如何使用编译器如何使用DSP的寄存器的寄存器函数进入和返回前,寄存器的保护函数进入和返回前,寄存器的保护函数调用规则函数调用规则函数间的参数传递通过寄存器和系统堆栈进行函数间的参数传递通过寄存器和系统堆栈进行调用函数与被调用函数必须对各自的寄存器进行保护调用函数与被

27、调用函数必须对各自的寄存器进行保护从被调用函数返回前,被调用函数必须归还所有已占用的堆从被调用函数返回前,被调用函数必须归还所有已占用的堆栈空间栈空间C和和ASM混合编程混合编程C和和ASM混合编程时,必须遵循寄存器使用规则和函数调用混合编程时,必须遵循寄存器使用规则和函数调用规则规则被被C调用的调用的ASM函数,其函数名前应加函数,其函数名前应加“_”中断服务程序中断服务程序ASM编写的中断服务程序必须对所有用到寄存器进行保护,编写的中断服务程序必须对所有用到寄存器进行保护,以免破坏以免破坏C运行环境运行环境C编写的中断服务程序应用编写的中断服务程序应用interrupt关键字声明关键字声明

28、C运行环境运行环境系统初始化系统初始化在运行在运行C程序前,必须建立程序前,必须建立C运行环境,此任务由运行环境,此任务由C引引导程序导程序_c_int00完成完成_c_int00包含在库函数中,包含在库函数中,build时自动将其链接进可时自动将其链接进可执行程序中,程序的入口地址必须设为执行程序中,程序的入口地址必须设为_c_int00起始起始地址地址_c_int00的源程序存放在由的源程序存放在由rts.src分离出来的分离出来的boot.asm中,用户可根据需要修改中,用户可根据需要修改v设置堆栈指针设置堆栈指针v初试化全局变量:将初试化全局变量:将.cinit”段段“中数据拷贝到中数

29、据拷贝到.bss”段段“中中v调用调用C程序的主函数程序的主函数main()软件编译流程软件编译流程.CPP file.ASM file.C file.ASM file.ASM file.OBJ fileAssembler.OBJ file.OBJ file.OUT file.HEX fileLinker目标文件地址是浮动的,能被重定位目标文件地址是浮动的,能被重定位链接器用链接器用.cmd文件对链接目标,进行重定位文件对链接目标,进行重定位列出目标文件、库文件和链接器选项列出目标文件、库文件和链接器选项用用MEMORY命令描述目标系统存储空间配置命令描述目标系统存储空间配置用用SECTION

30、S命令描述命令描述“段段”如何定位如何定位Hex转换程序也使用转换程序也使用cmd文件,配置转换选项文件,配置转换选项中断向量表中断向量表 .ref _timer0_isr .ref _exint4_isr .ref _exint6_isr .ref _c_int00 .global RESET_RST .sect vectors“RESET_RST: mvkl .S2 _c_int00, B0 mvkh .S2 _c_int00, B0 B .S2 B0 NOP 5NMI_RST: NOP 8RESV1: NOP 8RESV2: NOP 8INT4: b _exint4_isr NOP 7I

31、NT5: NOP 8 INT6: b _exint6_isrNOP 7INT7: NOP 8INT8: NOP 8INT9: NOP 8INT10: NOP 8INT11: NOP 8INT12: NOP 8INT13: NOP 8INT14: b _timer0_isrNOP 7INT15: NOP 8C 语言语法接近自然语言,其可读性强、便于理解,在编语言语法接近自然语言,其可读性强、便于理解,在编制、修改、实现算法方面比用汇编语言开发容易。制、修改、实现算法方面比用汇编语言开发容易。汇编语言掌控系统硬件的能力强于汇编语言掌控系统硬件的能力强于C 语言,设计出来的程语言,设计出来的程序更加

32、贴近硬件特性,能将硬件效能发挥到极致。序更加贴近硬件特性,能将硬件效能发挥到极致。 因此,一般情况下用因此,一般情况下用C 语言设计应用程序的总体框架、解语言设计应用程序的总体框架、解决人机接口和对速度效率要求不太高的复杂算法,用汇编决人机接口和对速度效率要求不太高的复杂算法,用汇编语言设计强调速度的算法。语言设计强调速度的算法。9.3 混合语言编程混合语言编程C语言和汇编语言的混合编程有三种形式:语言和汇编语言的混合编程有三种形式:1. 在编写在编写C语言代码中插入汇编语句,只需在汇编语句两语言代码中插入汇编语句,只需在汇编语句两边加上双引号和括号,在括号前面加上标识边加上双引号和括号,在括

33、号前面加上标识asm,如:,如:asm(“ NOP 5”);2. 在编写在编写C代码的过程中调用直接映射为内联的代码的过程中调用直接映射为内联的C6000指指令的特殊函数,内联函数用前下划线表示,使用时同调用令的特殊函数,内联函数用前下划线表示,使用时同调用C语言的库函数一样调用它,如:语言的库函数一样调用它,如:m = _int_abs(n);3. 用汇编代码编写独立的函数,在用汇编代码编写独立的函数,在C代码中直接调用代码中直接调用混合编程的方法混合编程的方法1. 采用采用C语言和汇编语言混合编程时,定义了一套严格的语言和汇编语言混合编程时,定义了一套严格的寄存器规则,调用函数保护了寄存器

34、寄存器规则,调用函数保护了寄存器A0A9和和B0B9,但,但当使用到寄存器当使用到寄存器A10A15或或B10B15的时候,则必须自行的时候,则必须自行对它们进行保护。在默认情况下:对它们进行保护。在默认情况下:A3用作返回结构指针寄存器用作返回结构指针寄存器B3用作被调用函数返回地址寄存器用作被调用函数返回地址寄存器A15用作帧指针寄存器用作帧指针寄存器B14用作数据页指针寄存器用作数据页指针寄存器B15用作堆栈指针寄存器用作堆栈指针寄存器混合编程的接口规范混合编程的接口规范2. 调用函数将参数传递到被调用函数中,前十个参数将被从调用函数将参数传递到被调用函数中,前十个参数将被从左到右依次放

35、入寄存器左到右依次放入寄存器A4、B4、A6、B6、A8、B8、A10、B10、A12和和B12,如果传递的参数是长型、双精度型或者是如果传递的参数是长型、双精度型或者是长双精度型,则将参数依次放入寄存器组长双精度型,则将参数依次放入寄存器组A5:A4、B5:B4、A7:A6等,并将剩下的变量按相反的顺序放在堆栈里。注等,并将剩下的变量按相反的顺序放在堆栈里。注意,如果传递的参数是一个结构类型的参数,则传递的是该意,如果传递的参数是一个结构类型的参数,则传递的是该结构类型的地址。结构类型的地址。3. 如果在如果在C/C+调用函数中做了正确的函数返回声明,则被调用函数中做了正确的函数返回声明,则

36、被调用的汇编函数可以返回有效值。如果返回值是整型或调用的汇编函数可以返回有效值。如果返回值是整型或32位位的浮点型,则放在寄存器的浮点型,则放在寄存器A4中返回;如果返回值是双精度中返回;如果返回值是双精度或是长双精度型,则放在或是长双精度型,则放在A5:A4中返回;如果返回值是一中返回;如果返回值是一个结构类型,则将其结构的地址放在个结构类型,则将其结构的地址放在A3中返回。中返回。 混合编程的接口规范混合编程的接口规范4. 对于只在汇编语言模块中用到的变量的标识符,不能从下对于只在汇编语言模块中用到的变量的标识符,不能从下划线开始。划线开始。任何一个在汇编语言中声明的对象都要使其在任何一个

37、在汇编语言中声明的对象都要使其在C/C+中是可中是可访问的,那么在汇编语言中必须用访问的,那么在汇编语言中必须用.def 或或.global将其声明将其声明为外部变量。为外部变量。同样在汇编语言中要引用同样在汇编语言中要引用C/C+函数或对象时,必须用函数或对象时,必须用.ref或或.global将将C/C+对象声明。对象声明。中断子程序必须把该子程序将要用到的所有寄存器进行入栈中断子程序必须把该子程序将要用到的所有寄存器进行入栈处理;处理;除了全局变量的初始化外,汇编语言的模块不得因为任何目除了全局变量的初始化外,汇编语言的模块不得因为任何目的而使用的而使用.cinit段;段;汇编代码的结束

38、需用指令汇编代码的结束需用指令 “B B3” 将程序执行从被调用函数将程序执行从被调用函数返回到返回到C语言调用函数中。语言调用函数中。混合编程的接口规范混合编程的接口规范打开工程打开工程ComplexDelay.pjt,可以看到该工程包含如下文,可以看到该工程包含如下文件:件:umain.c:C语言编写的主程序文件,调用使用汇编语言语言编写的主程序文件,调用使用汇编语言编写的延时程序编写的延时程序asm_delay()函数进行精确延时函数进行精确延时udelay.asm:汇编语言编写的延时函数:汇编语言编写的延时函数示例示例0903混合编程示例程序混合编程示例程序9.4 芯片支持库芯片支持库

39、CSLu为什么要设计为什么要设计CSLDSP片上外设种类及其应用日趋复杂片上外设种类及其应用日趋复杂提供一组标准的方法用于访问和控制片上外设提供一组标准的方法用于访问和控制片上外设免除用户编写配置和控制片上外设所必需的定义和免除用户编写配置和控制片上外设所必需的定义和代码代码u什么是什么是CSL:Chip Support Library用于配置、控制和管理用于配置、控制和管理DSP片上外设片上外设已为已为C6000和和C5000系列系列DSP设计了各自的设计了各自的CSL库库CSL库函数大多数是用库函数大多数是用C语言编写的,并已对代码语言编写的,并已对代码的大小和速度进行了优化的大小和速度进

40、行了优化CSL库是可裁剪的:即只有被使用的库是可裁剪的:即只有被使用的CSL模块才会模块才会包含进应用程序中包含进应用程序中CSL库是可扩展的:每个片上外设的库是可扩展的:每个片上外设的API相互独立,相互独立,增加新的增加新的API,对其他片上外设没有影响对其他片上外设没有影响CSL 的特点的特点u片上外设编程的标准协议:片上外设编程的标准协议:定义一组标准的定义一组标准的APIs:函数、数据类型、宏函数、数据类型、宏u对硬件进行抽象,提取符号化的片上外设描述对硬件进行抽象,提取符号化的片上外设描述定义一组宏,用于访问和建立寄存器及其域值定义一组宏,用于访问和建立寄存器及其域值u基本的资源管

41、理基本的资源管理对多资源的片上外设进行管理对多资源的片上外设进行管理u已集成到已集成到DSP/BIOS中中通过图形用户接口通过图形用户接口GUI对对CSL进行配置进行配置u使片上外设容易使用使片上外设容易使用缩短开发时间,增加可移植性缩短开发时间,增加可移植性CSL 的结构的结构CSL中,中,每一个外每一个外设都有一个都有一个对应的的API模模块,如:,如:直接存取器存取(直接存取器存取(EDMA)API模模块多通道多通道缓冲串行端口(冲串行端口(MsBCP)API模模块这种结构允许对这种结构允许对CSL进行扩展,因为可以添加新的进行扩展,因为可以添加新的API模模块作为新的外设形式。块作为新

42、的外设形式。 通用外设模块通用外设模块外设外设 (PER) 描述描述 Include File Module Support SymbolEDMA Enhanced direct memory access module csl_edma.h EDMA_SUPPORT EMIF External memory interface module csl_emif.h EMIF_SUPPORT GPIO General-Purpose input/output module csl_gpio.h GPIO_SUPPORTHPI Host port interface module csl_hpi.

43、h HPI_SUPPORT I2C InterIntegrated circuit module csl_i2c.h I2C_SUPPORT IRQ Interrupt controller module csl_irq.h IRQ_SUPPORT McASP Multichannel audio serial port module csl_mcasp.h MCASP_SUPPORT McBSP Multichannel buffered serial port module csl_mcbsp.h MCBSP_SUPPORT TIMER Timer module csl_timer.h T

44、IMER_SUPPORT CSL 命名规则和数据类型命名规则和数据类型对象类型对象类型 名称名称 Naming Convention Function PER_funcName()Variable PER_varNameMacro PER_MACRO_NAMETypedef PER_TypenameFunction Argument funcArg Structure Member memberName Data Type Description Uint8 unsigned char Uint16 unsigned short Uint32 unsigned int Uint40 unsig

45、ned long Int8 char Int16 short Int32 int Int40 long 通用的通用的CSL 函数函数handle = PER_open( channelNumber, priority flags ) 功能:打开一个外设功能:打开一个外设 通道,根据标志执行相应的操作。使用通道前必须调用此通道,根据标志执行相应的操作。使用通道前必须调用此函数,返回一个唯一的设备句柄用于后续函数,返回一个唯一的设备句柄用于后续API调用。优先级调用。优先级(priority)参数仅适用参数仅适用于于DAT模块。模块。PER_config( handle, *configStruc

46、ture ) 功能:将配置结构的值写入外设寄存器。使用整型常量、整型变量、功能:将配置结构的值写入外设寄存器。使用整型常量、整型变量、CSL符号常符号常量量 PER_REG_DEFAULT 、PER_REG_RMK宏生成的合并域值进行初始化。宏生成的合并域值进行初始化。PER_configArgs( handle, regval_1, . . . regval_n ) 功能:写值功能:写值 (regval_n) 到外设寄存器。可写值包括:整型常量、整型变量、到外设寄存器。可写值包括:整型常量、整型变量、CSL符号常量符号常量 PER_REG_DEFAULT 、PER_REG_RMK宏生成的合并

47、域值。宏生成的合并域值。PER_reset( handle ) 功能:复位外设,将其所有值恢复到上电缺省值。功能:复位外设,将其所有值恢复到上电缺省值。 PER_close( handle ) 功能:关闭由功能:关闭由PER_open()函数打开的外设通道。通道寄存器恢复上电初始值,清函数打开的外设通道。通道寄存器恢复上电初始值,清除所有未执行的中断。除所有未执行的中断。通过寄存器来实现外设初始化通过寄存器来实现外设初始化CSL提供了两种函数来初始化外设的寄存器:提供了两种函数来初始化外设的寄存器:1、PER-config() 用来初始化控制用来初始化控制PER 外设的寄存器,其中外设的寄存器

48、,其中PER 是是CSL模块之一。这个函数需要一个地址来作为他的模块之一。这个函数需要一个地址来作为他的参数。这个地址指出了这个结构的位置,他代表了外设寄参数。这个地址指出了这个结构的位置,他代表了外设寄存器的值。每一个外设模块都定义了他的配置结构数据类存器的值。每一个外设模块都定义了他的配置结构数据类型,包括型,包括PER-config()函数。函数。 PER_Config MyConfig = reg0, reg1, ; PER_config(&MyConfig); 2、PER-configArgs() 允许将个别寄存器的值传给函数的变允许将个别寄存器的值传给函数的变量,然后将独立的值传给

49、寄存器。量,然后将独立的值传给寄存器。PER_configArgs(reg0, reg1, );通用通用CSL宏宏1、PER 表示外设,如表示外设,如 EDMA2、REG 表示寄存器名,如表示寄存器名,如PRICTL0,AUXCTL3、FIELD 表示寄存器域,如表示寄存器域,如 ESIZE4、regval 表示外设域生成宏表示外设域生成宏PER-FMK()产生的整型常量,产生的整型常量,整型变量,符号常量整型变量,符号常量(PER_REG_DEFAULT),或者融合域值,或者融合域值5、fieldval 表示的是整常量,整型变量,或者符号常数表示的是整常量,整型变量,或者符号常数(PER_R

50、EG_FIELD_SYMVAL)6、x 表示整型常量,整型变量表示整型常量,整型变量7、sym 表示符号常量表示符号常量通用通用CSL宏宏PER_REG_RMK( fieldval_n, . . . fieldval_0 ) 功能:产生外设寄存器值;功能:产生外设寄存器值;_RMK宏基于位域,使构建寄存器值变得很简单。宏基于位域,使构建寄存器值变得很简单。_RMK宏使用规则:宏使用规则:域必须可写。首先指定域参数的最高有效位(域必须可写。首先指定域参数的最高有效位(MSB),不管用到与否,必须包含所有可写域),不管用到与否,必须包含所有可写域的值。如果所传值超出特定域所允许的位宽,的值。如果所

51、传值超出特定域所允许的位宽,_RMK宏将截断该域值。宏将截断该域值。PER_RGET(REG ) 功能:返回外设寄存器值。功能:返回外设寄存器值。 PER_RSET(REG, regval ) 功能:将值写入外设寄存器。功能:将值写入外设寄存器。PER_FMK(REG, FIELD , fieldval ) 功能:可与其他功能:可与其他_FMK宏的结果进行宏的结果进行或或(OR)操作后,生成移位的操作后,生成移位的 fieldval 值,对值,对REG寄存器进行寄存器进行初始化。初始化。 作为作为_RMK宏的替代者,该宏允许初始化宏的替代者,该宏允许初始化REG寄存器中的几个域,而不像寄存器中

52、的几个域,而不像_RMK宏那样宏那样必须初始化必须初始化REG寄存器的所有域。寄存器的所有域。PER_FGET(REG, FIELD ) 功能:返回外设寄存中指定域(功能:返回外设寄存中指定域(FIELD)的值的值 。 PER_FSET(REG, FIELD, fieldval ) 功能:将功能:将 fieldval写入外设寄存器中指定域(写入外设寄存器中指定域(FIELD)。)。PER_REG_ADDR(REG ) 功能:如果可用,取得外设寄存器(功能:如果可用,取得外设寄存器(REG)的内存地址(或子地址)的内存地址(或子地址)PER_FSETS(REG, FIELD, sym ) 功能:

53、将符号值写入外设指定域中。功能:将符号值写入外设指定域中。PER_FMKS(REG, FIELD, sym macro) 功能:可与其他功能:可与其他_FMK/_FMKS宏的结果进行宏的结果进行或或(OR)操作,生成移位的操作,生成移位的符号值符号值,对,对REG寄存器进寄存器进行初始化。行初始化。通用通用CSL宏宏 PER_ADDRH (h, REG ) Returns the address of a memory-mapped register for a given handle. PER_RGETH (h, REG ) Returns the value of a register

54、for a given handle. PER_RSETH (h, REG, x ) Sets the register value to x for a given handle. PER_FGETH (h, REG, FIELD ) Returns the value of the field for a given handle. PER_FSETH (h, REG, FIELD, x ) Sets the field value to x for a given handle. PER_FSETSH (h, REG, FIELD, SYM ) Sets the field value

55、to the symbol value for a given handle. CSL符号常量值符号常量值PER_REG_DEFAULT 寄存器的缺省值,复位操作后对应的寄存器值寄存器的缺省值,复位操作后对应的寄存器值或者复位失效后归零。或者复位失效后归零。PER_REG_FIELD_SYMVAL 该符号常量用于指定特定外设寄存器该符号常量用于指定特定外设寄存器中某个域的值。符号值的详细信息请参见附录中某个域的值。符号值的详细信息请参见附录B:CSL Registers PER_REG_FIELD_DEFAULT 域的缺省值,复位操作后对应的寄存域的缺省值,复位操作后对应的寄存器值或者复位失效

56、后归零。器值或者复位失效后归零。 使用使用CSL句柄句柄使用函数使用函数PER_open()来打开设备,获得一个句柄来打开设备,获得一个句柄 Handle,若打开设备,若打开设备失败,那么失败,那么PER_open()函数返回函数返回 INV 。使用函数使用函数PER_close()来关闭设备。来关闭设备。 EDMA_Handle myEdma;/* Defines a DMA_Handle object, myEdma */* Once defined, the CSL handle object is initialized by a call to PER_open.*/myEdma =

57、 EDMA_open (EDMA_CHA0, EDMA_OPEN_RESET);/* Open EDMA channel 0 */* The call to DMA_open initializes the handle, myDma. This handle can then beused in calls to other API functions.*/if(myEdma != INV) EDMA_start (myEdma); /* Begin transfer */EDMA_close (myEdma); /* Free DMA channel */DSP/BIOS操作系统操作系统D

58、SP/BIOS是一个实时操作系统是一个实时操作系统RTOS提供通常的提供通常的RTOS的功能(任务调度,任务间通讯)的功能(任务调度,任务间通讯)提供驱动程序模型,层次化地设计应用程序提供驱动程序模型,层次化地设计应用程序DSP/BIOS以以CCS插件的形式提供一些实时分析工具插件的形式提供一些实时分析工具程序跟踪:观察任务的调度、切换程序跟踪:观察任务的调度、切换性能监视:观察性能监视:观察CPU的负载的负载状态统计:对事件做统计状态统计:对事件做统计提供提供RTDX(实时数据交换),不打断(实时数据交换),不打断DSP运行的情况下实现运行的情况下实现主机和主机和DSP的数据交换的数据交换D

59、SP/BIOS 功能功能u抢先型实时、多任务操作系统内核基于优先级的、抢先型实时调度程序支持多线程管理与调度支持4种线程类型:HWI、SWI、TSK、IDL支持3种作业间的通信方式:Mailboxes、Semaphores、Queues支持周期函数,方便实现固定时间间隔的数据采集,简化多速率系统的设计提供存储器管理,实现动态存储器分配u实时分析模块分析信息实时获取、传输和显示,为早期的系统级排错提供帮助DSP/BIOS模块中内含分析信息的实时获取功能分析信息的实时传输由RTDX( Real-Time Data Exchange)技术实现,完成目标DSP与主机之间的实时通信,C6000 RTDX

60、的带宽为20KByte,RTDX是在idle作业期间完成,所以对程序执行速度的影响最小主机可以显示:事件记录、线程执行顺序、执行次数的最大值或平均值和总的CPU负载等信息DSP/BIOS 使用使用u为了方便使用,TI提供一个可视化的配置工具,用于配置实际系统中所需的DSP/BIOS模块uDSP/BIOS是可裁剪的,只有被应用程序使用的模块才会被链接到应用程序中uDSP/BIOS开销小:代码大小:1K WordsCPU占用:1MIPSuDSP/BIOS采用标准的API,所以不同系列DSP之间的移植容易uDSP/BIOS集成在CCS中,无需使用许可费 简单程序开发流程(简单程序开发流程(1)建立项

61、目)建立项目ProjectNew 选择一个目录位置,生成一个项目文件test.pjt简单程序开发流程(简单程序开发流程(2)添加文件)添加文件ProjectAdd Files to Project添加文件(.c,.lib,.cmd,.sa,.asm)简单程序开发流程(简单程序开发流程(3)代码编辑)代码编辑双击项目窗口的文件名,开始编辑源程序简单程序开发流程(简单程序开发流程(4)设置编译选项)设置编译选项ProjectOptions简单程序开发流程(简单程序开发流程(5)Build 查找错误查找错误ProjectBuild简单程序开发流程(简单程序开发流程(5)简单的调试)简单的调试加载程序

62、FileLoad Program设置断点,通过Watch Window观察变量单步执行简单程序开发流程(简单程序开发流程(6)Profile(剖析)(剖析)ProfileEnable Clock,start new session基本应用程序框架基本应用程序框架int main( ) int num = 1; Sys_Initialize( ); while(1) switch(num) case 1: num = 2;break;case 2: num = 1;break; default:break; ; 在主程序在主程序main()函数里,函数里,首先进行初始化,首先进行初始化,随后进入死循环随后进入死循环while(1),在中断函数里响应各种事件,在中断函数里响应各种事件,然后在死循环然后在死循环while(1)里执行里执行各种相应的任务各种相应的任务

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

最新文档


当前位置:首页 > 资格认证/考试 > 自考

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