使用CCS进行DSP编程(二)--CCS编程入门_第1页
使用CCS进行DSP编程(二)--CCS编程入门_第2页
使用CCS进行DSP编程(二)--CCS编程入门_第3页
使用CCS进行DSP编程(二)--CCS编程入门_第4页
使用CCS进行DSP编程(二)--CCS编程入门_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、动 wtxds6xxxpci.dvr,设置画面如下:F面就可以运行CCS 了,在CCS中,创建一个新的Project,F11蔚MS 肃(iSrDSF MALTED审 +:盲 | t)= +$= | OWJ必Lrk OOOD, Col ODD£.di t Vi £r&je;ct H&tug ProfilerQEL Juls 世 ind 的 HelpTH iP阳弋】/frtydiSxxxpci/CPU_l -匚&200 Cod* CmptJH钛 Studi«我的工程文件放置在如下的目录中,读者可以放在自己喜欢的目录下:双击“+”展开fft.ma

3、k,可以看到整个工程文件是空的,我们需要把*c、*cmd、*lib文件添加到工程文件中,首先是*.c文件,本例中是test.c文件,同样的方法可以用来添加其他的文件。双击工程中的源文件,会在右边的窗口中看见原码:HewBIOS .tulcLs JCtrl+Oreate a new source file如果*.c文件不存在,可以在CCS集成开发环境中生成,/wtxds&xxxpci/CPUl - C&2OO 匚odw Composer Studio- fftFileEdi t Vi ew Proj set Debug Pro<filer Opti onTools Wind

4、iow HelpLoad £r ogrw. Load Snbol.-. Reload ProgramXo31d r本例中test.c的主程序源代码如下:/* Copyright (C)1996-2001 Beijing Wintech Technclogy 匚口fLtdXB7 Pacificxu,All Rights Reserved本程库呆用定点算法.柱浮gp芯片如6701上同样实用define PI 3,1415925358979 / * nuniber of s lements in vectcur x/#define nuimlength 2043#include <C

5、:tic6000cgtooisincludedmath.h>"尹明噩数"void radixZ(int n, short *xy, short 方;void bltrev_cp 丄h 丄nt *x, short * index, mt nx) jvoid digitr_ev_index (short indexy int n; int 匚adiK);Z头全局变屋*static short indexl64 ,ulnuinlength;static stucrt xlnuitilength*L;static int xZ numlengtii;static int ra

6、dix;int nxl;int i;门主函號开始打main()ctouble deltas/ rlft®zrrr»/Tnxl-inogleniaxh;?*FrM/T mit th匚 index lor tit hitrev 1/diQlU ey_index(loiexljnxLr tadix);the rrr caelficdeg岬 *?I.clk1jfor pQ;l<nxl/2; 1M)(wl|_4 |-cm 1 (double)>*1(1*1+11l-aiA ; double I i*deltaj);厂构氓譽fitFFT詐呼科.赛HSt®电ifo,

7、事Ml金歆康岸构0-卓斜中实觎为三丰厳烯的院号.Hfov fcrKl. T1J- f£kOt 11 ( |COS(P1*1 10.0) +CC3 :PT1 _ 1. J +COJ IFIT1 L: - Li) I *li5u; X1(Z*L41-0:(nU XL 棘柑rcrm1ji-+Hx2U-8qre(Kl|2*i*il2«ij +xl.*xl(2*i+l);bitrev cplx (x2, indexl nicl);调用的子程序有三个:/*Ccpyright (C) 1997-2000 Texas Instrumen匸3 Incorpora匸Ed./*Al 1 Righ

8、ts Reservedl聲成倒序表子程序*/void digitrev_index(short * index, int n, int radix)intshort nbit-sz nbotz ntop r ndilf, n2 T raddiv2;nbitsl= 0;i = n;while (i > 1)i = i » 1;nki its+;raddivE = radix >> 1;ribot = nb its » raddiv2;nJoot = ntoot << raddivZ - 1;ndif f = nbitLs £ raddi

9、vS;ntop = nfoot + ndi££n2 = 1 << ntop;index = 0;for ( i = 1 j = n2/tadix + 1; i < n2 - 1; i+)index i = j - 1;fork = nZ/radix; k*(radix-1) < j;k /= radix)j - k*rftdix-1:3 +- k;>indexn2 - 1 = n2 - 1;團序子覆庠/*x = Iiipuc Array to be Bit-Reversednx = Nuniloer cf pc ints in array (m

10、ust fee a power of 2)卞index = Array o± sqirt (nx) created by the routinedigi匸工皀p index to allow the fast implementation of thebit-reversalDESCRIPTIONThi3 routine performs the bit-reversal of the Input array x+twhere x is an array of Length nx 16-toit compLex pairs of data.This requiuES thm inde

11、x 锻匚匚ay provided by thm pfogfam belaw+tThis index should be generated at ccaipilc t iifte not by the DSP,void bitrevcplx(intshort *indeK,inti:shor 匸iO il, i3;3hort九儿3;intxiO, xi 1, xi3;intxjO, xjI, xj3;shortt;inta, b, iazib, ibs;intmask;intnbits, nbotz ntop, ndiffzn2, halfn;nbits = 0;i = nx;while (i

12、 > 1)i = i » 1;nbits+;nbot ndiff ntop n2 mask half n=nbits >> 1;=nbits & 1;=nbot + ndiff;=1 « ntop;I=n2nx-1; » 1;for (iO=0;iO < halfn; iO += 2) b=iO& mask;a=iO>> ntoot;if (!b) ia = indexa; ib = index b;ibs = ib << nbot;JO = ibs + ia;t = iO < jO;xiO =

13、 xi0; xjO = xjO;if (t)xi0 = xjO;xj0 = xiO;11= i + 1;31= jO + halfn;xil = xil;xjl - xjl; xil = xjl; xjl = xil;i3 = il + halfn; j3 = jl + 1; xi3 = xi3; xj3 = xj3;if (t)xi3 = xj3;xj3 = xi3;/*频率摘取FFT算法函数体.用户如果对算法感兴趣.请参阅胡广书老师的数字信号处理-理论.算法与实现第5產 快速傅之叶变换/*xy input and output sequences (dim-n)(input/output)

14、*nFFTS1ZE(input)書砒FFTcoefficients(dira-n/2)(input)* DESCRIPTION* This routine is used to coiripute FFT of a corwplex sequece* of siz& a, a power of 2f vlth ,rdecimation-1 n-freQuency decomposition method, ief the output- is in toit-reversed order. Each complex value is with interleaved 16-toit i

15、real* and itaaglnary parts *void radixS (int n, short xy , short u) short nlf n2, ie, ia, ij- j k, 1;short xt,ytjCyS;n2 n;ie - 1;for (k=n; k > 1; k = (k » 1) ) nl - n2;n2 = n2»l;ia = 0;for (j-0; j < n2; j+) c = u2*ia;3 = w2 *ia+1;ici - ia + i巳;for (ij; i < n; i += nl) 1 = i + n2;x

16、t=xy2*i=xy2*l - xy2i; xy2*i + xy2*l;yt= xy 2 *1+1 - xy 2 *1+1:xy 2 *i+i xy2i 巾”丄+叮=xy 2 *i+l + xy2*l+l;=(c*xt + s*yt) »15;=(c*yt - 3*xt)>>15:ie = ie«l;T从上面的源程序可以看到,使用 CCS的C语言编程跟普通的C语言编程没有太大的区别,这正是 TI所追求的,兼容的ANSI C标准和如此的编译高效率 也正是TI的领先之处。读者可以不必学习烦琐的汇编和线性汇编,直接对数字 信号处理的算法进行研究,同时享受高速的处理速度

17、,只有在对速度要求极严的 条件下,不得不使用汇编和线性汇编,那时读者已经有了一定的基础,再学习汇 编语言已是水到渠成。而使用 C语言编程是大势所趋。如果有人对算法本身感兴趣,请参阅胡广书老师的数字信号处理一理论、 算法与实现 第5章快速傅立叶变换,这里不在对算法进行展开讨论程序的结构本身很简单,使用过 C 语言的朋友一看就明白,不需要再做 进一步的说明,需要指出几点,1. 本程序中的math.h与Visual C+中的math.h是不同的,TI的CCS专门 为数学计算作了运行时库,是利用硬件对计算作加速的,与 Visual C+ 中的速度是不可同日而语的。因此如果我们需要用到相应的“头文件”

18、, 就应该在 TI 的目录中查找,同时要包含相应的运行时库( *.lib )文件, 我一直在强调这一点, 初学者往往忽略这一点而出现许多编译链接错误。 下面的演示中还会看到这一点。2. 本例是以定点DSP芯片 C6201为例的。如果对定点运算还不太熟悉, 只好找些文档来学习一下了, 这里也不再展开。 在浮点 DSP 芯片 C6701 中本程序可以不加修改地运行,但浮点DSP芯片中可以直接进行有硬件 支持的浮点运算,速度会更快。3. CCS 的 C 语言中的数据类型是与硬件相关的,使用时需要注意。char 8 bitsshort 16 bitsint 32 bitslong 40bitsfloa

19、t 32bitsdouble 64 bitsTMS320C6000 Online Programmer's Guide (SPRH048) Copyright?2000 Texas Instruments接下来继续进行,向工程中添加 *.cmd 文件。读者现在应该会执行这个操作 了,如果没有就自己造一个吧, 也可以拿别人的来改造一下。 其中有些不太明白 也没有关系,但是在与具体的硬件相关的地方还是要搞明白。首先要搞明白目标板“ target”上到底有多少存储空间,包括 DSP芯片内部 有多大空间,目标板上有多少外部存储器(SDRAM、SBSRAM、双口 RAM), 以及它们的其始地址和

20、长度,以我使用的闻亭公司 C6Xpa板为例,存储器类型起始地址存储器大小结束地址SDRAM 0x20000004M*32bit (0x400000*4)0x3000000SBSRAM 0x400000128k*32bit(0x20000*4)0x480000DPRAM 0x14000004k*32bit (0x1000*4)0x1404000在这里还要强调一点,是*32bit ”,因此SDRAM的结束地址是0x2000000 + 0x400000*4 = 0x3000000而不是0x2000000 +0x400000 =0x2400000其他存储空间也是如此。许多同志们忽略了这一点,在使用数组

21、、指针及对空间地址操作时造成“不可理解”的错误,“我往仫个地址写数怎么找不到,#%A#&八%八坏 了! ”,好好研究一下,就不好意思这么快下结论了。下面是我用的*cmd文件的源代码,需要的话可以拿去用喔。/*=s=-=:5=5=t;=s=:i=s=/* Copyright (C)1996-2001 Be ij ing Wintech T皀匚hnoLogy Co.fLtd./*By PacificxUfAll Rights Reserved/ 常/ *='="= test. and = = = = =*/MEMORYtVECTORS:origin 0x0,len 0x4

22、00IPRAM:origin =0x400zlen =KfOOOIDRAM:origin =OxBOOOOOaO,len =OxlDOODSECTIONSvec>VECTORS.text-> IPRAM data> IPRAK.iptntext>IPRAM.bss> IDRAM cinit> IDRAH.const> IDRAM.far> IDRAM stack> IDRAM.cio> IDRAM.sysmein> IDRAM里面“ .vec、.text”的东西可以先不考虑,留给 CCS去处理好了。只要保证定义的空间在物理上存在

23、就可以了心急的朋友会开始编译了,C? /wtzdsbuipci/CPU_1 - C8200 "de CtjapusH StuiHo-班trraxi备 File Edit Vim Project Debu Profiler Optitwi GEL Tools Wirwiow Kelp-|g|x|简/口 I冲矗显scDSP空F订菲& _J 閱L filesEJ 口 ProjectH £ft. nikk口口口 .“ E+S-DSr/BI(JS OonfiIncludeLilrari esSowrci園 test, c|/*= /* Copyn jht (C)199G-2D

24、D1 Beijing "By Pacif icu,|/» =MEMORYtest endVECTORSI PRAMI DRAMSECTIONS:origin - 0x0,len:origin = 0x4DO,:origin = DnQDDOOO> VECTORS* text> IPRAM-data> IPRAM.i> I PRAMI 1Builds the entire project, ignorinLn 1, Cal 1NUM又会出现下面的结果,“$%杯&,又忘了加运行时库!”。(下次再忘就不应该了!)。这里展开一点,有些朋友说:“我包含

25、了头文件 <intr.h>,调用中断函数intr hook()时怎么也编译链接通不过,去掉这一句就通过了。”大家现在就应该知InkEx *£ft itiakH43J2DC6z COFF LinkerVersion 4.d0Copyright c) 1996-2000TvxdSI nttrunrtntt Ineorperdt«dI> > 时 mi ng: entry pointsymbolc .lntOO uodef mdundttf i T*df t r«t 11: i'<Trwnciidsymbolin file_Cci&#

26、187;tir.il ,<bJ_ fiicditet.obj_ pydtest.objtl tldt«t .obj_adddtest.objsintest obj-Qb |divdtest.objdivitest obj_n*gdt««t-cbj> > syabol referencin eifft.out Dot builtBuild ComplAt一2 Error* r 1 Warm nqs.J二nuj jO MALTID道怎么处理这个问题了吧?熟悉 C语言编程的同志都知道“ *lib ”的实质,中断函数intr_hook()在“dev6x.

27、lib”里。加上这个库问题估计该解决了吧!TI的运行时库都有具体的说明,如果大家实在懒得去看,又不想知其所以然,有一个绝招在此:“ Find all *.lib in TI目录” 一个一个试一下好了我们的问题解决了,接下来看一看能不能运行,执行对不对。Mdg£.“;pCCPU_l i C620Q Ctnietfd.ifc . 回軽三|星dx Viv.針柑“片卜切書“仇】対StL欝hdcr 吐Sci+o环btl加1疔卩”口L* e4 SEX-Q0004214 00004210 0000421C 00004220 00004220 00004224 00004229 0000422C 00004230 0ODO4Z34 00004236 000042K 00004240 QDQ04244 nf|nn4?y00000000NOPOQOOOOOOWP00000000WOP亡 lntOO:07A9342A07C0006AQ0D1FEZA0000006A07BCD1E207EF07A207000D2A074QQ06A0228482802400068Q73HniA2DSPMVK-SZ MVKLH 危 MVK.5Z MVKLH+S: ADD.S2 AND.S2MVK.S2 MVITL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论