使用CCS进行DSP编程(二)--CCS编程入门

上传人:206****923 文档编号:45884725 上传时间:2018-06-19 格式:PDF 页数:14 大小:519.17KB
返回 下载 相关 举报
使用CCS进行DSP编程(二)--CCS编程入门_第1页
第1页 / 共14页
使用CCS进行DSP编程(二)--CCS编程入门_第2页
第2页 / 共14页
使用CCS进行DSP编程(二)--CCS编程入门_第3页
第3页 / 共14页
使用CCS进行DSP编程(二)--CCS编程入门_第4页
第4页 / 共14页
使用CCS进行DSP编程(二)--CCS编程入门_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《使用CCS进行DSP编程(二)--CCS编程入门》由会员分享,可在线阅读,更多相关《使用CCS进行DSP编程(二)--CCS编程入门(14页珍藏版)》请在金锄头文库上搜索。

1、使用使用 CCS 进行进行 DSP 编程(二)编程(二) 实现实现 FFT pacificxu 现在讨论使用 TI 公司的 CCS 进行 DSP 编程,首先假定读者对 CCS 的使用已经比较了解,如果读者还不太了解,请参阅使用 CCS 进行 DSP 编程(一)CCS 编程入门及其他 CCS 的学习文档。 作数字信号处理的同志们总是喜欢用 FFT 来对信号处理系统做检验, 下面用闻亭公司的 C6xP 板、 C6xPa 板硬件实现 FFT 算法, 本算法对其他的 C6x 板同样实用(只是硬件资源稍微有差异) ,并通过闻亭公司的 PCI 仿真器对目标板加载运行,运行结果在 CCS 中可视化显示。 首

2、先启动 CCS Setup,对仿真器硬件进行设置,本人使用的是闻亭公司 PCI的仿真器自带的驱动 wtxds6xxxpci.dvr,设置画面如下: 下面就可以运行 CCS 了,在 CCS 中,创建一个新的 Project, 我的工程文件放置在如下的目录中,读者可以放在自己喜欢的目录下: 双击“+”展开 fft.mak,可以看到整个工程文件是空的, 我们需要把*.c、*.cmd、*.lib 文件添加到工程文件中, 首先是*.c 文件,本例中是 test.c 文件, 同样的方法可以用来添加其他的文件。双击工程中的源文件,会在右边的窗口中看见原码: 如果*.c 文件不存在,可以在 CCS 集成开发环

3、境中生成, 本例中 test.c 的主程序源代码如下: 调用的子程序有三个: 从上面的源程序可以看到,使用 CCS 的 C 语言编程跟普通的 C 语言编程没有太大的区别,这正是 TI 所追求的,兼容的 ANSI C 标准和如此的编译高效率也正是 TI 的领先之处。读者可以不必学习烦琐的汇编和线性汇编,直接对数字信号处理的算法进行研究,同时享受高速的处理速度,只有在对速度要求极严的条件下,不得不使用汇编和线性汇编,那时读者已经有了一定的基础,再学习汇编语言已是水到渠成。而使用 C 语言编程是大势所趋。 如果有人对算法本身感兴趣,请参阅胡广书老师的数字信号处理理论、算法与实现 第 5 章 快速傅立

4、叶变换,这里不在对算法进行展开讨论。 程序的结构本身很简单,使用过 C 语言的朋友一看就明白,不需要再做进一步的说明,需要指出几点, 1. 本程序中的 math.h 与 Visual C+中的 math.h 是不同的,TI 的 CCS 专门为数学计算作了运行时库,是利用硬件对计算作加速的,与 Visual C+中的速度是不可同日而语的。因此如果我们需要用到相应的“头文件” ,就应该在 TI 的目录中查找,同时要包含相应的运行时库(*.lib)文件,我一直在强调这一点, 初学者往往忽略这一点而出现许多编译链接错误。下面的演示中还会看到这一点。 2. 本例是以定点 DSP 芯片C6201 为例的。

5、如果对定点运算还不太熟悉,只好找些文档来学习一下了, 这里也不再展开。 在浮点 DSP 芯片 C6701中本程序可以不加修改地运行, 但浮点 DSP 芯片中可以直接进行有硬件支持的浮点运算,速度会更快。 3. CCS 的 C 语言中的数据类型是与硬件相关的,使用时需要注意。 char 8 bits short 16 bits int 32 bits long 40 bits float 32 bits double 64 bits TMS320C6000 Online Programmers Guide (SPRH048) Copyright?2000 Texas Instruments 接下

6、来继续进行,向工程中添加*.cmd 文件。读者现在应该会执行这个操作了,如果没有就自己造一个吧,也可以拿别人的来改造一下。其中有些不太明白也没有关系,但是在与具体的硬件相关的地方还是要搞明白。 首先要搞明白目标板“target”上到底有多少存储空间,包括 DSP 芯片内部有多大空间,目标板上有多少外部存储器(SDRAM、SBSRAM、双口 RAM) ,以及它们的其始地址和长度,以我使用的闻亭公司C6Xpa 板为例, 存储器类型 起始地址 存储器大小 结束地址 SDRAM 0x2000000 4M*32bit (0x400000*4) 0x3000000 SBSRAM 0x400000 128k

7、*32bit (0x20000*4) 0x480000 DPRAM 0x1400000 4k*32bit (0x1000*4) 0x1404000 在这里还要强调一点,是“*32bit” ,因此 SDRAM 的结束地址是 0x2000000 + 0x400000*4 = 0x3000000 而不是 0x2000000 + 0x400000 = 0x2400000 其他存储空间也是如此。许多同志们忽略了这一点,在使用数组、指针及对空间地址操作时造成“不可理解”的错误, “我往仫个地址写数怎么找不到,#%#&%坏 了! ” ,好好研究一下,就不好意思这么快下结论了。 下面是我用的*.cmd 文件的

8、源代码,需要的话可以拿去用喔。 里面“.vec、.text .”的东西可以先不考虑,留给 CCS 去处理好了。只要保证定义的空间在物理上存在就可以了。 心急的朋友会开始编译了, 又会出现下面的结果, “$%*&,又忘了加运行时库! ” 。 (下次再忘就不应该了! ) 。 这里展开一点,有些朋友说: “我包含了头文件,调用中断函数intr_hook()时怎么也编译链接通不过, 去掉这一句就通过了。 ” 大家现在就应该知道怎么处理这个问题了吧?熟悉 C 语言编程的同志都知道“*.lib”的实质,中断函数 intr_hook()在“dev6x.lib”里。加上这个库问题估计该解决了吧! TI 的运行

9、时库都有具体的说明,如果大家实在懒得去看,又不想知其所以然,有一个绝招在此: “Find all *.lib in TI 目录”一个一个试一下好了。 我们的问题解决了,接下来看一看能不能运行,执行对不对。 装入“fft.out”文件, 然后运行程序(F5) (热键、工具条、菜单都可以用啦) ,看一下结果对不对,顺便体验一下 CCS 提供的“Very Good”功能: 弹出对话框,设置一下吧, 会出现下面的画面, 修改一下属性, 下面好看多了, 里面的三个谱峰看起来跟信号里造的三个频率的信号好象是对应的吧。 在源文件里进行些修改,例如将信号频率改为两个, 重新编译、链接、执行、显示,中间的谱线不见了。 好象我们成功了! (哗哗哗哗哗) 总结:在这里演示了使用 CCS 的 C 语言实现 FFT 程序,仅仅是实现而已。一个实际的系统,需要做许多优化处理,对核心算法进行详细的分析、规划,初学时可以先不考虑这些,等熟悉后在进行深入研究。

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

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

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