1、目 录一 设计目的-3二 系统分析-3三 硬件设计3.1 硬件总体结构-33.2 DSP模块设计-43.3 电源模块设计-43.4 时钟模块设计-53.5 存储器模块设计-63.6 复位模块设计-63.7 JTAG模块设计-7四 软件设计4.1 软件总体流程-74.2 核心模块及实现代码-8五 课程设计总结-14一、 设计目的设计一个功能完备,能够独立运行的精简DSP硬件系统,并设计简单的DSP控制程序。二、 系统分析1.1设计要求硬件要求:(1) 使用TMS320VC5416作为核心芯片。(2) 具有最简单的led控制功能。(3) 具有存放程序的外部Flash芯片。(4) 外部输入+5V电源
2、。(5) 绘制出系统的功能框图。(6) 使用AD(Altium Designer)绘制出系统的原理图和PCB版图。软件要求:利用实验箱的模拟信号产生单元产生不同频率的信号,或者产生两个频率的信号的叠加。在DSP中采集信号,并且对信号进行频谱分析,滤波等。通过键盘选择算法的功能,将计算的信号频率或者滤波后信号的频率在LCD上显示。三、 硬件设计3.1 硬件总体结构 3.2 DSP总体结构3.3 电源模块设计3.4 时钟模块设计3.5 存储器模块设计3.6复位模块设计3.7 JTAG模块设计四、 硬件设计4.1 软件总体流程4.2核心模块及实现代码1.采集数据去直流in_xm = port8002
3、 & 0x00ff;/读取数据 m+; intnum = m;if (intnum = Len) /以256个点为采样周期intnum = 0;xavg = 0.0;for (s=0; sLen; s+)xavg = in_xs + xavg; /归一化处理xavg = xavg/Len;/采样均值for (s=0; sLen; s+)xs = 1.0*(in_xs - xavg); 1. FFT变换void kfft(double prLen,double piLen,int n,int k,double frLen,double fiLen,int l,int il) /pr为实部,pi为
4、虚部,k为蝶形运算级数 int it,m,is,i,j,nv,l0; double p,q,s,vr,vi,poddr,poddi; for (it=0; it=n-1; it+) m=it; is=0; for (i=0; i=k-1; i+) j=m/2; is=2*is+(m-2*j); m=j; frit=pris; fiit=piis; /序数重排 pr0=1.0; pi0=0.0; p=6.283185306/(1.0*n); pr1=cos(p); pi1=-sin(p); if (l!=0) pi1=-pi1; for (i=2; i=n-1; i+) p=pri-1*pr1;
5、 q=pii-1*pi1; s=(pri-1+pii-1)*(pr1+pi1); pri=p-q; pii=s-p-q; for (it=0; it=0; l0-) m=m/2; nv=2*nv; for (it=0; it=(m-1)*nv; it=it+nv) for (j=0; j=(nv/2)-1; j+) p=prm*j*frit+j+nv/2; q=pim*j*fiit+j+nv/2; s=prm*j+pim*j; s=s*(frit+j+nv/2+fiit+j+nv/2); poddr=p-q; poddi=s-p-q; frit+j+nv/2=frit+j-poddr; fii
6、t+j+nv/2=fiit+j-poddi; frit+j=frit+j+poddr; fiit+j=fiit+j+poddi; if (l!=0) for (i=0; i=n-1; i+) fri=fri/(1.0*n); fii=fii/(1.0*n); if (il!=0) for (i=0; i=n-1; i+) pri=sqrt(fri*fri+fii*fii); if (fabs(fri)0) pii=90.0; else pii=-90.0; else pii=atan(fii/fri)*360.0/6.283185306;/pi为相位 2. 计算频率void cf(double
7、 fLen) double max; int no=0; max=f0; for(i=0;imax) max=fi;/max为最大幅值 no=i;/最大幅值处对应序数 fstop=no*fs/256;3. FIR滤波void firdes(double npass /求出窗口函数h int t; for (t=0; tFLen; t+) ht = sin(t-(FLen-1)/2.0)*npass*pai)/(pai*(t-(FLen-1)/2.0); if (t = (FLen-1)/2) ht=npass; /作卷积for (s=0; sLen; s+)xs = 1.0*(in_xs -
8、xavg);prs = xs; /输入实部pis = 0; /输入虚部for (p=0; pFLen; p+) xmidFLen-p-1 = xmidFLen-p-2; xmid0 = xs;r = 0;rm= 0; for (j=0; jFLen; j+) r = xmidj * hj;rm = rm + r; ys = rm;4. LCD显示SendCMD(CLEAR); showperson(); Delay(1); /- SendCMD(CLEAR); SendCMD(0x0080); /设定DDRAM的地址在第一行 80H delay_100us(); for(i =0;i16;i+
9、) SendDat(data_buff3i); delay_100us(); asm( nop );asm( nop ); SendCMD(0x0090); shownum(f1); /- SendCMD(0x0088); /设定DDRAM的地址在第二行 90H delay_100us(); for(i =0;i16;i+) SendDat(data_buff4i); delay_100us(); SendCMD(0x0098); shownum(f2);4.3 软件实验效果图1.去直流2.滤波前fft3.滤波后fft4.窗口函数 五 课程设计总结 在为期两个多星期的综合设计中,重新熟悉了一下
10、AD和CCS软件的操作 。在画原理图时,各元件的连接及封装形式都应参照手册。只有深刻了解各管脚的功能,才能准确快速地画好原理图。画好原理图后,要先编译一下看是否有连接错误。如果原理图有所改变,可以在PCB中重新导入。如果元器件管脚或IO引脚变绿,可能是间距违反了规定的rule。可以将rule里的间距改小一点。在pcb连线过程中,我发现 移动clk时钟器件,其管脚变绿,但rule并无问题。后经查阅资料,取消了Drc功能,才恢复正常。在连接滤波电容时,将滤波电容靠近其滤波元器件。 在软件设计过程中,前两天一直没有搞清楚设计要求,进展缓慢。首先了结了一下各个模块程序的输入输出变量的含义,只有 这样才能正确地调用各个函数。在计算频率时,其实我只计算了一个频率。输入是一个混频信号,由于左右对称,在128点内可得到两个最大幅度,0到30(或其他分界点亦可,视滤波效果而言),比较一次,30到128,再比较一次。滤波函数仅仅只是计算了窗口函数,故还需将输入信号函数和窗口函数进行卷积得到最终结果。在编写LCD显示模块程序时,经常出现乱码。Unsigned char类型的字符串数组,一个汉字相当于两个英文字母,如果地址1没有安排好容易出现乱码。 17