欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    DSP汇编程序设计举例.ppt

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

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

    DSP汇编程序设计举例.ppt

    1,DSP技术与应用,学时:32(含8学时实验),2,第6章 TMS320C54XXDSP汇编程序设计举例,3,例7-3(段定义及数据传送举例),1.实现数组a20=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19x20=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1的初始化,将两数组置于数据存储器中0100H开始的连续地址空间中(0100H-0127H);2.将数据存储器中的x20复制到数组y20(0128H-013BH);3.将数据存储器中的a20写入到程序存储器PROM(2000H-2013H);4.程序存储器PROM中20个数据存入数据存储器DATA(0200H-0213H)。,4,.mmregs.def _c_int00.dataTBL:.word:0,1,2,3,4,5,6,7,8,9,10,11,12.word 13,14,15,16,1 7,18,19.word 1,1,1,1,1,1,1,1,1,1.word 1,1,1,1,1,1,1,1,1,1PROM:.usect PROM,20.bss a,20.bss x,20.bss y,20DATA:.usectDATA,20,汇编源程序:,5,_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,1 MVPD TBL,*AR1+;1,1,1,1,1,1,1,1,1,1;完成任务1 STM#x,AR2;将数据存储器中的数组x20复制到数组y20 STM#y,AR3;y20=1,1,1,1,1,1,1,1,1,1 RPT#19;1,1,1,1,1,1,1,1,1,1 MVDD*AR2+,*AR3+;完成任务2,.text,6,STM#a,AR1;数据存储器中a20写入程序存储器 LD#PROM,A;PROM段 STM#19,AR3LOOP1:WRITA*AR1+;完成任务3 ADD#1,A,A BANZ LOOP1,*AR3-LD#PROM-1,A;程序存储器PROM中20个数据存入数据 STM#DATA,AR1;存储器DATA段 ST#19,BRC RPTB LOOP2 ADD#1,A,ALOOP2:READA*AR1+;该指令为单字指令(完成任务4)WAIT:NOP B WAIT.end,7,链接命令文件:MEMORY PAGE 0:RAM:origin=1000h,length=800h RAM1:origin=2000h,length=300h PAGE 1:DARAM1:origin=0100h,length=100h DARAM2:origin=0200h,length=100h SECTIONS.data:RAM PAGE 0.text:RAM PAGE 0 PROM:RAM1 PAGE 0.bss:DARAM1 PAGE 1 DATA:DARAM2 PAGE 1,8,定点DSP中数的定标有Q和S两种表示方法(如下表所示),16位的二进制中有一个符号位、15-Q个整数位.Q个小数位。,DSP 中小数的表示,一般情况下以Q0格式表示整数以Q15格式表示小数。,两个Q15格式的小数相乘结果为Q30格式小数,出现符号位冗余,解决方法是将FRCT置1,系统自动将相乘结果左移1位(即x2),精度允许时只保存高16位,Q15定标:,9,例7-4使用C54汇编语言编程计算并观察计算结果:z1=x1+y1;z2=x1-y1;z3=x1*y1;z4=x2*y2.其中,x1=20,y1=54,x2=0.5,y2=-0.5837,例7-4(整数、小数运算举例),10,汇编源程序:.title“suanshu.asm”.mmregs.def start,_c_int00.bss x1,1;地址 0400h.bss x2,1;地址 0401h.bss y1,1;地址 0402h.bss y2,1;地址 0403h.bss z1,1;地址 0404h.bss z2,1;地址 0405h.bss z3_h,1;地址 0406h.bss z3_l,1;地址 0407h.bss z4,1;地址 0408hv1.set 014Hv2.set 036Hv3.set 04000H;x2=0.5v4.set 0b548H;y2=-0.5837.text_c_int00 b start nop nopstart:LD#x1,DP;(DP=?),ST#v1,x1 ST#v2,y1 LD x1,A ADD y1,A STL A,z1;(单元地址?)NOP LD x1,A SUB y1,A STL A,z2;(单元地址?)NOP RSBX FRCT LD x1,T MPY y1,A STH A,z3_h;(单元地址?)STL A,z3_l;(单元地址?)NOP ST#v3,x2 ST#v4,y2 SSBX FRCT LD x2,16,A MPYA y2 STH B,z4;(单元地址?)NOPend:B end.end,例7-4(数据运算举例),11,链接命令文件:suanshu.obj-m suanshu.map-o suanshu.outMEMORYPAGE 0:ROM1:origin=0080h,length=1000h ROM2:origin=0060h,length=10h PAGE 1:OTHER:origin=0400h,length=40h SECTIONS.text:ROM1 PAGE 0.data:ROM1 PAGE 0.bss:OTHER PAGE 1.stack:OTHER PAGE 1,12,例7-5(小数乘法举例)汇编源程序:.title“chef.asm”.mmregs.def start,_c_int00.bss x,4.bss a,4.bss y,1.datatable:.word 1*32768/10.word 2*32768/10.word-3*32768/10.word 4*32768/10.word 8*32768/10.word 6*32768/10.word-4*32768/10.word-2*32768/10,.text_c_int00 b start nop nop start:SSBX FRCT STM#0,SWWSR STM#x,AR1 RPT#7 MVPD table,*AR1+STM#x,AR2 STM#a,AR3 STM#y,AR4 RPTZ A,#3 MAC*AR2+,*AR3+,A STH A,*AR4done:B done.end,13,链接命令文件:MEMORY PAGE 0:RAM:origin=1000h,length=800h RAM1:origin=2000h,length=300h PAGE 1:DARAM1:origin=0100h,length=100h DARAM2:origin=0200h,length=100h SECTIONS.data:RAM PAGE 0.text:RAM PAGE 0 PROM:RAM1 PAGE 0.bss:DARAM1 PAGE 1 DATA:DARAM2 PAGE 1,14,例7-6(带符号除法且商为小数)汇编源程序:,.title“shuf.asm”.mmregs.def start,_c_int00.bss num,1.bss den,1.bss quot,1.datatable.word 4*32768/10;分子.word-8*32768/10;分母.text_c_int00 b start nop nop start:STM#num,AR1;分子,RPT#1 MVPD table,*AR1+STM#den,AR1;分母 LD*AR1-,16,A MPYA*AR1+ABS A;分母绝对值 STH A,*AR1-LD*AR1,16,A ABS A;分子绝对值 STH A,*AR1 LD*AR1+,A RPT#14;(15bit除法)SUBC*AR1,A XC 1,BLT NEG A STL A,*(quot).end,15,.mmregs.bss x,4.bss y,2.dataa.word 1,2,3,4.textSTM#a,AR2STM#x,AR3LD#0,ALD*AR2+,TMAC*AR3+,ALD*AR2+,T,MAC*AR3+,ALD*AR2+,TMAC*AR3+,ALD*AR2,TMAC*AR3,ASTL A,ySTH A,y+1.,算法一:,举例1:乘加运算,16,链接命令文件:MEMORY PAGE 0:RAM:origin=1000h,length=1000h PAGE 1:DARAM:origin=2000h,length=1000h SECTIONS.text:RAM PAGE 0.bss:DARAM PAGE 1.data:DARAM PAGE 1,17,.mmregs.bss x,4.bss y,2.dataa.word 1,2,3,4.textSTM#a,AR2STM#x,AR3LD#0,ASTM#3,BRC,RPTB ss-1 LD*AR2+,TMAC*AR3+,Ass:STL A,ySTH A,y+1.,算法二:,举例1:乘加运算,18,.mmregs.bss a,4.bss x,4.bss y,2.datatable.word 1,2,3,4.textSTM#a,AR1 RPT#3MVPD table,*AR1+LD#0,A,STM#a,AR2STM#x,AR3STM#3,BRCRPTB ss-1LD*AR2+,TMPY*AR3+,A ss:LD#a,DPSTL A,ySTH A,y+1.,算法三:,举例1:乘加运算,19,链接命令文件:MEMORY PAGE 0:RAM:origin=1000h,length=1000h PAGE 1:DARAM:origin=2000h,length=1000h SECTIONS.data:RAM PAGE 0.text:RAM PAGE 0.bss:DARAM PAGE 1,20,.mmregs.bss a,4.bss x,4.bss y,2.datatable.word 1,2,3,4.word 8,7,6,5.textSTM#a,AR1RPT#7MVPD table,*AR1+,STM#a,AR2STM#x,AR3RPTZ A,#3MAC*AR2+,*AR3+,ALD#a,DPSTL A,ySTH A,y+1.,算法四:,举例1:乘加运算,21,.title“DIV.mmregs.def _c_int00DAT0.set01HDAT1.set02HDAT2.set03HDAT3.set04H.databuff.space 100h*16.text_c_int00:B start,举例2:除法运算,22,start:LD#020h,DP;置数据页指针 SSBX INTM;禁止中断 DIV:ST#0008h,DAT0 ST#0002h,DAT1RSBX SXM*无符号除法操作:DAT0 DAT1;结果:DAT2:商;DAT3:余数LD DAT0,ARPT#15SUBC DAT1,ASTL A,DAT2STH A,DAT3.end,23,.mmregs.bss a,4.bss x,4.bss y,1.def _c_int00.datatable.word 1,5,3,4.word 8,6,7,9.sect vectorsrst B _c_int00 NOP NOP.text_c_int00 STM#a,AR1 RPT#7 MVPD table,*AR1+CALL MAXend:B end,MAX:STM#a,AR1STM#x,AR2STM#2,AR3LD*AR1+,TMPY*AR2+,A loop:LD*AR1+,TMPY*AR2+,B MAX ABANZ loop,*AR3-STL A,yRET.end,找出乘积项中的最大值,举例3:,24,链接命令文件:MEMORY PAGE 0:RAM:origin=1000h,length=500h RAM1:origin=1800h,length=100h PAGE 1:DARAM:origin=2000h,length=1000h SECTIONS.data:RAM PAGE 0.text:RAM PAGE 0vectors:RAM1 PAGE 0.bss:DARAM PAGE 1,25,FIR滤波器设计,7.5.1 线性缓冲区法 又称为延迟线法。对于N阶FIR滤波器在数据区开辟一个N单元的线性缓冲区存放N个样本;每次滤波从最老样本开始,每个样本参与运算后下移一单元并在顶部结束读入新样本。其特点是依次下移覆盖/底部淘汰/顶部更新。,设N阶FIR滤波器的系数(单位脉冲冲击响应)为:h(0),h(1),.h(N-1),x(n)表示滤波器在n时刻的输入,则n时刻的输出y(n)为:,线性缓冲区示意图(N=6),系数表,1次y(n)计算结束ARx指向顶部读入新样本,覆盖更新数据,延迟算法由LTD指令完成,26,*采用线性缓冲区法编写的FIR数字滤波器程序*,.title“fir.asm”.mmregs.def start.bss y,1x.usect“x”,6h.usect“h”,6PA0.set 0PA1.set 1.dataTable:.word 2*32768/10.word-3*32768/10.word 4*32768/10.word-3*32768/10.word 2*32768/10.word 4*32768/10.textStart:STM#h,AR2 RPT#5 MVPD table,*AR2+STM#x+5,AR1;AR1指向x(n-5)STM#h+5,AR2;AR2指向h(5),STM#5,AR0SSBX,FRCTLD#x,DPPORTR PA1,x FIR:LD*AR1-,T;x(n-5)-T LD#0,AMPY*AR2-,A;h5*x(n-5)-ALTD*AR1-;x(n-4)-T,x(n-4)-(n-5)MAC*AR2-,ALTD*AR1-;x(n-3)-T,x(n-3)-(n-4)MAC*AR2-,ALTD*AR1-;x(n-2)-T,x(n-2)-(n-3)MAC*AR2-,ALTD*AR1-;x(n-1)-T,x(n-1)-(n-2)MAC*AR2-,ALTD*AR1;x(n)-T,x(n)-(n-1)MAC*AR2+0,ASTH A,y;save y(n)Portw y,PA0BD FIRPORTR PA1,*AR1+0;x(n+1)-顶部.end,27,MEMORY PAGE 0:RAM:origin=1000h,length=100h RAM1:origin=1200h,length=500h PAGE 1:DARAM1:origin=0100h,length=100h DARAM2:origin=0200h,length=100hSECTIONS.data:RAM PAGE 0.text:RAM1 PAGE 0.bss:DARAM1 PAGE 1 x:DARAM2 PAGE 1 h:DARAM2 PAGE 1,链接命令文件:,28,FIR滤波器设计,循环缓冲区法 又称为滑动窗法。对于N阶FIR滤波器在数据区开辟一个N单元的循环缓冲区存放N个样本;每次滤波从更新最老样本开始,在循环寻址作用下于最老样本结束读入新样本。其特点是用最新样本覆盖最老样本/其余数据无需移动。,1次y(n)计算结束ARx指向最老样本被最新样本覆盖,更新数据,设N阶FIR滤波器的系数(单位脉冲冲击响应)为:h(0),h(1),.h(N-1),x(n)表示滤波器在n时刻的输入,则n时刻的输出y(n)为:,29,*采用循环缓冲区法编写的FIR数字滤波器程序*.mmregs.globalstart.defstart,_c_int00KS.set256;输入的样本数N.set17;FIR滤波器阶数COEF_FIR.sect“COEF_FIR”;FIR滤波器系数表.word 0,158,264,-290,-1406,-951,3187,9287,12272.word 9287,3187,-951,-1406,-290,264,158,0.dataINPUT.copy“firin.inc”;输入数据在数据区0 x2400-24FFOUTPUT.space 1024;输出数据在数据区0 x2500-25FFCOEFTAB.usect“FIR_COEF”,N;17个系数在数据区0 x2600DATABUF.usect“FIR_BFR”,N;17个样本在数据区0 x2611BOS.usect“STACK”,0Fh TOS.usect“STACK”,1.text.asg AR4,DATA_P;样本数据缓冲区指针.asg AR5,COEF_P;滤波系数缓冲区指针.asg AR6,INBUF_P;输入数据指针.asg AR7,OUTBUF_P;输出数据指针,汇编源程序:,30,_c_int00:Bstartstart:SSBXFRCT;小数乘法,FRCT=1 STM#COEFTAB,COEF_P;滤波系数指针-AR5 RPT#N-1;FIR系数从程序区搬移到数据区 MVPDCOEF_FIR,*COEF_P+STM#-1,AR0;地址步进-1 STM#DATABUF,DATA_P;样本数据指针-AR4 RPTZ A,#N-1;数据缓冲区清0 STLA,*DATA_P+STM#(DATABUF+N-1),DATA_P;数据缓冲区指针指向底部 STM#(COEFTAB+N-1),COEF_P;系数缓冲区指针指向底部 STM#INPUT,INBUF_P;输入数据指针-AR6 STM#OUTPUT,OUTBUF_P;输出数据指针-AR7 STM#KS-1,BRC;块重复操作次数(256)RPTBD LOOP-1 STM#N,BK;FIR循环缓冲区大小(17)LD*INBUF_P+,A;装载输入数据 STLA,*DATA_P+0%;用最新样本值替代最旧样本值 RPTZA,N-1;重复乘加操作(17)MAC*DATA_P+0%,*COEF_P+0%,A;滤波运算 STH A,*OUTBUF_P+;滤波输出 LOOP:B LOOP.end,31,fir.obj-o fir.out-m fir.mapMEMORY PAGE 0:ROM(RIX):origin=0080h,length=100h ROM1(RIX):origin=180h,length=20h PAGE 1:INTRAM1(RW):origin=2400h,length=200h INTRAM2(RW):origin=2600h,length=100h INTRAM3(RW):origin=2700h,length=100h B2B(RW):origin=0070h,length=10h SECTIONS.text:ROM PAGE 0 COEF_FIR:ROM1 PAGE 0.data:INTRAM1 PAGE 1 FIR_COEF:INTRAM2 PAGE 1 FIR_BFR:INTRAM2 PAGE 1 STACK:B2B PAGE 1,链接命令文件:,32,当样本数据为单位冲击脉冲时滤波输出:,33,当样本数据为1000Hz方波时滤波输出:,34,采用线性缓存区与间接寻址方法,设计一个6级FIR滤波器。1.设滤波器系数为:0.1,-0.3,0.2,0.2,-0.3,0.1;2.设输入样本数据已存放在.data段中:7fffH,0,0,0,0,0;3.参考例程写出汇编程序代码;4.按下列要求写出链接命令文件:程序存储器分为两个区域,首地址分别为:0 x100H,0 x200H,将滤波器系数/样本数据(.data段)和正文(.text段)分别映射到这两个区域中;数据存储器也分为两个区域,首地址分别为:0 x500H,0 x800H,将其他数据段分别映射其中;5.试在CCS开发环境下建立工程、编译、链接、调试、运行并查看程序执行结果。,实验3:FIR滤波器设计与实现-线性缓存区法,一、实验任务,二、实验要求,35,参考程序:,.title“fir.asm”.mmregs.def _c_int00.bss y,10 x.usect“x”,6h.usect“h”,6.dataTabx:.word 7fffH.word 0.word 0.word 0.word 0.word 0Tabh:.word 1*32768/10.word-3*32768/10.word 2*32768/10.word 2*32768/10.word-3*32768/10.word 1*32768/10.text_c_int00:STM#x,AR2 RPT#11 MVPD Tabx,*AR2+,STM#h+5,AR1STM#x+5,AR2 STM#y,AR3 STM#5,AR0SSBX FRCT FIR:LD*AR2-,T LD#0,AMPY*AR1-,ALTD*AR2-MAC*AR1-,ALTD*AR2-MAC*AR1-,ALTD*AR2-MAC*AR1-,ALTD*AR2-MAC*AR1-,ALTD*AR2 ST#0,*AR2+0MAC*AR1+0,ASTH A,*AR3+B FIR.end,36,MEMORY PAGE 0:RAM:origin=100h,length=100h RAM1:origin=200h,length=200h PAGE 1:DARAM1:origin=0500h,length=200h DARAM2:origin=0800h,length=100hSECTIONS.data:RAM PAGE 0.text:RAM 1 PAGE 0.bss:DARAM1 PAGE 1 x:DARAM2 PAGE 1 h:DARAM2 PAGE 1,链接命令文件:,37,38,39,.titleFIR.global_c_int00.mmregsDACOUT.set01hADCIN.set 02hDAC1Addr.set 0f005hADC1Addr.set 0f008h.sect.vectorsrst:B_c_int00NOPNOP.data.space200h*8fir_table.sect“coff_fir”;201阶低通滤波器的冲激相应系数(Hamming窗);通带:1/8T,衰减40dB,实验4:FIR滤波器设计与实现-循环缓存区法,40,.word-1,-3,-6,-8,-9,-10,-10,-9,-7,-4,0,3,7,11,14,15,16,14.word11,6,-1,-8,-15,-22,-27,-30,-31,-28,-22,-12,0,13,26,38,47.word 53,53,47,36,20,-1,-23,-45,-66,-81,-89,-89,-80,-61,-34,0.word36,72,104,128,141,141,125,95,52,-1,-58,-115,-165,-203.word-224,-223,-198,-151,-84,0,91,182,263,326,361,361,324,249.word138,-1,-157,-317,-465,-585,-661,-678,-625,-495,-286,0,351,755.word 1192,1639,2074,2470,2807,3062,3222,3276,3222,3062,2807.word2470,2074,1639,1192,755,351,0,-286,-495,-625,-678,-661,-585.word-465,-317,-157,-1,138,249,324,361,361,326,263,182,91,0.word-84,-151,-198,-223,-224,-203,-165,-115,-58,-1,52,95,125,141.word141,128,104,72,36,0,-34,-61,-80,-89,-89,-81,-66,-45,-23,-1.word20,36,47,53,53,47,38,26,13,0,-12,-22,-28,-31,-30,-27.word-22,-15,-8,-1,6,11,14,16,15,14,11,7,3,0,-4,-7,-9,-10.word-10,-9,-8,-6,-3,-1.space 55*16data_buff.usectbuff“,201,41,.text _c_int00LD#020h,DP;置数据页指针STM#3000h,SPSSBXINTMRSBXSXMstm#0001h,2Bh;设置软件等待时间stm#00a8h,PMST;改变中断向量映射到0 x0080NOPNOPstm#201,BK;循环寻址缓冲区大小stm#fir_table,AR3;FIR系数区地址指针stm#data_buff,AR4;数据缓冲区地址指针stm#1,AR0,42,loop:portrADC1Addr,ADCIN;从第一ADC通道读数ldADCIN,AstlA,*AR4+%;存入缓冲区 rptzA,#200mac*AR4+0%,*AR3+0%,A;双寻址乘加运算nopnopnopsftaA,#-15and#0ffh,AstlA,DACOUTportwDACOUT,DAC1Addr;结果从第一DAC通道输出bloop.end,43,MEMORYPAGE 0:VECS:origin=0 x0080,length=0 x80PROG:origin=0 x2000,length=0 x1000PAGE 1:DATA:origin=0 x1000,length=0 x1000STACK:origin=0 x3000,length=0 x1000SECTIONS.vectors:VECS PAGE 0.text:PROG PAGE 0.data:DATA PAGE 1.stack:STACK PAGE 1.bss:DATA PAGE 1coff_fir:DATA PAGE 1buff:DATA PAGE 1,44,用泰勒级数展开式计算一个角度的正弦值sinx=x-x3/3!+x5/5!-x7/7!+x9/9!=x(1-x2/2x3(1-x2/4x5(1-x2/6x7(1-x2/8x9),程序中设x值为45(/4)放在sin_vars段的d_x单元;,程序执行程序结果为5A81H,放在sin_vars段的d_sinx单元;,实验5:正弦波信号发生器设计,45,.titlesinx.asm.mmregs.def_c_int00.refsin_start,d_x,d_sinxSTACK.usectSTACK,10_c_int00:STM#STACK+10,SPLD#d_x,DPST#6487H,d_x;x=6487H=45度CALLsin_startend:Bendsin_start:.defsin_startd_coeff.usectcoeff,4.datatable:.word01c7H;c1=1/(8*9)*32768=01c7H.word030bH;c2=1/(6*7)*32768=030bH.word0666H;c3=1/(4*5)*32768=0666H.word1556H;c4=1/(2*3)*32768=1556Hd_x.usectsin_vars,1d_squr_x.usectsin_vars,1d_temp.usectsin_vars,1d_sinx.usectsin_vars,1c_1.usectsin_vars,1,46,.textSSBXFRCTSTM#d_coeff,AR5RPT#3MVPD#table,*AR5+STM#d_coeff,AR3STM#d_x,AR2STM#c_1,AR4ST#7FFFH,c_1;c_l=#7fffH=1SQUR*AR2+,A;A=x2STA,*AR2;(AR2)=x2 d_squr_x|LD*AR4,B;B=1MASR*AR2+,*AR3+,B,A;A=1-x2/72,T=x2MPYA A;A=T*A=x2(1-x2/72)STHA,*AR2;(d_temp)=x2(1-x2/72)MASR*AR2-,*AR3+,B,A;A=1-x2/42(1-x2/72),T=x2(1-x2/72)MPYA*AR2+;B=x2(1-x2/42(1-x2/72)STB,*AR2;(d_temp)=x2(1-x2/42(1-x2/72)|LD*AR4,B;B=1MASR*AR2-,*AR3+,B,A;A=1-x2/20(1-x2/42(1-x2/72)MPYA*AR2+;B=x2(1-x2/20(1-x2/42(1-x2/72)STB,*AR2;(d_temp)=B|LD*AR4,B;B=1MASR*AR2-,*AR3+,B,A;A=1-x2/6(1-x2/20(1-x2/42(1-x2/72)MPYA d_x;B=x(1-x2/6(1-x2/20(1-x2/42(1-x2/72)STHB,d_sinx;sin(theta)RET.end,sinx=x-x2/3!+x5/5!-x7/7!+x9/9!=x(1-x2/2x3(1-x2/4x5(1-x2/6x7(1-x2/8x9),47,MEMORY PAGE 0:EPROM:org=0E00Hlen=01000HVECS:org=0FF80Hlen=0080HPAGE 1:SPRAM:org=0500Hlen=0020HDARAM:org=0080Hlen=0010H SECTIONS.vectors:VECS PAGE 0.text:EPROM PAGE 0.data:EPROM PAGE 0 STACK:SPRAM PAGE 1 sin_vars:DARAM PAGE 1 coeff:DARAM PAGE 1,48,用泰勒级数展开式计算一个角度的余弦值cosx=1-x2/2!+x4/4!-x6/6!+x8/8!=1-x2/2(1-x2/3x4(1-x2/5x6(1-x2/7x8),执行程序结果:,49,.mmregs.def_c_int00.refcos_start,d_x,d_cosxSTACK.usectSTACK,10_c_int00:STM#STACK+10,SPLD#d_x,DPST#6487H,d_x;x=6487H=45度CALLcos_startend:Bendcos_start:.defcos_startd_coeff.usectcoeff,4.datatable:.word0249H;c1=1/(7*8)*32768=0249H.word0444H;c2=1/(5*6)*32768=0444H.word0aabH;c3=1/(3*4)*32768=0aabH.word4000H;c4=1/(1*2)*32768=4000Hd_x.usectcos_vars,1d_squr_x.usectcos_vars,1d_temp.usectcos_vars,1d_cosx.usectcos_vars,1c_1.usectcos_vars,1,50,.textSSBXFRCTSTM#d_coeff,AR5RPT#3MVPD#table,*AR5+STM#d_coeff,AR3STM#d_x,AR2STM#c_1,AR4ST#7FFFH,c_1SQUR*AR2+,A;A=x2STA,*AR2;(AR2)=x2|LD*AR4,B;B=1MASR*AR2+,*AR3+,B,A;A=1-x2/56,T=x2MPYAA;A=T*A=x2(1-x2/56)STHA,*AR2;(d_temp)=x2(1-x2/56)MASR*AR2-,*AR3+,B,A;A=1-x2/30(1-x2/56),T=x2(1-x2/56)MPYA*AR2+;B=x2(1-x2/30(1-x2/56)STB,*AR2;(d_temp)=x2(1-x2/30(1-x2/56)|LD*AR4,B;B=1MASR*AR2-,*AR3+,B,A;A=1-x2/12(1-x2/30(1-x2/56)SFTAA,-1,A;1/2NEGA;-1/2MPYA*AR2+;B=-x2/2(1-x2/12(1-x2/30(1-x2/56)MAR*AR2+RETDADD*AR4,16,B;B=1-x2(1-x2/12(1-x2/30(1-x2/56)STHB,*AR2;cos(theta)RET.end,51,产生正弦波程序:,先以sin.asm和cos.asm程序计算045(间隔为0.5)的正弦和余弦值,再利用Sin(2x)=2sin(x)cos(x)求出090的正弦值(间隔为1)然后通过复制,获得0359的正弦值。重复向PA0口输出,便可得到正弦波。,52,.titlesinxwave.asm.mmregs.def _c_int00.refd_xs,d_sinx,d_xc,d_cosx,sinx,cosxsin_x:.usectsin_x,360STACK.usectSTACK,10Hk_theta.set286;theta=pi/360(0.5deg)PA0.set 0_c_int00:.textSTM#STACK+10H,SPSTMk_theta,AR0;AR0-k_theta(increment)STM0,AR1;AR1=x(rad.)STM#sin_x,AR6;AR6-sin_xSTM#90,BRC;from sin0(deg.)-sin90(deg.)RPTBloop1-1LDMAR1,ALD#d_xs,DPCALLsinx;d_sinx=sin(x)CALLcosx;d_cosx=cos(x),53,LD#d_sinx,DPLD d_sinx,16,A;A=sin(x)MPYA d_cosx;B=sin(x)*cos(x)STHB,1,*AR6+;AR6-2*sin(x)*cos(x)MAR*AR1+0loop1:STM#sin_x+89,AR7;sin91(deg.)-sin179(deg.)STM#88,BRCRPTBloop2-1LD*AR7-,ASTLA,*AR6+loop2:STM#179,BRC;sin180(deg.)-sin359(deg.)STM#sin_x,AR7RPTBloop3-1LD*AR7+,ANEGASTLA,*AR6+loop3:STM#sinx,AR6;generate sin waveSTM#1,AR0STM#360,BKloop4:PORTW*AR6+0%,PA0Bloop4,54,sinx:.defd_xs,d_sinxd_coeff_s.usectcoef_s,4.datatable_s:.word01c7H;c1=1/(8*9)*32768=01c7H.word030bH;c2=1/(6*7)*32768=030bH.word0666H;c3=1/(4*5)*32768=0666H.word1556H;c4=1/(2*3)*32768=1556Hd_xs.usectsin_vars,1d_squr_xs.usectsin_vars,1d_temp_s.usectsin_vars,1d_sinx.usectsin_vars,1d_l_s.usectsin_vars,1.textSSBXFRCTSTM#d_coeff_s,AR5RPT#3MVPD#table_s,*AR5+STM#d_coeff_s,AR3STM#d_xs,AR2STM#d_l_s,

    注意事项

    本文(DSP汇编程序设计举例.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开