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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

DSP实验与技术报告.docx

1、DSP实验与技术报告DSP技术与实验报告报告人:陈哲学号:2009111109专业:电子信息工程实验一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的地址是0x10

2、00,变量y的地址是0x1005,变量x的地址又是多少呢? 答:1.为什么要设置成Address=0x1000?由文件test1.cmd中的:SPRAM:org=1000H len=1000H /*定义SPRAM区,起始地址1000H,长度1000H*/可知地址的起始地址为0x1000;2.为什么.bss的地址是0x1000,变量y的地址是0x1005,变量x的地址又是多少呢?.bss的地址是由test1.cmd文件设定的,x的地址是0x1000,0x1001,0x1002,0x1003,0x1004. 2+20+200+2000+20000=22222(16进制56EC)查看寄存器的状况。第

3、一步:点击菜单View-Registers-CPU Registers。基本界面如图1-8第二步:点击菜单File-Load Program重新装载可执行程序*.out。 第三步:点击菜单Debug-Step Into或按F8,观察程序在单步运行时(单步运行指的是按一次F8程序执行一步,再按一次F8程序再执行一步),CPU Registers的变化。单步运行有助于进一步了解程序运行机理及用于程序调试。查看指令代码。再一次装载并运行程序,点击菜单View-Disassembly, 查看并记录指令及其对应的指令代码并进行理解。12改变主程序example2.asm中x1x5的值(自定),重新执行9

4、11。记录x1x5、y的值并验算。13修改example2.cmd(自定义存储器配置及段的定位),重新执行911。记录程序、数据、标号、中断矢量的地址空间。实验二2、编写程序,计算y=x1+x2+x10 (xi的值自己定义 )。答:主程序文件task2_2.asm:*计算y=x1+x2+x3+x4+x5+x6+x7+x8+x9+x10的程序*.title task2_2.asm ;伪指令。用于格式化输出清单文件,声明在每页的顶部打印文件标题.mmregs ;伪指令。声明CPU寄存器名称STACK .usect STACK,10H ;伪指令。自定义未初始化段STACK及大小(10H个字),最左边

5、的STACK是标号.bss x,10 ;伪指令。声明数组x,10个字.bss y,1 ;伪指令。声明变量y,1个字.def start ;伪指令。声明本文件中的标号start能被别的文件(程序)引用.data ;伪指令,指示下面的代码为数据段,通常包含初始化的数据(常数)。 table: .word 1,2,3,4,5,6,7,8,9,10 ;伪指令。声明10个16位整数类型的常数。table是标号。.text ;伪指令,指示下面的代码为文本段,通常包含可执行的代码。 start: STM #0,SWWSR ; SWWSR=0,插入0个等待状态。start是标号。 STM #STACK+10H

6、,sp ;sp=#STACK+10H,设置堆栈指针指向堆栈段的底部 STM #x,AR1 ;AR1=#x或AR1指向数组x RPT #10 ;下一条指令重复执行4+1=5次 MVPD table,*AR1+;数据传送。程序存储器中的table数据表AR1+指向的数据存储器 LD #0,A ;累加器A清零 CALL SUM ;调用求和子程序SUMend: B end ;无条件转移到标号end所在地方执行程序SUM: ;标号,指示求和子程序SUM从这里开始 STM #x,AR3 ;AR3指向数组x STM #9,AR2 ;AR2=4loop: ADD *AR3+,A ;*AR3+AA,然后AR3=

7、 AR3+1。 loop是标号。BANZ loop,*AR2- ;如果AR2的值不为0, AR2= AR2-1,跳转到loop处执行;否则执行下一条指令 STL A,*(y) ; y=AL RET ;子程序返回 .end ;伪指令。指示汇编结束4、编写程序,计算y= a1x1 + a2x2 + a40x40 (aixi的值自己定义 )答:主程序文件task2_4.asm: .title sy21.asm .mmregsSTACK .usect STACK,60H .bss a,40 .bss x,40 .bss y,2 .datatable: .word 1,2,3,4,5,6,7,8,9,1

8、0,11 .word 12,13,14,15,16,17,18,19,20 .word 21,22,23,24,25,26,27,28,29,30 .word 31,32,33,34,35,36,37,38,39,40 .word 1,2,3,4,5,6,7,8,9,10,11 .word 12,13,14,15,16,17,18,19,20 .word 21,22,23,24,25,26,27,28,29,30 .word 31,32,33,34,35,36,37,38,39,40 .def start .textstart: STM #a,AR1 RPT #79 MVPD table,*A

9、R1+ LD #0,B STM #a,AR2 STM #x,AR3 STM #39,BRC RPTB done-1 LD *AR2+,T ;单操作数指令 MPY *AR3+,A ;单操作数指令 ADD A,Bdone: STH B,*(y) STL B,*(y+1)end: B end .end寄存器:6、编制程序,计算y= a1x1 + a2x2 + a10x10,其中数据均为小数(aixi的值自己定义 )。答:主程序为task2_6.asm*a1=0.1,a2=0.2,a3=-0.3,a4=0.4,a5=0.1,a6=0.2,a7=0.3,a8=0.8,a9=0.4,a10=0.4*x1=

10、0.8,x2=0.6,x3=-0.4,x4=-0.2,x5=-0.1,x6=0.8,x7=-0.4,x8=-0.2,x9=0.3,x10=0.3* .title task2_6.asm .mmregsSTACK .usect STACK,10H .bss a,10 .bss x,10 .bss y,1 .def start .datatable: .word 1*32768/10 ;0.1 .word 2*32768/10 ;0.2 .word -3*32768/10 ;-0.3 .word 4*32768/10 ;0.4 .word 1*32768/10 ;0.1 .word 2*32768

11、/10 ;0.2 .word 3*32768/10 ;0.3 .word 8*32768/10 ;0.8 .word 4*32768/10 ;0.4 .word 4*32768/10 ;0.4 .word 8*32768/10 ;0.8 .word 6*32768/10 ;0.6 .word -4*32768/10 ;-0.4 .word -2*32768/10 ;-0.2 .word -1*32768/10 ;-0.1 .word 8*32768/10 ;0.8 .word -4*32768/10 ;-0.4 .word -2*32768/10 ;-0.2 .word 3*32768/10

12、;0.3 .word 3*32768/10 ;0.3 .textstart: SSBX FRCT STM #a,AR1 RPT #19 MVPD table,*AR1+ STM #x,AR2 STM #a,AR3 RPTZ A,#9 MAC *AR2+,*AR3+,A STH A,*(y)end: B end .end内存的情况:8、编写浮点乘法程序,计算x1x2x3 =0.2(-0.4) 0.25主程序为:task2_8.asm:*x1:被乘数, m2:乘数的尾数, x2:乘数, ep:乘积的指数, e1:被乘数的指数*mp:乘积的尾数, m1:被乘数的尾数,product:乘积, e2:乘

13、数的指数, temp:暂存单元* .title task2_8.asm .mmregs .def startSTACK .usect STACK,100 .bss x1,1 .bss x2,1 .bss x3,1 .bss e1,1 .bss m1,1 .bss e2,1 .bss m2,1 .bss e3,1 .bss m3,1 .bss ep,1 .bss mp,1 .bss product,1 .bss temp,1 .datatable: .word 4*32768/10 ;0.4 .word -4*32768/10 ;-0.4 .word -25*32768/100;-0.25 .t

14、extstart: STM #STACK+100,SP ;设置堆栈指针 LD #x1, DP ;设置DP指针为x1所在页 MVPD table,x1 ;将x1和x2传送到数据存储器 MVPD table+1,x2 MVPD table+2,x3 LD x1,16,A ;将x1规格化为浮点数 EXP A ST T,e1 ;保存x1的指数 NORM A STH A, m1 ;保存x1的尾数 LD x2,16,A ;将x2规格化为浮点数 EXP A ST T,e2 ;保存x2的指数 NORM A STH A,m2 ;保存x2的尾数 CALL MULT ;调用浮点乘法子程序 LD x3,16,A ;将

15、x3规格化为浮点数 EXP A ST T,e3 ;保存x3的指数 NORM A STH A,m3 ;保存x3的尾数 CALL MULT ;调用浮点乘法子程序end: B endMULT:SSBX FRCT SSBX SXM LD e1,A ;指数相加 ADD e2,A STL A,ep ;乘积指数-ep LD m1,T ;尾数相乘 MPY m2,A ;乘积尾数在累加器A中 EXP A ;对尾数乘积规格化 ST T,temp ;规格化时产生的指数-temp NORM A STH A,mp ;保存乘积尾数在mp中 LD temp,A ;修正乘积指数 ADD ep,A ;(ep)+(temp)-ep

16、 STL A,ep ;保存乘积指数在ep中 NEG A ;将浮点乘积转换成定点数 STL A,temp ;乘积指数反号,并且加载到T寄存器 LD temp,T ;再将尾数按T移位 LD mp,16,A NORM A STH A,product ;保存定点乘积 RET .end内存的情况:实验三1设DSP的CPU主时钟频率为100MHz,指令周期为10ns,请说明产生频率为100KHz的周期三角波信号时,应该如何修改主程序。答:主程序main.asm中标号SINLOOP的RPT 1000修改为RPT 3.2如果在查找表中放置正弦波一个周期内的360个离散值(在MATLAB中产生),请重写产生正弦

17、波的主程序并仿真。答:vectors.asm文件:.title vectors.asm .ref start ;伪指令。声明要引用其他程序中定义的标号start .sect .vectors;伪指令。定义初始化的段名.vectors,这一种伪指令声明的段与.data和.text功能一致B start ;无条件转移到标号start所在的地方执行程序 .end主程序main.asm为: .mmregs .def _c_int00 .include c54.inc .ref c54initDA_ADDR .set 0x0002 ; 定义符号DA_ADDR表示D/A 端口地址 .datasin_tab

18、le: ;在这里放置一个周期的正弦波的360个离散值 .word 0,4,9,13,18,22,27,31,35,40,44,49,53,57,62,66 .word 70,75,79,83,87,91,96,100,104,108,112,116,120,124,127,131 .word 135,139,143,146,150,153,157,160,164,167,171,174,177,180,183,186 .word 190,192,195,198,201,204,206,209,211,214,216,219,221,223,225,227 .word 229,231,233,2

19、35,236,238,240,241,243,244,245,246,247,248,249,250 .word 251,252,253,253,254,254,254,255,255,255,255,255,255,255,254,254 .word 254,253,253,252,251,250,249,248,247,246,245,244,243,241,240,238 .word 236,235,233,231,229,227,225,223,221,219,216,214,211,209,206,204 .word 201,198,195,192,190,186,183,180,1

20、77,174,171,167,164,160,157,153 .word 150,146,143,139,135,131,127,124,120,116,112,108,104,100,96,91 .word 87,83,79,75,70,66,62,57,53,49,44,40,35,31,27,22 .word 18,13,9,4,0,-4,-9,-13,-18,-22,-27,-31,-35,-40,-44,-49 .word -53,-57,-62,-66,-70,-75,-79,-83,-87 -91 -96 -100,-104,-108,-112,-116 .word -120,-

21、124,-128,-131,-135,-139,-143,-146,-150,-153,-157,-160,-164,-167,-171,-174 .word -177,-180,-183,-186,-190,-192,-195,-198,-201,-204,-206,-209,-211,-214,-216,-219 .word -221,-223,-225,-227,-229,-231,-233,-235,-236,-238,-240,-241 -243,-244,-245,-246 .word -247,-248,-249,-250,-251,-252,-253,-253,-254,-25

22、4,-254,-255 -255,-255,-255,-255 .word -255,-255,-254,-254,-254,-253,-253,-252,-251,-250,-249,-248,-247,-246,-245,-244 .word -243,-241,-240,-238,-236,-235,-233,-231,-229,-227,-225,-223,-221,-219,-216,-214 .word -211,-209,-206,-204,-201,-198,-195,-192,-190,-186,-183,-180,-177,-174,-171,-167 .word -164

23、,-160,-157,-153,-150,-146,-143,-139,-135,-131,-128,-124,-120,-116,-112,-108 .word -104,-100,-96,-91,-87,-83,-79,-75,-70,-66,-62,-57,-53,-49,-44,-40 .word -35,-31,-27,-22,-18,-13,-9,-4 .bss DA_DATA,1 ;声明变量DA_DATA作D/A缓冲区 .bss DA_NUM,1 ; 声明变量DA_NUM作D/A计数器 .sect progsys ;自定义初始化段progsys .align 0x10 ;调整SP

24、C,下面的程序代码放置在存储器中时,起始地址对准16字的边界_c_int00: STM #0x0F80,SP ;设置堆栈指针 CALL c54init ;调整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中,软件仿真时在此处设置断点 P

25、ORTW DA_DATA,DA_ADDR ; 数据缓冲区DA_DATA中的值写到D/A端口,软件仿真时不起作用 RPT #100 ;下面的一条指令执行101次 NOP ;空操作,在这里起延时作用 ADDM #1,*(DA_NUM) ; DA_NUM循环计数 CMPM *(DA_NUM),#360 ; DA_NUM与359比较 BC SINLOOP,NTC ;一个周期内的64个点还没D/A完继续 B LOOP ;一个周期内的360个点已经D/A完,进入周期循环 .end实验四IIR的4阶低通滤波器:vectors.asm文件同上IIR_ditong.cmd文件如下:vectors.objIIR_

26、ditong.obj-o IIR_ditong.out-m IIR_ditong.map-estartMEMORYPAGE 0: EPROM: org=0090H,len=0F70H VECS: org=0080H,len=0010HPAGE 1: SPRAM: org=1000H,len=1000H DARAM: org=2000H,len=2000HSECTIONS.text : EPROM PAGE 0.data : EPROM PAGE 0.bss : SPRAM PAGE 1x: align(8) DARAM PAGE 1COEF: align(16) DARAM PAGE 1buf

27、fer :DARAM PAGE 1.vectors: VECS PAGE 0主程序IIR4_ditong.asm为:*用双操作数指令实现二阶低通IIR滤波器*反馈通道:x0=w(n)=x(n)+A1*x1+A2*x2+A3*x3+A4*x4前向通道:y(n)=B0*x0+B1*x1+B2*x2+B3*x3+B4*x4 * .title IIR4_ditong.asm .mmregs .def startx4 .usect x,1x3 .usect x,1 x2 .usect x,1x1 .usect x,1x0 .usect x,1COEF .usect COEF,9indata .usect

28、 buffer,1outdata .usect buffer,1*PA0 .set 10*PA1 .set 1 .datatable .word 0 .word 0 .word 0 .word 0 .word 0 .word 4*32768/10000 ;分子系数B4=0.0676 .word 17*32768/10000;分子系数B3=0.1352 .word 25*32768/10000 ;分子系数B2=0.0676 .word 17*32768/10000;分子系数B1=0.1352 .word 4*32768/10000 ;分子系数B0=0.0676 .word -1096*32768

29、/10000;分母系数A4=-0.4142 .word 5280*32768/10000 ;分母系数A3=0.0707 .word -9653*32768/10000;分母系数A2=-0.4142 .word 7952*32768/10000 ;分母系数A1=0.0707 .textstart: SSBX FRCT STM #x4,AR1 RPT #4 MVPD #table,*AR1+ STM #indata,AR5 STM #outdata,AR2 STM #COEF,AR1 RPT #8 MVPD #table+5,*AR1+ STM #COEF+8,AR4 ;AR4-A1 MVMM AR4,AR1 ;保存地址值在AR1中 STM #5,BK ;设

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

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