ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:244.70KB ,
资源ID:25518533      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25518533.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DSPC语言实验课案.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

DSPC语言实验课案.docx

1、DSPC语言实验课案实验一 CCS使用1如何建立和测试一个工程。 建立和测试一个工程的步骤如下:(1)打开CCS Setup软件,选择目标芯片型号、仿真类型、存储模式等,并将其添加到系统,保存退出后软件将自动打开CCS软件。(2)打开CCS软件后,选择projectNew选项卡。(3)在弹出的对话框中选择工程合适的位置。注意:路径中不要有中文。然后输入工程的名字。(4)点击finish,然后点击工程名前面的加号,打开CCS选择File,点击New下的Source File命令。(5)将工程中的源程序文件(firstdsp.c文件)和链接命令文件(firstdsp.cmd文件)复制到上一步CCS

2、 自动创建的以工程名为名字的文件夹中,将库文件(rts.lib文件)添加到该文件夹中,最后将上述各文件在中分别添加到工程下各类型的文件夹中。(6)在CCS界面中右击工程名选择“Build Options”进行编译选项设置,在Linker标签的Libraries选项中输入所要包含的库文件,在Basic选项中输入合适的堆栈值(实验中为400)。(7)建立工程后,选择“Project”菜单下的“Rebuild all”命令,在CCS下方的Build窗口会显示编译链接信息,若没错误将产生一个.out的输出文件。(8)选择“File”菜单下的“Load Program”命令进行加载上一步产生的程序输出文

3、件(.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):

4、它包括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复制到计算机硬盘的工

5、程文件夹中,在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

6、=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.libMEMORY PAGE 0: VECT : o=80h,l=80h PRAM : o=100h,l=2f00h PAGE 1: DRAM : o=3000h,l=1000h SECTI

7、ONS .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是用来指出长度。

8、在上面的例子中VECT占用0080H-0100H空间PRAM 占用100H-2000H空间,DRAM占用2000H-3000空间。 SECTIONS是用来指明各段在存储器中那一块。在上面的例子中,.vectors段在VECT所在的空间。.text在PRAM的空间,.data段在PRAM空间,.stack段在STACK DRAM空间。实验2 基础实验一、实验目的 1. 掌握CCS3.3实验环境的使用; 2. 掌握用C语言编写DSP程序的方法。二、实验设备 1. 一台装有CCS3.3软件的计算机; 2. DSP实验箱; 3. DSP硬件仿真器。三、实验原理 浮点数的表达和计算是进行数字信号处理的基

9、本知识;产生正弦信号是数字信号处理中经常用到的运算;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。 设置对话框中的参数:

10、其中“Start Address”设为“sin_value”,“Acquisition buffer size”和“Display Data size”都设为“100”,并且把“DSP Data Type”设为“32-bit floating point”, 设置好后观察信号序列的波形(sin函数,如图);5单击运行;6观察三个变量从初始化到运算结束整个过程中的变化;观察正弦波形从初始化到运算结束整个过程中的变化;7修改输入序列的长度或初始值,重复上述过程。五实验注意事项1.把代码载入硬件时注意操作顺序,要操作规范,以免烧坏硬件2.只有添加了可视窗口才可以看到图形3.读懂程序以后再按要求修改,

11、才能完成要求4.注意观察修改程序的图形变化与之前的比较六实验程序主程序.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 0 七实验小结

12、 通过本实验熟悉和使用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 *)0x40

13、80赋给指针变量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 :

14、 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(;) fo

15、r ( 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;/ DI

16、P & 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地址最低位。程序:#define IMR *(int *)0x0 /*(int *)0x0:表示 数据空间地址(int *)0x0 中的数据#

17、define IFR *(int *)0x1 #define PMST *(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 nCo

18、untKey,nLS;main() nCount=0; 计数次数nCountKey=0;按键次数 nLS=0x40; REGISTERCLKMD=0x1007; / 设DSP主频改为两倍PLL时钟=32MHz asm( ssbx INTM); / 关中断,进行关键设置时不许打扰 port3004=0; / 使能XINT2 port8007=0xc8;液晶显示辅助控制 uWork=PMST; / 设置PMST寄存器 PMST =uWork&0xff; / 设置中断向量表起始地址=0080H IMR = 4; / 使能XINT2 IFR = 4; / 清中断标志位 asm( rsbx INTM);

19、 / 开中断 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

20、 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*16sint

21、23 .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: RETE NOP NOP NOPrint0: RETE NOP NOP NOPxint0: RETE NOP NOP NOPrint1: RETE NOP NOP NOPxin

22、t1: 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

23、,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

24、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;k=i;k+) yi=yi+hk*xi-k; while(1);实验4 快速傅里叶变换 (FFT) 实现一、实验目的 1. 掌握FFT算法的基本原理; 2. 掌握用C语言编写DSP程序的方法。二、实验设备 1. 一台装有CCS3.3软件的计算机; 2. DSP实验箱的TMS320F2812主控板; 3. DSP硬件仿真器。三、实验原理傅里叶变换是一种将信号从时域变换到频域的变换形式,是信号处理的重要分

25、析工具。离散傅里叶变换(DFT)是傅里叶变换在离散系统中的表示形式。但是DFT的计算量非常大, FFT就是DFT的一种快速算法, FFT将DFT的N2 步运算减少至 ( N/2 )log2N步。 离散信号x(n)的傅里叶变换可以表示为,式中的WN 称为蝶形因子,利用它的对称性和周期性可以减少运算量。一般而言,FFT算法分为时间抽取(DIT)和频率抽取(DIF)两大类。两者的区别是蝶形因子出现的位置不同,前者中蝶形因子出现在输入端,后者中出现在输出端。本实验以时间抽取方法为例。时间抽取FFT是将N点输入序列x(n) 按照偶数项和奇数项分解为偶序列和奇序列。偶序列为:x(0), x(2), x(4

26、), x(N-2);奇序列为:x(1), x(3), x(5), x(N-1)。这样x(n) 的N点DFT可写成: 考虑到WN的性质,即 因此有: 或者写成: 由于Y(k) 与Z(k) 的周期为N/2,并且利用WN的对称性和周期性,即: 可得: 对Y(k) 与Z(k) 继续以同样的方式分解下去,就可以使一个N点的DFT最终用一组2点的DFT来计算。在基数为2的FFT中,总共有log2(N) 级运算,每级中有N/2 个2点FFT蝶形运算。单个蝶形运算示意图如下: 以N8为例,时间抽取FFT的信号流图如下: 从上图可以看出,输出序列是按自然顺序排列的,而输入序列的顺序则是“比特反转”方式排列的。也就是说,将序号用二进制表示,然后将二进制数以相反方向排列,再以这个数作为序号。如011变成110,那么第3个输入值和第六个输入值就要交换位置了。本实验中采用了一种比较常用有效的方法完成这一步工作雷德算法。四、实验步骤1.以64点FFT的信号流图为例,理解FFT算法的过程;2.在CCS3.3环境中打开本实验的工程(Example_fft.pjt),编译并重建 .out 输出文件,然后通过仿真器把执行代码下载到DSP芯片中;3.运行程序; 4.选择v

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1