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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

DSP硬件指导书.docx

1、DSP硬件指导书DSP硬件技术实验指导书(第一版)编写目 录基础性实验实验一 数据存储实验 3实验二 定点数算术运算实验 8提高性实验实验三 定时中断实验 16实验四 BSP串口实验 24实验五 IIR数字滤波器 45设计性实验实验六 基于DSP的频率可调正弦信号发生器的设计 51实验七 基于DSP的调幅信号解调过程的实现 52附录: 53实验一 数据存储实验实验性质:基础性实验实验验目的:(1)熟悉系统的组成结构。(2)熟悉CCS环境下DSP程序的开发流程,练习常用的调试和观察方法。(2)熟悉常用的数据存储和重复指令。(3)熟悉汇编程序段结构,掌握段定义及初始化常数伪指令。(4)掌握链接文件

2、的编写及构成。实验要求:(一)基本任务 1.编写汇编程序实现数组a20=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,x20=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1的初始化,并将数据存储器中的数组x20复制到数组y20,将数据存储器中的a20写入到程序存储器PROM(2000h2013h),再将程序存储器PROM的20个数据存入数据存储器DATA(0200h0213h).2.在CCS环境下调试、观察该程序,观察内容如下:(1)观察数据段已初始化数据(2)观察数组a、x、y(3)观察程序存储器PROM(

3、4)观察数据存储器DATA3.修改程序将PROM地址范围改为2010H起始4.修改程序将DATA地址范围改为0210H起始(二)设计提高1.解释该程序中LOOPP循环体的功能,修改程序将LOOPP循环体的功能用块传送方式实现。(三)思考总结1 总结数据传送指令MVPD、MVDD、WRITA、READA各自的功能,并思考在本程序中是否可以互换。2 总结该程序的存储空间配置和使用情况。实验设备:计算机,CCS 2.0版软件,DSP仿真器,实验箱。实验内容:连接DSP开发系统,启动CCS软件(1)系统连接进行DSP实验之前,先必须连接好仿真器、实验箱及计算机,连接方法如图1-1所示: 图1-1 DS

4、P系统连接图(2)在硬件安装完成后,确认安装正确、各实验部件及电源连接正常后,接通电源,启动CCS,若系统连接正常,则出现画面如图1-2 图1-2 CCS正常启动界面若出现画面如图1-3 图1-2 CCS非正常启动界面表示系统连接不正常。仿真器的连接、JTAG接口或CCS相关设置存在问题,需要掉电检查仿真器的连接、JTAG接口连接,或检查CCS相关设置是否正确。2创建一个新工程在CCS环境中点击Project-New,弹出工程创建窗口,如图1-4所示图1-4 建立工程界面在Project一栏中键入工程名mymove,在location一栏选择工程所在位置D:program Filesmypro

5、jectsmyove,然后单击“完成”按钮,CCS将在指定目录下创建一个名为mymove.pjt的工程。3.建立汇编程序 在CCS环境中点击File-New-Source file菜单命令,打开一个空白文档,将汇编程序录入,单击File-Save菜单命令,出现如图1-5所示保存窗口图1-5 新建汇编程序界面选择D:program Filesmyprojectsmyove子目录,在文件名一栏输入mymove,并选择保存类型为Assembly Source Files(*.asm),单击“保存”按钮,汇编程序存盘。参考汇编程序 .mmregs .def _c_int00 .dataTBL: .wo

6、rd 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 .word 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1PROM .usect PROM,20 .bss a,20 .bss x,20 .bss y,20DATA .usect DATA,20 .text_c_int00 b start nop nopstart: STM #a,AR1 ;a20=0,1,2,3,4,5,6,7,8,9,10,;11,12,13,14,15,16,17,18,19 RPT #39 ;x20=1,1,1,1,1,1,1,1,1

7、,1;1,1,1,1,1,1,1,1,1,1 MVPD TBL,*AR1+ STM #x,AR2 ; 将数据存储器中的数组x20复制到数组y20 STM #y,AR3 STM #y,AR3 RPT #19 MVDD *AR2+,*AR3+ STM #a,AR1 ;将数据存储器中的a20写入到程序存储器PROM LD #PROM,A STM #19,AR3LOOPP: WRITA *AR1+ ADD #1,A,A BANZ LOOPP,*AR3-LD #PROM-1,A ; 读程序存储器PROM中20个数据存入数据存储器DATA STM #DATA,AR1 ST #19,BRC RPTB LOO

8、P2 ADD #1,A,ALOOP2: READA *AR1+ WAIT: NOP B WAIT4.建立链接文件在CCS环境中点击File-New-Source file菜单命令,打开一个空白文档,将汇编程序录入,单击File-Save菜单命令,出现如图1-5所示保存窗口,选择D:program Filesmyprojectsmyove子目录,在文件名一栏输入mymove,并选择保存类型为TI command Language Files(*.cmd),单击“保存”按钮,链接程序存盘。参考链接文件:MEMORYPAGE 0: RAM: origin=1000h,length=800h RAM1

9、: origin=2000h,length=300hPAGE 1: DARAM1: origin=0100h,length=100h DARAM2: origin=0200h,length=100h SECTIONS .data :RAM PAGE 0.text :RAM PAGE 0PROM : RAM1 PAGE 0.bss :DARAM1 PAGE 1DATA :DARAM2 PAGE 15.将有关文件添加到工程中点击Project-Add Files to Project菜单命令,选择文件mymove.asm,双击打开,将mymove.asm添加到工程。同理,将mymove.cmd添加

10、到工程中。6.汇编、编译和链接产生.out文件选择Project/Rebuild All.或工具条中的相应按钮,注意在监视窗口显示的汇编、编译和链接相关信息。如果没有错误,将产生mymove.out文件,如果有错,在监视窗口中以红色字体显示出相关信息,用鼠标双击该行,光标调至该行,修改程序后,重新汇编、链接。7.加载并运行.out文件 选择File-Load Program,选择mymove.out,将运行文件加载到DSP中,点击Debug-Run命令运行程序,若需单步执行程序则点击Debug-setpinto,若需设置断点进行调试,则将光标移至准备设置断点的一行,按下 图标,再点击Debug

11、-Run命令。8观察运行结果由.asm和.cmd文件可以确定数组a、x、y、 DATA、 PROM放置的位置,例如数组a放置在数据空间0100h开始的单元中,点击View-Momory菜单命令,出现如图1-6所示选项窗口图1-6 察看内存界面按照要求修改其中的address和Page值即可观察到相应结果。9.修改cmd文件,PROM地址范围改为2010H起始,DATA地址范围改为0210H起始,重新汇编、编译和链接、下载、运行,观察相应结果。10.阅读理解参考程序,并自行设计块传送程序实现LOOPP循环体功能。11.思考总结本程序中所用数据传送指令的功能以及存储器的配置情况。实验报告1. 简述

12、实验目的和要求2. 实验结果及分析 实验源程序清单:要求可读性好,必要时须加注释(如变量注释等)。 实验结果:给出CCS中的调试结果,并总结实验过程中出现问题和解决过程。 简要总结思考题实验二 定点数算术运算实验实验性质:基础性实验实验验目的:(1)熟悉CCS环境下DSP程序的开发流程,练习常用的调试和观察方法。(2)熟悉定点DSP数的表示方法及算数运算规则。(3)掌握定点DSP算术运算指令和编程技巧。实验原理:1. 数据的定标定点DSP芯片的数值表示是基于2的补码表示形式,C54x是16位定点DSP,DSP中的加法器、乘法器都是按无符号整数来运算的,如何处理小数呢?实际上,小数点的位置是一种

13、“假想”,是由程序员来确定的,通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数,这就是数的定标,数的定标有S表示法和Q表示法。Q表示法中用一个符号位、Q个小数位和15-Q个整数位来表示一个数。例如00000011.10100000表示的数值为3.625,这是Q8格式(用8表示小数位数),它表示数的范围为:-128+127.996,Q8定点数的小数精度为1/256=0.004。同样,一个16位数,采用的Q值不同(即小数点位置不同),表示的数就不同,Q值越大,数值范围越小,精度越高,反之,Q越小,数值范围越大,精度越低。定点数和浮点数的转换关系如下:浮点数(x)转换为定点数

14、(xq): xq(int)(x*2q) 定点数(xq)转换为浮点数(x): x(float)(x*2q)除特殊情况下(如动态范围和精度要求)需要混合表示法外,通常用Q15格式表示小数,以Q0格式表示整数。(1) Q0格式当一个16位数表示整数时,最低位(D0)表示20,D1位表示21,次高位(D14)表示214,最高位(D15)为符号位,0表示正数,1表示负数。Q0表示的数值范围为-3276832767,精度为1。(2) Q15格式当需要表示定点小数时,若小数的位置始终在最高位后,而最高位(D15)表示符号位为Q15格式。当一个16位数表示纯小数时,次高位(D14)表示2-1,然后是2-2,最

15、低位(D0)表示2-15。Q15表示的数值范围为-10.9999695,精度为2-15。将一个小数用Q15格式表示的方法是用215,再将其十进制整数部分转换成十六进制数,就得该小数的补码表示了,如图2-1所示。图2-1 DSP定点运算中小数的表示在汇编语言中不能直接写入十进制小数,如果要定义一个系数0.707,可以写成:.word 32768*707/10002.16位定点加法和减法C54X中提供了多条用于加法的指令,如ADD,ADDC,ADDM和ADDS。其中,ADDS用于无符号数的加法,ADDC用于带进位的加法运算(如32位扩展精度加法),而ADDM专用于立即数的加法。ADD用于有符号数加

16、法,寻址方式很多。C54X中提供了多条用于减法法的指令,如SUB、SUBB、SUBC和SUBS。其中,SUBS用于无符号数的减法运算,SUBB用于带进位的减法(如32位扩展精度减法)。而SUBC为条件减法指令,SUB与ADD一样,有多种寻址方式。本实验中采用ADD和SUB指令来完成加减运算的。指令的详细使用说明请参考TMS320C54x DSP Reference Set,。注意,在加法和减法运算中,必须保证两个操作数定标相同,整数加减运算和相同定标的小数加减运算是一样的。3.16位定点整数乘法在C54X中提供了大量的乘法运算指令,其结果都是32位,放在累加器A或B中。乘数在C54X的乘法指令

17、中很灵活,可以是T寄存器、立即数、存储单元和累加器A或B的高16位。MPY是有符号乘法指令,MPYU是无符号乘法指令,C54X中一般对数据的处理都是有符号的,本实验中,我们使用下列代码来说明整数乘法运算:RSBX FRCT ;清FRCT标志,准备整数乘LD temp1,T ;将变量temp1装入T寄存器MPY temp2 ,A ;完成temp1*temp2,结果放入T寄存器(32位)例如,当temp1=1234H(十进制的4660),temp2=9876H(十进制的-26506),乘法的结果在累加器A中为0F8A343F8H(十进制的-123517960)。这是一个32位的结果,需要两个内存单

18、元存放结果:STH A,mpy_I_H ;将结果高16位存入变量mpy_I_H中STL A,mpy_I_L ;将结果低16位存入变量mpy_I_L中当temp1=10H(十进制的16),temp2=05H(十进制的5),乘法结果在累加器A中为50H(十进制80),对于这种情况,仅需要保存低16位即可;STL A,mpy_I_L4.16位定点小数乘法在C54X中,小数的乘法与整数的乘法基本一样,只是由于两个有符号的小数相乘,其结果的小数点的位置在次高位的后面,所以必须左移一位,才能得到正确的结果。C54X中提供了一个状态位FRCT,将其设置为1时,系统自动将乘积结果左移一位。对于整数乘法不需要左

19、移,因此,乘法前要将FRCT清零。两个16位小数相乘后结果为32位,如果精度允许的话,可以只存高16位,将低16位丢弃,这样仍可得到16位结果。本实验中,我们用下列代码实现小数乘法:SSBX FRCT ;FRCT=1,准备小数乘法LD temp1,16,A ;将变量temp1装入累加器A的高16位MPYA temp2 ; 完成temp2乘累加器A的高16位,结果在B中,同时将temp2装入T寄存器STH B,mpy_f ; 将乘积结果的高16位存入变量mpy_f有时为了提高精度,可以使用RND或MPYR指令对低16位做四舍五入的处理。5.16位定点除法 在C54C中没有专门提供除法指令,一般有

20、两种方法来完成除法。一种是乘法来代替,除以某个数相当于乘以其倒数,所以先求出其倒数,然后相乘。这种方法对于除以常数特别适用,另一种方法是使用SUBC指令,加上重复指令RPT #15,通过16次条件减法完成无符号除法运算,再通过修正符号位实现有符号除法,详细代码如下: LD temp1 ,T ;将被除数装入T寄存器 MPY temp2,A;除数与被除数相乘,结果放入累加器A LD temp2 ,B ;将除数temp2装入累加器B的低16位 ABS B ;求绝对值 STL B,temp2 ;将累加器B的低16位存回temp2 LD temp1,B ;将被除数temp1装入累加器B的低16位 ABS

21、 B ;求绝对值 RPT #15 ;重复SUBC指令16次 SUBC temp2,B ;使用SUBC指令完成除法运算 BCD div_end,agt;判断除数与被除数是否同号 STL B,quot_i;将商存入变量quot_i STH B,remain_i ;将余数存入变量remain_i XOR B ;商为负,将B清零 SUB quot_i,B ;将商反号STL B,quot_i ;存回变量div_end: 6.16位定点小数除法 在C54X中实现16位的小数除法与前面的整数除法基本一致,也是使用循环的SUBC指令来完成。但有两点需要注意:第一,小数除法的结果一定是小数(小于1),所以被除数

22、一定小于除数。这与整数除法正好相反。所以在执行SUBC指令前,应将被除数装入累加器A或B的高16位而不是低16位,其结果的格式与整数除法一样累加器A或B的高16位为余数,低16位为商。第二,与小数乘法一样,应考虑符号位对结果小数的影响,所以应对商右移一位,得到正确的有符号数。实验要求(一) 基本任务1 阅读、理解、运行参考程序,观察结果,说明程序功能参考汇编程序: .mmregs .global _c_int00 VAL1 .set 012h ; 18VAL2 .set 034h ; 52VAL3 .set 04000h ; 0.5VAL4 .set 02000h ; 0.25(fractio

23、n) & 8192 (integer)VAL5 .set 04ab8h ; 0.58374VAL6 .set 0ffeeh ; -18VAL7 .set 0b548h ; -0.58374 .bss temp,1 ; address of 0x080 .bss temp1,1 ; address of 0x081 .bss temp2,1 ; address of 0x082 .bss temp3,1 ; address of 0x083 .bss temp4,1 ; address of 0x084;result register .bss add_result,1 ; address of

24、 0x085 .bss sub_result,1 ; address of 0x086 .bss mpy_i_h,1 ; address of 0x087 .bss mpy_i_l,1 ; address of 0x088 .bss mpy_f,1 ; address of 0x089 .bss quot_i,1 ; address of 0x08a .bss remain_i,1 ; address of 0x08b .bss quot_f,1 ; address of 0x08c .text _c_int00: ld #temp,DP ; load DP of temp1 st #VAL1

25、,temp1 st #VAL2,temp2 ; init temp1 & temp2 ,18+52=70(0x46);- test ADD - ld temp1,a ; load temp1 - a add temp2,a ; a+temp2 - a stl a,add_result ; save a(low 16 bits) - add_result nop ; set breakpoint st #VAL6,temp3 st #VAL1,temp4 ; init temp3 & temp4,(-18)-18=-36(0x0ffdc);- test SUB - stm #temp3,ar2

26、; address of temp3 - ar2 stm #temp4,ar3 ; address of temp4 - ar3 sub *ar2+,*ar3,b ; (temp316)-(temp4 b,ar2+ sth b,sub_result ; result in sub_result nop ; set breakpoint st #VAL1,temp1 st #VAL2,temp2 ; init temp1 & temp2,18*52=936(0x3a8);- test MPY (integer) - rsbx FRCT ; prepare for integer mpy ld t

27、emp1,T ; temp1 - T mpy temp2,a ; temp1*temp2 - A (result is 32 bit) sth a,mpy_i_h ; the high 16bit in mpy_i_h stl a,mpy_i_l ; the low 16bit in mpy_i_l nop ; set breakpoint st #VAL3,temp3 st #VAL7,temp4 ; init temp3 & temp4,0.5*(-0.58374)=-0.29187(0x0daa4);- test MPY (fraction) - ssbx FRCT ; prepare

28、for fraction mpy ld temp3,16,a ; load temp3 into A (high 16 bits) mpya temp4 ; temp3*temp4 - B, and temp4 - T sth b,mpy_f ; result in mpy_f nop ; set breakpoint st #VAL2,temp1 st #VAL6,temp2 ; init temp1 & temp2,52/-18= -2(0xfffe) mod 16(0x10);- test DIV (integer) - ld temp1,T ; load temp1 - T mpy t

29、emp2,A ; temp1*temp2 - A ld temp2,B ; load temp2 - B (low 16 bits) abs B ; |B| - B stl B,temp2 ; save B low 16 bits - temp2 ld temp1,B ; load temp1 - B (low 16 bits) abs B ; |B| - B rpt #15 ; repeat SUBC 16 times subc temp2,b ; use SUBC done div bcd idiv_end,agt ; delay jump, run the following two i

30、nstruction,then ; if A0,then jump to label idiv_end,end div stl B,quot_i ; save low 16 bits of B - quot_i - quotient sth B,remain_i ; save high 16 bits of B - remain_i - remainder xor B ; if result if negative, then 0 - B sub quot_i,B ; put minus to quotient stl B,quot_i ; save low 16 bits of B - quot_i - quotientidiv_end: nop ; set breakpoint st #VAL3,temp1 st #VAL5,temp2 ; init temp1

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

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