DSP C语言实验.doc_第1页
DSP C语言实验.doc_第2页
DSP C语言实验.doc_第3页
DSP C语言实验.doc_第4页
DSP C语言实验.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

实验一 CCS使用1如何建立和测试一个工程。 建立和测试一个工程的步骤如下:(1)打开CCS Setup软件,选择目标芯片型号、仿真类型、存储模式等,并将其添加到系统,保存退出后软件将自动打开CCS软件。(2)打开CCS软件后,选择projectNew选项卡。(3)在弹出的对话框中选择工程合适的位置。注意:路径中不要有中文。然后输入工程的名字。(4)点击finish,然后点击工程名前面的加号,打开CCS选择File,点击New下的Source File命令。(5)将工程中的源程序文件(firstdsp.c文件)和链接命令文件(firstdsp.cmd文件)复制到上一步CCS 自动创建的以工程名为名字的文件夹中,将库文件(rts.lib文件)添加到该文件夹中,最后将上述各文件在中分别添加到工程下各类型的文件夹中。(6)在CCS界面中右击工程名选择“Build Options”进行编译选项设置,在Linker标签的Libraries选项中输入所要包含的库文件,在Basic选项中输入合适的堆栈值(实验中为400)。(7)建立工程后,选择“Project”菜单下的“Rebuild all”命令,在CCS下方的Build窗口会显示编译链接信息,若没错误将产生一个.out的输出文件。(8)选择“File”菜单下的“Load Program”命令进行加载上一步产生的程序输出文件(.out文件)。(9)加载程序后,点击CCS左侧的“RUN”快捷按钮进行程序的软件仿真,并全速运行所加载的程序,通过观察窗口(memory、watch windows观察变量、registers、graph)验证实验结果。2建立工程需要的文件清单及每个文件的作用。 建立工程总共需要3个文件:(1)rts.lib:c语言标准支持库,用于程序调用。(2)firstdsp.c:c语言主程序。(3)firstdsp.cmd:链接命令文件,用于定位内存,将块映射到存储器中。 3思考题rts.lib有何作用?其加载方法有几种?答:(1)运行支持库(run time support library): 它包括C编译器所支持的ANSI标准运行支持函数、编译器公用程序函数、浮点运算函数和C编译器支持的I/O函数。CCS中提供有rts库文件,并提供了对应的源程序文件rts.src。库文件包括标准的C/C+运行支持库函数,浮点运算程序,系统启动程序_c_int00 等。这些库中也包括由汇编实现的子程序,可以在汇编中调用,比如除法子程序 FD$DIV等。(2)rts.lib文件加载方法有两种:在CCS中右击将要加载库文件的工程名,选择“Build Options”进行编译选项设置,在Linker标签的Libraries选项中输入所要包含的库文件,即rts.lib。先将rts.lib复制到计算机硬盘的工程文件夹中,在CCS中右击将要加载库文件的工程下的Libraries文件夹进行添加库文件,即rts.lib。firstdsp.c:#include #include main() int a,b,sum;a=123;b=456;sum=a+b;printf(sum is %dn,sum);while (1);乘加实验:#include struct addfloat x1,x2,x3,x4,x5,y;add1;/定义结构变量(可不同类型数据)double a5; /定义数组变量(同类型数据)double y,x;void main()add1.x1=3; /结构变量赋值add1.x2=3;add1.x3=2;add1.x4=2;add1.x5=2;a0=1; /数组变量赋值a1=2;a2=3;a3=4;a4=5;add1.y=add1.x1*a0+add1.x2*a1+add1.x3*a2+add1.x4*a3+add1.x5*a4;y=add1.y;x=exp(2);while(1);链接文件firstdsp.cmd: -w-stack 400h-heap 100-l rts.libMEMORYPAGE 0:VECT : o=80h,l=80hPRAM : o=100h,l=2f00hPAGE 1: DRAM : o=3000h,l=1000h SECTIONS.text : PRAM PAGE 0.data : PRAM PAGE 0.cinit : PRAM PAGE 0.cio: PRAM PAGE 0.switch : PRAM PAGE 0.const : DRAM PAGE 1.bss : DRAM PAGE 1.stack : DRAM PAGE 1.vectors: VECT PAGE 0 MEMORY和SECTIONS必须大写,origin和length小写 MEMORY是用来指明存储器的分配,PAGE 0是程序存储器,PAGE 1是数据存储器,origin是用来说明各种起始位置,length是用来指出长度。在上面的例子中VECT占用0080H-0100H空间PRAM 占用100H-2000H空间,DRAM占用2000H-3000空间。 SECTIONS是用来指明各段在存储器中那一块。在上面的例子中,.vectors段在VECT所在的空间。.text在PRAM的空间,.data段在PRAM空间,.stack段在STACKDRAM空间。实验2 基础实验一、实验目的1.掌握CCS3.3实验环境的使用;2.掌握用C语言编写DSP程序的方法。二、实验设备1.一台装有CCS3.3软件的计算机;2.DSP实验箱;3.DSP硬件仿真器。三、实验原理浮点数的表达和计算是进行数字信号处理的基本知识;产生正弦信号是数字信号处理中经常用到的运算;C语言是现代数字信号处理表达的基础语言和通用语言。写实现程序时需要注意两点:(1)浮点数的范围及存储格式;(2)DSP的C语言与ANSI C语言的区别。四、实验步骤1.打开CCS3.3 并熟悉其界面;2.在CCS3.3环境中建立本实验的工程,编译并重建 .out 输出文件,然后通过仿真器把执行代码下载到DSP芯片中;3 把X0 , Y0 和Z0添加到Watch窗口中作为观察对象(选中变量名,单击鼠标右键,在弹出菜单中选择“Add Watch Window”命令);4 选择view-graph-time/frequency。 设置对话框中的参数: 其中“Start Address”设为“sin_value”,“Acquisition buffer size”和“Display Data size”都设为“100”,并且把“DSP Data Type”设为“32-bit floating point”, 设置好后观察信号序列的波形(sin函数,如图);5 单击运行;6 观察三个变量从初始化到运算结束整个过程中的变化;观察正弦波形从初始化到运算结束整个过程中的变化;7 修改输入序列的长度或初始值,重复上述过程。5 实验注意事项1. 把代码载入硬件时注意操作顺序,要操作规范,以免烧坏硬件2. 只有添加了可视窗口才可以看到图形3. 读懂程序以后再按要求修改,才能完成要求4. 注意观察修改程序的图形变化与之前的比较6 实验程序主程序.c#include #include float sin_value100;float x0,y0,z0;void main() int i;for (i=0;i PRAM PAGE 0.data : PRAM PAGE 0.cinit : PRAM PAGE 0.cio: PRAM PAGE 0.switch : PRAM PAGE 0.const : DRAM PAGE 1.bss : DRAM PAGE 1.stack : DRAM PAGE 1.vectors: VECT PAGE 07 实验小结 通过本实验熟悉和使用CCS3.3实验环境,虽然还不是充分解读CCS3.3技巧,但有了这次自己动手,掌握其基本技巧。以前不知道用C语言编写DSP程序,如今通过解读程序,修改程序,完成实验。通过本次实践与理论相结合,更加透彻理解实验目的。实验 3: DSP 数据存取实验程序文件(memory.c):main()int i;unsigned int *px; /定义指针变量 px,px代表地址值(unsigned int)unsigned int *py;unsigned int *pz;px=(unsigned int *)0x4080;/地址值(unsigned int *)0x4080赋给指针变量px。py=(unsigned int *)0x4100;for ( i=0,pz=px;i16;i+,pz+ ) /地址赋值,指针变量pz地址值增1,(*pz)=i; /i值赋给pz地址中for ( i=0,pz=py;i16;i+,pz+ )(*pz)=0x1234; /把数值0x1234赋给pz地址中for ( i=0;i PRAM PAGE 0.data : PRAM PAGE 0.cinit : PRAM PAGE 0.cio: PRAM PAGE 0.switch : PRAM PAGE 0.const : DRAM PAGE 1.bss : DRAM PAGE 1.stack : DRAM PAGE 1.vectors: VECT PAGE 0实验3 LED显示实验(I/O实验)原理:4个LED灯接在I/O地址3002H,4个LED灯分别接低4位的数据位上。程序:ioport unsigned int port3002;/ LED 宏定义#define LBDS port3002 void Delay(int nDelay); / 延时和移位子函数声明main() unsigned int uLED4=1,2,4,8;/ 控制字,逐位置1: 0001B 0010B 0100B 1000B int i;for(;)for ( i=0;i=0;i- )LBDS=uLEDi;/ 反向顺序送控制字Delay(64);/ 延时void Delay(int nDelay)int i,j,k;k=0;for ( i=0;inDelay;i+ )for ( j=0;j1024;j+ )k+;实验4 拨码开关实验(I/O输入实验)原理:4个LED灯接在I/O地址3002H,4个LED灯分别接低4位的数据位上。4个拨码开关接在I/O地址3003H,4个拨码开关分别接低4位的数据位上。程序:/ 为拨码开关和指示灯声明IO端口ioport unsigned int port3002,port3003;/ DIP & LED 宏定义#define DIP port3003#define LED port3002main()int i;for(;)i=DIP; / 取拨码开关状态i=i&0x0f; / 末4位有效LED=i; / 输出到LED实验5 外中断实验原理:每按下小键盘(不分那个键)均会向int2发生2次中断,按键次数显示在4个LED灯。port3002:连接LEDport8007: port3004:DSP管脚int2连接到port3004地址最低位。程序:#defineIMR *(int *)0x0 /*(int *)0x0:表示 数据空间地址(int *)0x0 中的数据#defineIFR*(int *)0x1#definePMST*(int *)0x1d#define REGISTERCLKMD (*(unsigned int *)0x58)ioport unsigned int port3002;ioport unsigned int port3004;外中断管脚int2连接到port3004,置0中断使能。ioport unsigned int port8007;#define LED port3002void interrupt xint2(void);unsigned int uWork,nCount;unsigned int nCountKey,nLS;main()nCount=0; 计数次数nCountKey=0;按键次数nLS=0x40;REGISTERCLKMD=0x1007;/ 设DSP主频改为两倍PLL时钟=32MHzasm(ssbxINTM);/ 关中断,进行关键设置时不许打扰port3004=0;/ 使能XINT2port8007=0xc8;液晶显示辅助控制uWork=PMST;/ 设置PMST寄存器PMST =uWork&0xff;/ 设置中断向量表起始地址=0080HIMR = 4;/ 使能XINT2IFR = 4;/ 清中断标志位asm(rsbxINTM);/ 开中断while ( 1 ); void interrupt xint2(void)/ XINT2中断服务程序nCount+; nCount%=256;/ 中断计数if ( nCount%2=1 )nCountKey+; nCountKey%=8;nLS=0x40;uWork=nCountKey|nLS;LED=uWork;/ 显示计数值 ;中断向量表= vectors.asm = .sect .vectors .ref _c_int00 ; C entry point .ref _xint2 .align 0x80 ; must be aligned on page boundaryRESET: ; reset vector BD _c_int00 ; branch to C entry point STM #200,SP ; stack size of 200nmi: RETE ; enable interrupts and return from one NOP NOP NOP ;NMI ; software interruptssint17 .space 4*16sint18 .space 4*16sint19 .space 4*16sint20 .space 4*16sint21 .space 4*16sint22 .space 4*16sint23 .space 4*16sint24 .space 4*16sint25 .space 4*16sint26 .space 4*16sint27 .space 4*16sint28 .space 4*16sint29 .space 4*16sint30 .space 4*16int0: RETE NOP NOP NOPint1: RETE NOP NOP NOPint2: B_xint2 NOP NOPtint: RETENOP NOP NOPrint0: RETE NOP NOP NOPxint0: RETE NOP NOP NOPrint1: RETE NOP NOP NOPxint1: RETE NOP NOP NOPint3: RETE NOP NOP NOP .end实验3 卷积与相关算法的程序设计与调试一、实验目的:1、学习如何用DSP C语言程序实现卷积与相关的计算。 2、学习用CCS调试程序的详细过程 3、学习如何设置断点二、实验步骤: 1. 设置Setup CCS为TMS320C5416软仿真方式2.建立一个新工程3.编辑源程序4.将文件添加到过程中5.设置工程选项6.编译与连接7.程序的运行与基本调试/* Program for convolve */#include int N1,N2;/*输入数组长度*/int n;/*输出数组长度*/int m,i,k;float x20;float h20;float y20;/*定义输出数组*/main() N1=10; /* x 长度*/ N2=10; /* h 长度*/ n=N1+N2-1; /* 输出 y 的长度*/ for(i=0;i20;i+) /* 初始化数组 */ xi=0; /*数组赋值*/ hi=0; yi=0; for(i=0;in;i+)/* 给x数组赋值0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0 0 0 0 */ if(iN1) xi=i; else xi=0; for(i=0;i=n;i+)/* 给h数组赋值1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 */ if(iN2) hi=1; else hi=0; for(i=0;in;i+) /* 计算卷积(循环卷积实现线卷积) */ for (k=0;kgraph-time/frequency。 设置对话框中的参数: 其中“Start Address”设为“x_re”,“Acquisition buffer size”和“Display Data size”都设为“64”,并且把“DSP Data Type”设为“32-bit floating point”(如图), 设置好后观察输入信号序列的波形(单边指数函数,如图); 同样方法观察经DFT变换后的输出序列“y_re”的波形,“Start Address”改为“y_re”,其余参数不变(如图); 5 在Watch窗口中添加i, j, k, m, n, a, b ,c 等变量,在Debug菜单中先“Restart”然后 “Go main”, 单步运行程序(按F11),跟踪FFT算法的过程;(可以跳过程序开始部分对各个数组的赋值代码,方法是在雷德算法的第一行代码前设置断点,然后先单击运行,待程序停在该断点后再单步执行后面的代码,见下图。)6.修改N的值(应为2的整数次幂,如8,16,32等,最大不超过64),或者修改输入信号x的函数,如直流、正弦、三角等,观察程序运行结果。注意观察图形时,数据块大小要相应更改为当前N值。五实验注意事项1.把代码载入硬件时注意操作顺序,要操作规范,以免烧坏硬件2.只有添加了可视窗口才可以看到图形3.读懂程序以后再按要求修改,才能完成要求4.在掌握FFT的基础上,用c语言在dsp中产生不同的图形,完成实验目的5.要求要完全熟悉CCS3.3的环境,才能用语言在dsp中编程六实验程序(以64位为例)#include #include const float pi=3.1415926;int N=64;/* FFT点数 */float x_re64, x_im64; /* 输入信号序列 */float y_re64, y_im64;/* 输出频谱序列 */float w_re, w_im;/* 蝶形因子 */int m;/* 蝶形运算的级数,即Log2(N) */float t_re, t_im, v_re, v_im; /* 临时变量 */int j,i,k,f,n; int a, b, c;void main() /* 初始化数据空间 */for(i=0; i64; i+)x_rei=0;x_imi=0;/* 设定输入信号序列为单边指数函数 */* 考虑到实际衰减很快,因此可以忽略后

温馨提示

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

评论

0/150

提交评论