欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    《DSP技术与实验》实验指导书.doc

    • 资源ID:5016718       资源大小:1.40MB        全文页数:32页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《DSP技术与实验》实验指导书.doc

    2011秋季学期“DSP原理与应用”实验教学资料实验一 CCS集成环境的熟悉 -2学时实验二 算术运算与数据操作的汇编语言程序设计-2学时实验三 信号发生器设计 -2学时实验四 IIR滤波器的DSP实现 -2学时实验五 FIR滤波器的DSP实现 -2学时实验六 FFT的DSP实现 -2学时实验七 综合实验暨实验考查 -4学时实验报告内容:用每个实验要求的思考题代替实验报告,提交电子版,在实验结束时一起交。实验一CCS集成开发环境的熟悉一、实验内容及步骤通过编写程序计算y=x1+x2+x3+x4+x5练习CCS 2 (C5000)的使用。1在D盘或E盘建立一个自己的文件夹, 如e:05136101,该文件夹用英文或数字命名。后面所有与实验内容有关的工程与程序都在此文件夹下保存或操作。2运行CCS 2(C5000)进入CCS集成开发环境。以下操作如无特殊声明一般都在此环境下操作。3新建工程。点击主菜单Project-New,会出现图1-1所示的Project Creation对话框。图1-1参照图1-1按如下顺序进行设置或操作: Location:e:05136101 Project:example2 点击完成按钮即可。4新建并保存主程序文件、链接命令文件和中断向量表文件。本次实验三个文件的参考名称为:主程序文件example2.asm、链接命令文件example2.cmd、中断向量表文件vectors.asm。点击菜单File-New-Source File打开文本编辑窗口Untitled1,如图1-2。用菜单File-Save功能将其保存到e:05136101example2中,其中文件名称为example2,保存类型为*.asm,如图1-3。用同样的方法新建并保存文件example2.cmd和vectors.asm。图1-3图1-25为新建工程添加主程序文件、中断向量表文件和链接命令文件。在工程管理器中(图1-2中的红色方框处)右键单击example2.pjt,选择Add Files to Project,在出现的如图1-4所示的Add Files to Project对话框中查找并选中刚才建立的三个文件example2.asm,example2.cmd,vectors.asm,点击打开按钮将它们一起添加到该工程中去。图1-46编写主程序文件。单击工程管理器中的工程example2.pjt左边的+号展开example2.pjt工程,再单击文件夹Source左边的+号,如图1-5。找到并双击example2.asm ,在界面右边出现的example2.asm文本编辑窗口中输入或复制主程序(注释部分可不输入)。文件内容如下:图1-5*计算y=x1+x2+x3+x4+x5的程序*.title "example2.asm" ;伪指令。用于格式化输出清单文件,声明在每页的顶部打印文件标题.mmregs ;伪指令。声明CPU寄存器名称STACK .usect "STACK",10H ;伪指令。自定义未初始化段STACK及大小(10H个字),最左边的STACK是标号.bss x,5 ;伪指令。声明数组x,5个字.bss y,1 ;伪指令。声明变量y,1个字.def start ;伪指令。声明本文件中的标号start能被别的文件(程序)引用.data ;伪指令,指示下面的代码为数据段,通常包含初始化的数据(常数)。 table: .word 10,20,3,4,5 ;伪指令。声明5个16位整数类型的常数。table是标号。.text ;伪指令,指示下面的代码为文本段,通常包含可执行的代码。 start:STM #0,SWWSR ; SWWSR=0,插入0个等待状态。start是标号。STM #STACK+10H,sp ;sp=#STACK+10H,设置堆栈指针指向堆栈段的底部STM #x,AR1 ;AR1=#x或AR1指向数组xRPT #4 ;下一条指令重复执行4+1=5次MVPD table,*AR1+ ;数据传送。程序存储器中的table数据表AR1+指向的数据存储器LD #0,A;累加器A清零CALL SUM;调用求和子程序SUMend: B end ;无条件转移到标号end所在地方执行程序SUM: ;标号,指示求和子程序SUM从这里开始STM #x,AR3;AR3指向数组xSTM #4,AR2;AR2=4loop: ADD *AR3+,A ;*AR3+AA,然后AR3= AR3+1。 loop是标号。BANZ loop,*AR2-;如果AR2的值不为0, AR2= AR2-1,跳转到loop处执行;否则执行下一条指令STL A,*(y) ; y=ALRET ;子程序返回.end ;伪指令。指示汇编结束7)编写链接命令文件。在工程管理器中双击example2.pjt工程中的example2.cmd ,将出现example2.cmd文本编辑窗口。在该文本编辑窗口中输入或复制文件内容。文件内容如下:vectors.obj/*声明要链接的文件-中断向量表文件的目标文件*/ example2.obj/*声明要链接的文件-主程序文件的目标文件*/ -o example2.out/*声明链接产生的可执行文件名称,默认为a.out */ -m example2.map/*声明链接产生的存储器映射文件*/ -estart/*声明主程序入口*/MEMORY /*关键字加一对,存储器配置*/PAGE 0: /*程序存储区*/ EPROM:org=0090H len=0F70H/*定义EPROM区,起始地址0090H,长度0F70H*/ VECS: org=0080H len=0010H/*定义VECS区,起始地址0080H,长度0010H*/PAGE 1: /*数据存储区*/ SPRAM:org=1000H len=1000H /*定义SPRAM区,起始地址1000H,长度1000H*/ DARAM:org=2000H len=2000H /*定义DARAM区,起始地址2000H,长度2000H*/SECTIONS /*关键字加一对,定位段*/.text :>EPROM PAGE 0/*将.text段映射或定位到PAGE0的EPROM区*/.data :>EPROM PAGE 0/*将.text段映射或定位到PAGE0的EPROM区*/.bss :>SPRAM PAGE 1/*将.text段映射或定位到PAGE1的SPRAM区*/STACK :>DARAM PAGE 1/*将.text段映射或定位到PAGE1的DARAM区*/.vectors :>VECS PAGE 0 /*将.vectors段映射或定位到PAGE0的VECS区*/8编写中断向量表文件。在工程管理器中双击example2.pjt工程中的vectors.asm ,将出现vectors.asm文本编辑窗口。在该文本编辑窗口中输入或复制文件内容。文件内容如下:.title "vectors.asm".refstart ;伪指令。声明要引用其他程序中定义的标号start.sect ".vectors" ;伪指令。定义初始化的段名.vectors,这一种伪指令声明的段与.data和.text功能一致Bstart ;无条件转移到标号start所在的地方执行程序.end9对工程中的文件进行编译和链接。点击菜单ProjectRebuild All,对工程中的所有文件进行编译、链接。工程中的文件如果编译链接成功,会生成example2.out文件;如果不成功,会出现出错信息,这时应按照提示的出错信息对文件进行修改,然后再Rebuild All。10装载可执行文件。要让程序代码在DSP内部运行必需将生成的*.out文件装载到DSP内部。点击菜单File-Load Programe,选择并双击刚才生成的example2.out文件将程序装载到DSP的内部存储器中。11运行程序,查看并记录相关结果。点击菜单Debug-Run或按功能键F5运行程序。查看数据的保存情况。点击菜单View-Memory,会出现图1-6 (a)所示的“Memory Window Options”对话框,按图1-6 (a)设置Address=0x1000(为什么要设置成Address=0x1000?),Page=Data。点击OK按钮,观察出现的如图1-6 (b)所示的“Memory ”对话框,这个对话框显示的是变量在数据存储器中的地址与值。请思考:为什么.bss的地址是0x1000,变量y的地址是0x1005,变量x的地址又是多少呢? 图1-6 (a) ( b)查看程序的保存情况。点击菜单ViewMemory,按图1-7 (a)设置Address=0x0090(为什么要设置成Address=0x0090?),Page=Program。点击OK按钮,观察出现的如图1-7 (b)所示的“Memory ”对话框,这个对话框显示的是可执行程序在程序存储器中的地址与指令代码。请思考:为什么.text段的地址是0x0090?标号end的地址是0x009C?标号SUM的地址是0x009E?标号loop的地址是0x00A2?.data段的地址是0x00A8? 图1-7 (a) (b)查看寄存器的状况。第一步:点击菜单View-Registers-CPU Registers。基本界面如图1-8。 图1-8第二步:点击菜单File-Load Program重新装载可执行程序*.out。 第三步:点击菜单Debug-Step Into或按F8,观察程序在单步运行时(单步运行指的是按一次F8程序执行一步,再按一次F8程序再执行一步),CPU Registers的变化。单步运行有助于进一步了解程序运行机理及用于程序调试。查看指令代码。再一次装载并运行程序,点击菜单View-Disassembly, 查看并记录指令及其对应的指令代码并进行理解。图1-912改变主程序example2.asm中x1x5的值(自定),重新执行911。记录x1x5、y的值并验算。13修改example2.cmd(自定义存储器配置及段的定位),重新执行911。记录程序、数据、标号、中断矢量的地址空间。二、思考题-见实验步骤11、12、13的要求。实验二 算术运算与数据操作的汇编语言程序设计实验一、实验内容与步骤(2、3、4、5、7选做,6、8必做)1、运行CCS。2、编写程序,计算y=x1+x2+x10 (xi的值自己定义 )。3、编写程序,计算z=x+y-w、y=mx+bx、y=x1×a2-x2×a2 (自变量的值自己定义 )。4、编写程序,计算y= a1x1 + a2x2 + a40x40 (aixi的值自己定义 )。5、编写程序,用长字运算指令实现Z32=X32+Y32,用并行运算指令实现z=x+y和f=e+d。6、编制程序,计算y= a1x1 + a2x2 + a10x10,其中数据均为小数(aixi的值自己定义 )。7、分别编写程序,计算(-0.24)÷0.48和1024÷128。8、编写浮点乘法程序,计算x1×x2×x3 =0.2×(-0.4) ×0.25。 上述每个实验内容基本操作步骤与要求同实验一的步骤311。二、实验习题-编写浮点乘法程序,用调用子程序的方法计算x1×x2×x3 ×x4 =0.2×(-0.4)×0.25×0.66。三、参考程序1)用单操作数指令计算y=(a1*x1+a2*x2+···a19*x19+a20*x20)- 54-.title"sy21.asm".mmregsSTACK.usect "STACK",30H.bssa,20.bssx,20.bssy,2.datatable: .word1,2,3,4,5,6,7,8,9,10,11 .word12,13,14,15,16,17,18,19,20 .word21,22,23,24,25,26,27,28 .word29,30,1,2,3,4,5,6,7,8,9,10.def start.textstart:STM #a,AR1RPT #39MVPDtable,*AR1+LD #0,BSTM #a,AR2STM #x,AR3STM #19,BRCRPTBdone-1LD *AR2+,T;单操作数指令MPY *AR3+,A;单操作数指令ADD A,Bdone: STH B,*(y)STL B,*(y+1)end:B end.end2)用"长字运算"实现32位加法运算Z=X+Y.title"sy22.asm".mmregsSTACK.usect "STACK",10H.bssxhi,2,1,1.bssyhi,2,1,1.bsszhi,2,1,1.defstart.datatable: .long16782345H,10200345H.textstart:STM #0,SWWSRSTM #STACK+10H,SPSTM #xhi,AR1RPT#3MVPDtable,*AR1+DLD *(xhi),ADADD*(yhi),ADSTA,*(zhi)end:Bend.end3)用并行指令计算z=x+y,f=e+d.title"sy23.asm".mmregsSTACK.usect "STACK",10H.bssx,3.bssd,3.defstart.datatable: .word 0123H,1027H,0,1020H,0345H,0.textstart:STM #0,SWWSRSTM #STACK+10H,SPSTM #x,AR1RPT#5MVPDtable,*AR1+STM #x,AR5STM #d,AR2LD#0,ASMLD*AR5+,16,AADD *AR5+,16,ASTA,*AR5;并行指令|LD*AR2+,BADD *AR2+,16,BSTHB,*AR2end:Bend.end4)小数运算。计算y=a1*x1+a2*x2+a3*x3+a4*x4*a1=0.1,a2=0.2,a3=-0.3,a4=0.2, x1=0.8,x2=0.6,x3=-0.4,x4=-0.2*.title"sy24.asm".mmregsSTACK.usect "STACK",10H.bssa,4.bssx,4.bssy,1.defstart.datatable: .word1*32768/10 ;0.1 .word2*32768/10 ;0.2 .word-3*32768/10 ;-0.3 .word4*32768/10 ;0.4 .word8*32768/10 ;0.8 .word6*32768/10 ;0.6 .word-4*32768/10 ;-0.4 .word-2*32768/10 ;-0.2.textstart:SSBXFRCTSTM #a,AR1RPT#7MVPDtable,*AR1+STM #x,AR2STM #a,AR3RPTZA,#3MAC *AR2+,*AR3+,ASTHA,*(y)end:Bend.end5)除法运算。|被除数|<|除数|,商为小数。计算0.4÷(-0.8)的值。.title"sy25.asm".mmregsSTACK.usect "STACK",10H.bssnum,1;分子.bssden,1;分母.bssquot,1;商.datatable: .word4*32768/10;-128 .word-8*32768/10;1024.defstart.textstart:LD#0020H,DP;设置数据页指针,使DP指向第31页(1000H处)STM #num,AR1RPT#1MVPDtable,*AR1+;传送2个数据至分子、分母LDden,16,A ;将分母移到累加器A(3116)MPYAnum;(num)*(A(3116)->B,获取商的符号;(在累加器B中)ABSA;分母取绝对值STHA,den;分母取绝对值存回原处LDnum,16,A;将分子移到累加器A(3216)ABSA;分子取绝对值RPT#14;15次减法循环,完成除法SUBCden,AXC1,BLT;如果B<0(商为负数),则需要变号NEGASTLA,quot;保存商end:Bend.end6)除法运算。|被除数|>=|除数|,商为整数。计算16384÷512的值。.title"sy26.asm".mmregsSTACK .usect"STACK",10H.bssnum,1;分子.bssden,1;分母.bssquot,1;商.datatable: .word66*32768/100;16384 .word-33*32768/100;512.defstart.textstart:LD#0020H,DP;指定数据页指针STM #num,AR1RPT#1MVPDtable,*AR1+;传送2个数据至分子、分母LDden,16,A ;将分母移到累加器A(3116)MPYAnum;(num)*(A(3116)->B,获取商的符号;(在累加器B中)ABSA;分母取绝对值STHA,den;分母取绝对值存回原处LDnum,A;将分子移到累加器A(3216)ABSA;分子取绝对值RPT#15;16次减法循环,完成除法SUBCden,AXC1,BLT;如果B<0(商为负数),则需要变号NEG ASTLA,quot;保存商end:Bend.end7)浮点运算。计算x1*x2=0.3*(-0.8)*x1:被乘数, m2:乘数的尾数, x2:乘数, ep:乘积的指数, e1:被乘数的指数* mp:乘积的尾数, m1:被乘数的尾数, product:乘积, e2:乘数的指数,temp:暂存单元*.title"sy27.asm".mmregs.defstartSTACK .usect"STACK",100.bssx1,1.bssx2,1.bsse1,1.bssm1,1.bsse2,1.bssm2,1.bssep,1.bssmp,1.bssproduct,1.bsstemp,1.datatable: .word3*32768/10;0.3 .word-8*32768/10;-0.8.textstart:STM #STACK+100,SP;设置堆栈指针 LD #x1, DP ;设置DP指针为x1所在页MVPD table,x1 ;将x1和x2传送到数据存储器MVPDtable+1,x2LDx1,16,A ;将x1规格化为浮点数EXPASTT,e1;保存x1的指数NORMASTH A,m1;保存x1的尾数LDx2,16,A ;将x2规格化为浮点数EXPASTT,e2;保存x2的指数NORMASTHA,m2;保存x2的尾数CALLMULT;调用浮点乘法子程序end:BendMULT:SSBXFRCTSSBXSXMLDe1,A;指数相加ADD e2,ASTLA,ep;乘积指数->epLDm1,T;尾数相乘MPY m2,A;乘积尾数在累加器A中EXPA ;对尾数乘积规格化STT,temp ;规格化时产生的指数->tempNORMASTHA,mp;保存乘积尾数在mp中LDtemp,A;修正乘积指数ADD ep,A ;(ep)+(temp)->epSTLA,ep;保存乘积指数在ep中NEG A ;将浮点乘积转换成定点数STLA,temp ;乘积指数反号,并且加载到T寄存器LDtemp,T;再将尾数按T移位LDmp,16,ANORMASTHA,product;保存定点乘积RET.end8) 链接配置文件参照实验一中的example2.cmd,但要作简单修改。中断向量表文件参照实验一中的vectors.asm,可不作修改。实验三 信号发生器设计一、实验原理采用查找表的方法产生周期信号。在DSP的内部RAM中放上一个周期的正弦波数据表,通过程序按一定时间间隔将表中的数据写到D/A端口,在D/A输出端就可以得到周期性的正弦波信号。更改查找表的数据,就可以在D/A输出端得到不同的周期信号。二、实验内容与步骤1、运行CCS。2、采用查找表的方式产生正弦波、方波、三角波等常见波形。1)在CCS环境下新建DA工程和五个文件main.asm、c54init.asm、C54.inc、memory.cmd、vectors.asm。2)分别编辑五个文件并将他们添加到DA工程中。参考程序如下。主程序main.asm.mmregs.def _c_int00.include c54.inc.ref c54initDA_ADDR .set 0x0002 ; 定义符号DA_ADDR表示D/A 端口地址.datasin_table: ;在这里放置一个周期的正弦波的64个离散值.word 255,254,252,249,245,239,233,225.word 217,207,197,186,174,162,150,137.word 124,112,99,87,75,64,53,43.word 34,26,19,13,8,4,1,0.word 0,1,4,8,13,19,26,34.word 43,53,64,75,87,99,112,124.word 137,150,162,174,186,197,207,217.word 225,233,239,245,249,252,254,255 .bss DA_DATA,1 ;声明变量DA_DATA作D/A缓冲区 .bss DA_NUM,1 ; 声明变量DA_NUM作D/A计数器 .sect "progsys" ;自定义初始化段progsys .align 0x10 ;调整SPC,下面的程序代码放置在存储器中时,起始地址对准16字的边界_c_int00: STM #0x0f80,SP ;设置堆栈指针 CALLc54init ;调整DSP初始化程序,硬件仿真时必须的部分LD #sin_table ,DP ;设置数据页指针,DP指向sin_table所在的数据存储器页LOOP: ;周期循环标号ST #0,DA_NUM ;计数变量清零STM #sin_table,AR1 ; AR1指向查找表首地址SINLOOP: ;一个周期内的D/A循环标号MVDK *AR1+,DA_DATA ;读查找表中的值放入到数据缓冲区DA_DATA中,软件仿真时在此处设置断点PORTWDA_DATA,DA_ADDR ; 数据缓冲区DA_DATA中的值写到D/A端口,软件仿真时不起作用RPT#1000 ;下面的一条指令执行1001次NOP ;空操作,在这里起延时作用ADDM #1,DA_NUM ; DA_NUM循环计数CMPMDA_NUM,#63; DA_NUM与63比较 BC SINLOOP,NTC ;一个周期内的64个点还没D/A完继续 B LOOP ;一个周期内的64个点已经D/A完,进入周期循环.end 初始化程序c54init.asm.mmregs.include c54.inc.def c54init.sect "progsys"c54init:STM #0x7208,SWWSR ;0 111 001 000 001 000STM #0,SWCR ;等待周期不变,(STM #1,SWCR 等待周期加倍)STM #0xF800,BSCR ;1111 1000 0000 0000STM #0,ST0 ;数据页指针指向第0页STM #0x2b00,ST1 ;0010 1011 0000 0000, INTM=1 将全局中断禁止;SXM=1 数据进入ALU之前进行符号位扩展;OVM=1 溢出控制位(参考ST1资料)STM #0x2fe4,PMST;0010 1111 1110 0100,将中断向量表映射到2f80H=0010 1111 1000 0000BSTM #0xFFFF,IFR ;清除挂起的中断STM #0x0000,IMR ;关闭所有中断, STM #0,CLKMD ;利用软件对CLKMD进行加载clkcon:LDM CLKMD,AAND #0x01,ABC clkcon,ANEQSTM #0x43ff,CLKMD;0100 0011 1111 1111 ;PLL=4 MUL=5 100Mhz; PLL=3 MUL=4 80MhzSTM #0x0010,TCR1; TCR1为定时器1的定时控制寄存器。timer1 stopSTM #0x0010,TCR; TCR为定时器0的定时控制寄存器。TSS=1 Timer stopSTM #12800,PRD ; PRD为定时器0的周期寄存器STM #0x0020,TCR ;定时中断周期CLKOUT*(TDDR+1)*(PRD+1)RSBX INTM ;将全局中断使能NOPNOPRET.end中断向量表程序vectors.asm.include c54.inc.sect ".vectors".ref _c_int00 .align 0x80 RESET: ; reset vector B _c_int00 NOP NOPnmi: RETE NOP NOP NOP ; software interruptssint17 .space 4*16 sint18 .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 NOP int2: RETE NOP NOP NOPtint: RETE NOP NOP NOPrint0: RETE NOP NOP NOPxint0: RETE NOP NOP NOPDMAC0:RETE NOP NOP NOPDMAC1:RETE ;tint1 NOP NOP NOPint3: RETE NOP NOP NOPHPINT:RETE NOP NOP NOPDMAC2:RETE ;rint1 NOP NOP NOPxint1: RETE NOP NOP NOPDMAC4:RETE NOP NOP NOPDMAC5:RETE NOP NOP NOP .end链接配置文件memory.cmd/*-e _c_int00-m sensor.mapMEMORY PAGE 0: PROG: origin = 0x2000, len = 0x0f80 VECT: origin = 0x2f80, len = 0x80/*128word*/ PAGE 1: DRAM: origin = 0x3000, len = 0xf80SECTIONS .progsys: load = PROG PAGE 0 .vectors: load = VECT PAGE 0 .d

    注意事项

    本文(《DSP技术与实验》实验指导书.doc)为本站会员(西安人)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开