DSP第6章 DSP系统的软件设计.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DSP第6章 DSP系统的软件设计

2003.2.16 DSP原理及应用 2.选择硬件开发工具和开发环境 常用的DSP硬件开发平台有DSK(DSP Starter Kit)板、EVM评估板、DSP硬件仿真器。其中DSK板上一般都内置了一个DSP仿真器,将其直接与PC机相连接即可进行开发调试。 当前流行的软件开发工具是CCS(Code Composer Studio)集成开发环境。它可以在Windows操作系统下运行,并包含了DSP软件开发所需要的所有功能,还可以进行其他功能的扩展。 3.源代码文件包括C语言源程序、汇编语言源程序、头文件、CMD链接文件等。 4.在CCS集成开发环境中通过仿真器将可执行目标代码下载到DSP目标系统中,再利用仿真器等调试工具对生成的可执行代码进行在线调试,或使用Simulator软件仿真器对程序进行软件仿真。待程序调试通过后,就可以将调试通过的程序代码利用Hex转换工具转换为二进制文件,再将二进制程序写入到外部的程序存储器中,形成独立运行的DSP系统。 软件开发流程图:见p172图6-1 6.2.1 DSP的C语言编程与通用C语言编程的区别 CCS开发平台中包括了优化的C语言编译器,全面支持C源程序级代码的开发与调试。使用C语言编程能够极大地提高软件开发的速度,增加程序代码的可续性,方便程序的维护和移植。但C语言代码的效率还无法与汇编语言代码的效率相比,5000系列DSP C语言代码的效率大概只有汇编语言程序的60%,这些缺点可以通过内嵌汇编语句,及使用汇编语言编写对时间要求苛刻的程序等方法加以弥补,从而圆满地解决使用C语言编程导致代码效率低问题。 很多情况下要常用混合编程的方法进行DSP的程序设计。一方面能够充分发挥C语言和汇编语言各自的优点;另一方面能够很好地完成DSP系统的软件设计,充分发挥DSP芯片的性能。 6.2.2 C语言的数据结构 1. C54x DSP C语言的数据类型 参见p173表6-1 另外,为了简化书写,用户可以自定义数据类型,自定义数据类型使用typedef类型说明符。例如在CCS中的C:\ti\c5400\dsk5402\include\type.h头文件中定义了如下的用户自定义数据类型。 typedef float f32; //将浮点型数据定义为f32 typedef long s32; //将有符号的长整型数据定义为s32 typedef int s16; //将有符号的整型数据定义为s16 typedef unsigned char u8; //将无符号的字符型数据定义为u8 typedef unsigned int u16; //将无符号的整型数据定义为u16 typedef unsigned long u32; //将无符号的长整型数据定义为u32 用户在以后编写C语言的程序时,可以使用自定义的数据类型f32、s32、s16、u8、u16和u32来定义变量,这样书写程序很方便,又增加了可读性。 2. C语言中常量和变量的定义 在C语言中参与数据运算的数据只有常量和变量两种类型。 1)C语言中常量的定义 为了提高程序的可读性,可以使用#define宏定义来定义符号常量。 一般格式为: #define 符号常量名 字符串 其中符号常量名一般使用大写字母表示,符号常量名与所对应的字符串之间用空格隔开,它把符号常量名定义为指定的字符串。以后在程序中凡出现符号常量名的地方,在进行预编译处理时,都会被替换为所对应的字符串。 例如: #define OK 0 //定义符号常量OK,在程序中出现OK时均会以0代替 #define ERROR -1 //定义符号常量ERROR,在出现ERROR时均会以-1代替 宏定义命令#define不是C语言的语句,因此不能以分号结束。另外,预处理程序对符号常量的处理只是简单的替换,不做语法检查。所以符号常量不占用存储器的位置。 (2)单独定义法:使用不同的寄存器名称分别定义其地址。例如:宏定义 #define DRR20_ADDR 0x20 #define DRR10_ADDR 0x21 #define DRR21_ADDR 0x40 #define DRR11_ADDR 0x41 分别对McBSP0和McBSP1的串行口接收寄存器进行了定义。 统一定义法定义的寄存器用于对二者同时进行访问时比较方便,单独定义法定义的寄存器用于单独访问某个外设时比较方便。C/C++使用指针方式对存储器映像寄存器(MMR)进行访问,并使用“volatile unsigned in

您可能关注的文档

文档评论(0)

138****7331 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档