dsp 技术 及应用

Click here to load reader

Upload: liseli

Post on 13-Jan-2016

56 views

Category:

Documents


10 download

DESCRIPTION

DSP 技术 及应用. D igital S ignal P rocessor 数字信号处理器. 第五章 汇编语言编程举例. 第一节 汇编语言编程的基本方法 第二节 DSP 的浮点运算方法 第三节 DSP 在信号发生器上的应用 第四节 用 DSP 实现 FIR 滤波器. 第一节 汇编语言编程的基本方法. TMS320C54x 汇编语言源程序语句包含汇编语言指令、汇编伪指令和注释。程序的编写必须符合一定的格式,以便汇编器将源文件转换成机器语言的目标文件。 - PowerPoint PPT Presentation

TRANSCRIPT

  • *DSPDigital Signal Processor

  • * DSP DSP DSPFIR

  • TMS320C54x .asm200200

    *

  • * 1

  • * STM #88HAR0 LD #1000HA zhong SUB AR0A BC zhongAGTAOV #88HAR0 #1000HACC AAR0 ;A A>0 zhong,

  • * PC

  • * STM #123HAR0 LD #456HAR1 CALL new LD AR116AnewMPY AR0AR1A RET #123HAR0 #456HAR1 new AR116A AR0AR1,A

  • [5-1]RC TC TC=1CC subBNEQ B!=0sub BC newAGTAOV A>0 new

  • *:BANZ[5-2]y=(x1+x2+x3+x4+x5).bssx5.bssy1STM#xAR1STM#4AR2LD#0Aloop:ADD*AR1+ABANZloop*AR2-STLAy

  • * CMPR CCARx CC00b~11b ARxAR0~AR7 If (cond) Then 1 TCElse 0 TC CCARxAR0 ,TC = 1,,TC = 0:CMPR

    CCEQLTGTNEQ0 00 11 01 1 ARxAR0 ARxAR0 ARxAR0 ARxAR0

  • *:CMPR[5-3] STM #5,AR1 ; AR1=5 STM #10,AR0 ; AR0=10loop: MAR *AR1+ ; AR1=AR1+1 CMPR LT,AR1 ;AR1-AR0
  • * 2 1.2.SP-13.SP+14.

  • *[]size.set100stack.usect STKsizeSTM#stack+sizeSPRAMRAMSTK1003(#stack+size)SPSTKRAM

  • *CALLpmad;(SP)-1 SP(PC)+2 TOS;pmad PCRET;(TOS) PC(SP)+1 SP

  • * LD # -9224B STM # lengthAR1 MVMM SPAR4loop STL B*AR4- BANZ loop*AR1- 0DBF8hB AR4SPAR4 DBF8DBF8DBF8DBF8DBF8DBF8AR4

    RAM

    DDDDDSPD

  • * 6B140013SP7AB3DBF8DBF8DBF8DBF8DBF8DBF8AR4

    RAM

    AR4DBF8DBF8DBF8DBF8DBF8SPDBF8

    RAM

    DDDDDSPD

  • *5-4 z=x+y-wSUM1LD @x,A xA ADD @y,A yAx SUB @w,A Aw z STL A,@z Az 5-5 y=mx+b SUM2LD @m,T m T MPY @x,A x Tm A ADD @b,A Amxb A STL A,@y Ay 3

  • *[5-6]y=x1*a1+x2*a2LD@x1TMPY@a1BLD@x2TMPC@a2BSTLB@ySTHB@y+1

  • *4-1 y=a1*x1+a2*x2+a3*x3+a4*x4* * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * example.asm y=a1*x1+a2*x2+a3*x3+a4*x4 ** * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * .title example.asm ; .mmregs ;STACK .usect STACK,10h ;16 .bss a,4 ;a4 .bss x,4 ;x4 .bss y,1 ;y 1 .def _c_int00 ;_c_int00 .data ;table: .word 1,2,3,4 ;table8 .word 8,6,4,2 ;8

  • * .text ;_c_int00 :STM #0,SWWSR ;0 STM #STACK+10h,SP ; STM #a,AR1 ;AR1 a RPT #7 ; MVPD table,*AR1+ ; 8 CALL SUM ; SUM end: B end ;SUM: STM #a,AR3 ;aAR3 STM #x,AR4 ;xAR3 RPTZ A,#3 ;A04 MAC *AR3+,*AR4+,A ;A STL A,@y ;Ay RET ; .end ;

  • *[5-8]y=x1*a1+x2*a2+x3*a3+x4*a4ai*xiSTM#aAR1STM#xAR2STM#2AR3LD*AR1+TMPY *AR2+ AloopLD*AR1+TMPY*AR2+ BMAXABANZloop *AR3-

  • *[5-9]x[5]={0,0,0,0,0};.bssx5STM#xAR1LD#0ARPT#4STLA*AR1+.bssx5STM#xAR1RPTZA#4STLA*AR1+4

  • *[5-10]x[5]1.bssx5Begin:LD#116BSTM#4BRCSTM#xAR4RPTB next-1ADD*AR416BASTHA*AR4+Next:LD#0B

  • *RPT 5

  • *1 MVDK Smem,dmad ;/ 2/2MVKD dmad,SmemSmem=dmad 2/2MVDD Xmem,Ymem Ymem=Xmem 1/1

    2 MVPD pmad,Smem Smem=pmad 2/3MVDP Smem,pmad pmad=Smem 2/4

    pmad16dmad16SmemXmemYmemXmemDBYmemCB

  • *3MMR MVDM dmad,MMR / 2/2MVMD MMR,dmad dmad=MMR 2/2MVMM mmrx,mmry mmry=mmrx 1/14Acc READA Smem Smem=prog(A) 1/5WRITA Smem prog(A)= Smem 1/5

    mmrx,mmryAR0AR7SP MMR

  • *5-11 x[5] {1,2,3,4,5}.data TBL: .word 1,2,3,4,5 TBL 5 .sect .vectors .bss x,5 x5 B START START .text START:STM #x,AR5 xAR5 RPT #4 5 MVPD TBL,*AR5+ TBL5x 1

  • *5-12 x[10]y[10] .title cjy1.asm .mmregs STACK .usect STACK,30H .bss x,10 x10 .bss y,10 y10 .datatable:.word 1,2,3,4,5,6,7,8,9,10 .def start start .text2

  • *start:STM #0,SWWSR SWWSR STM #STACK+30H,SP STM #x,AR1 AR1 RPT #9 10 MVPD table,*AR1+ STM #x,AR2 xAR2 STM #y,AR3 yAR3 RPT #9 10 MVDD *AR2+,*AR3+x10 y10end: B end .end

  • *AR2AR5 6

  • * LD #0,B LD #0,B STM #a,AR2 STM #a,AR2 STM #x,AR3 STM #x,AR3 STM #19,BRC STM #19,BRC RPTB done-1 RPTB done-1 LD *AR2+,T1T MPY *AR2+,*AR3+,A1T MPY *AR3+,A1T ADD A,B 1T ADD A,B 1Tdone:STH B,@y done:STH B,@y STL B,@y+1 STL B,@y+1=1T*N=NT5-13

  • *[14]y=a1*x1+a2*x2++a19*x19+a20*x20STM#xAR2STM#aAR3RPTZA#19MAC*AR2+*AR3+ASTHA@ySTLA@y+1

  • *CD32 7 161 16 DLD *AR3+,AA=00 0000 0000 A=00 6CAC BD90 AR3=0100 AR3=0102 0100h=6CAC 0100h=6CAC 0101h=BD90 0101h=BD90

  • *2 16 DLD *AR3+,AA=00 0000 0000 A=00 BD90 6CAC AR3=0101 AR3=0103 0100h=6CAC 0100h=6CAC 0101h=BD90 0101h=BD9016 .long 12345678 h 1234 5678 .bss xhi, 2, 1, 1 xhi xlo

  • *5-15 Z32=X32+Y32 LD @xhi,16,A DLD @xhi,A ADDS @xlo,A DADD @yhi,A ADD @yhi,16,A DST A,@zhi ADDS @ylo,A 33T STH A,@Zhi STL A,@Zlo66T

  • *(1)DEDE(2)(3)(4)(5)ASM 8

  • *5-1

  • *5-16 z=x+yf=d+e/ED .title cjy3.asm .mmregsSTACK .usect STACK,10H .bss x,3 3 .bss d,3 3 .def start .datatable: .word 0123H,1027H,0,1020H,0345H,0

  • *

    .text start:STM #0,SWWSR STM #STACK+10H,SP STM #x,AR1 RPT #5 MVPD table,*AR1+ STM #x,AR5 AR5 STM #d,AR2 AR2 LD #0,ASM ASM=0 LD *AR5+,16,A x16A ADD *AR5+,16,A y16Ax ST A,*AR5 A16z LD *AR2+,B d16B ADD *AR2+,16,B e16Bd STH B,*AR2 Bfend: B end .end

  • * 964 5-17 Z64=W64+X64-Y64WXYZ643264/ w3 w2 w1 w0 W64+ x3 x2 C x1 x0 X64 32C- y3 y2 C y1 y0 Y64 32C__________________________________ z3 z2 z1 z0 Z64

  • *DLD @w1,A A=w1w0DADD @x1,A A=w1w0+x1x0, CDLD @w3,B B=w3w2ADDC @x2,B B=w3w2+x2+CADD @x3,16,B B=w3w2+x3x2+CDSUB @y1,A A=w1w0+x1x0-y1y0, CDST A,@z1 z1z0=w1w0+x1x0-y1y0SUBB @y2,B B=w3w2+x3x2+C-y2-CSUB @y3,16,B B=w3w2+x3x2+C-y3y2-CDST B,@z3 z3z2=w3w2+x3x2+C-y3y2-C/16ADDCSUBB

  • * 32 x1 x0 S U y1 y0 S U__________________ _____________ x0 * y0 U * U y1 * x0 S * U x1 * y0 S * Uy1 * x1 S * S________________ _______________w3 w2 w1 w0 S U U U5-18 W64=X32*Y3232 SU32U*US*US*SS*S

  • * MACSU Xmem,Ymem,src src=UXmem* SYmem+src MPYU Smem,dst dst=U* USmem MAC Xmem,Ymem,src src=SXmem* SYmem+src

  • * STM #x0,AR2 xAR2 STM #y0,AR3 yAR3 LD *AR2,T T=x0 MPYU *AR3+,A A=ux0*uy0 STL A,@w0 w0=ux0*uy0 LD A,-16,A A=A>>16 MACSU *AR2+,*AR3-,A A+=y1*ux0 MACSU *AR3+,*AR2,A A+=x1*uy0 STL A,@w1 w1=A LD A,-16,A A=A>>16 MAC *AR2,*AR3,A A+=x1*y1 STL A,@w2 w2=A16 STH A,@W3 w3=A1632

  • * 10 11623222316321232163

  • *C54x2-11162Q15 MSB LSB -1. 1/2 1/4 1/8 2-153276821 7FFFh0.532768 4000h0 0000h-0.5 327681 C000h-1 8000h1

  • *0.707.word 32768*707/100032768*0.707Q QQQ1515Q151516Q15MSBMSBQ15+1+0.999997-1

  • *QDSPQ151 NQ15-1.000000N+0.9999972N215N'=N215=N3276832216N''=N'+216=N'+655364317NQ15

  • *-0.2345+0.2345Q15-0.2345-0.234532768=-7684.1-7684-7684+65536=57852578520E1FChE1FCh+0.23450.234532768=7684.176847684+65536=733207332011E04h171E04h

  • *48 0 1 0 00.5230.5=410=01002 1 1 0 1-0.37523-0.375=-310 0 1 0 0 =1101 0 0 0 0 0 1 0 01 1 0 0 -01001 1 1 0 1 0 0 -0.1875=-12/26-12=11101002

  • *7811110100-0.09375=-12/27 S x x x Q3 S y y y Q3S S z z z z z z Q6230

  • *ST1FRCT11zzzzzz0Q711101000-0.1875=-24/27-24=11101000FRCTSSBX FRCT MPY *AR2,*AR3,ASTH A,@ZC54xQ15*Q15=Q15

  • *5-19 a1=0.1,a2=0.2,a3=-0.3,a4=0.4,x1=0.8,x2=0.6,x3=-0.4,x4=-0.2 .title cjy4.asm .mmregsSTACK .usect STACK,10H .bss a,4 a4 .bss x,4 x4 .bss y,1 y1 .def start .data

  • *table: .word 1*32768/10 table8.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 start:SSBX FRCT FRCT STM #x,AR1 xAR1 RPT #7 8 MVPD table,*AR1+ 8 STM #x,AR2 x1AR2 STM #a,AR3 a1AR3 RPTZ A,#3 A4 MAC *AR2+,*AR3+,A A STH A,@y Ayend: B end .end y=0x1EB7y=1163+14162+11161+7160/32768=0.24

  • * DSP 1 (1) C54x DSP(2)DSP=2- x=m2e

  • * 2 TA=00TA8TA1ABEXP A EXP BC54x DSP16IEEE 754-19853216

  • *5-22 A=FF FFFF FFCBEXP A A=FF FFFF FFCB A=FF FFFF FFCB T= 0000 T= 0019 25 A0A8A=F F F F F F F F C B 1111 1111 1111 1111 1111 1111 1111 1111 1100 1011 331 33-8=25=0x0019

  • *2 ST TEXPONENTTEXPONENT EXP A ST T@e1 e13NORM A A

  • *:0.3=(0.010011)22-0=(0.10011)22-1-0.8=-0.82-0=-(0.110011) 22-0-0.24=-(0.001111)2-0=-(0.1111)22-23=(11)22-0=(0.11)222 -8=-(1000)22-0=-(0.1)224-24=-(11000)22-0=-(0.11)2251

  • *5-25 BA NORM B, A A=FF FFFF F001 A=00 4214 1414B=21 0A0A 0A0A B=21 0A0A 0A0AT= FFF9 T= FFF9-7B-77B=0010 0001 0000 1010 0000 1010 0000 1010 0000 10102 0000 000 0010 0001 0000 1010 0000 1010 0000 1010 0000 101070 70000 0000 0100 0010 0001 0100 0001 0100 0001 01002=00 4214 141416

  • * 3 NEG A NORM A

  • *AxNEG A STL A,@temp LD @temp,T TLD @x,16,A A16NORM A T,T A

  • *DSPDSP DSP

  • * 1. 0.7854 C54xQ152 =0.785432768=6487h d_xd_sinx DSP

  • *

  • * .title sinx.asm .mmregs .def start start .ref sin_start,d_x,d_sinx sin_start,d_x,d_sinxSTACK:.usect STACK,10 start: STM #STACK+10,SP LD #d_x,DP ST #6487h,d_x d_x CALL sin_start end: B end sin_start: .def sin_start sin_startd_coeff .usect coeff,4 4coeff

  • * .datatable: .word 01c7h 4,c1=1/8*9 .word 030bh c2=1/6*7 .word 0666h c3=1/4*5 .word 1556h c4=1/2*3d_x .usect sin_vars,1 sin_varsd_squr_x .usect sin_vars,1 5d_temp .usect sin_vars,1 RAMd_sinx .usect sin_vars,1 c_1 .usect sin_vars,1.text SSBX FRCT STM #d_coeff,AR54d_coeff AR5

  • *RPT #3 4MVPD #table,*AR5+4d_coeffSTM #d_coeff,AR3 d_coeffAR3STM #d_x,AR2 AR2STM #c_1,AR4 7fffc_1AR4ST #7FFFh,c_1 #7FFFh1c_1SQUR *AR2+,A A=x2 AR2d_squr_xST A,*AR2 d_squr_x=x2A16LD *AR4,B B=17FFFh16BMASR *AR2+,*AR3+,B,A A=1-x2/72,T=x2AR2d_tempAR3c2 21515-00 MPYA A A=T*A=x21-x2/72STH A,*AR2 d_temp=x21-x2/72MASR *AR2-,*AR3+,B,A A=1-x2/421-x2/72T=x21-x2/72

  • *MPYA *AR2+ B=x21-x2/421-x2/72ST B,*AR2 d_temp=x21-x2/421-x2/72LD *AR4,B B=1MASR *AR2-,*AR3+,B,A A=1-x2/201-x2/421-x2/72MPYA *AR2+ B=x21-x2/201-x2/421-x2/72ST B,*AR2 d_temp=B=x21-x2/201-x2/421-x2/72LD *AR4,B B=1MASR *AR2-,*AR3+,B,AA=1-x2/61-x2/201-x2/421-x2/72MPYA d_x B=x1-x2/61-x2/201-x2/421-x2/72STH B,d_sinx sinthetaRET.end

  • * DSPFIR 1FIR 1. FIRhn2. FIR

  • * 2. FIRz-1 NFIRNNz-1 (1)z-1

  • *C54xI/OCPU64KI/OPORTR PA,Smem PA SmemPORTW Smem,PA Smem PA22I/O/

  • *N=6

  • *DELAYz-1DELAY Smem SmemSeme+1 DELAY *AR2 AR2AR2 LT+DELAYLTD TMAC+DELAYMACD

  • *NNBKZ-1DARAM 2z-1

  • *N=6

  • * 3FIR 5-25 N=5yn=a0*xn+a1*xn-1+a2*xn-2+a3*xn-3+a4*xn-4a0a4(1)FIR

  • * .title FIR1.ASM .mmregs .def start start .bss y,1 y1XN .usect XN,1 XNXNM1 .usect XN,1 5XNM2 .usect XN,1XNM3 .usect XN,1 XNM4 .usect XN,1A0 .usect A0,1 A0A1 .usect A0,1 5A2 .usect A0,1A3 .usect A0,1A4 .usect A0,1PA0 .set 0 PA0PA1 .set 1 PA1

  • * .datatable: .word 1*32768/10 .word -3*32768/10 .word 5*32768/10 .word -3*32768/10 .word 1*32768/10 .textstart: .SSBX FRCT STM #A0,AR1 AR1 RPT #4 5 MVPD table,*AR1+ LD #XN,DP PORTR PA1,@XN I/OxnFIR1: LD @XNM4,T xn-4T

  • *MPY @A4,A a4*xn-4ALTD @XNM3 xn-3T,xn-3xn-4MAC @A3,A A+a3*xn-3ALTD @XNM2 xn-2T,xn-2xn-3MAC @A2,A A+a2*xn-2ALTD @XNM1 xn-1T,xn-1xn-2MAC @A1,A A+a1*xn-1ALTD @XN xnT,xnxn-1MAC @A0,A A+a0*xnASTH A,@y ynPORTW @y,PA0 ynBD FIR1 PORTR PA1,@XN xn1.end

  • *vectors.objfir1.obj-o fir1.out-m fir1.map-e startMEMORY { PAGE 0 : EPROM: org=01OOOH len=01000H VECS: org=03F80H len=00080H PAGE 1 : SPRAM: org=00060H len=00020H DARAM: org=00080H len=01380H }SECTIONS { .vectors:> VECS PAGE 0 .text:> EPROM PAGE 0 .data:> EPROM PAGE 0 .bss:> SPRAM PAGE 1 .XN:> DARAM align(8){ } PAGE 1 .A0:> DARAM align(8){ } PAGE 1 }

  • *(2)FIR5-26 yn=a0*xn+ a1*xn-1+ a2*xn-2+ a3*xn-3+ a4*xn-4N=5 a0a4AR1AR2

  • * .title FIR2.ASM .mmregs .def start start .bss y,1 y1x .usect x,5 x5a .usect a,5 a5PA0 .set 0 PA0PA1 .set 1 PA1 .datatable: .word 2*32768/10 .word -3*32768/10 .word 4*32768/10 .word -3*32768/10 .word 2*32768/10

  • * .textstart: STM #a,AR2 AR2 RPT #4 5 MVPD table,*AR2+ STM #x+4,AR1 AR1xn-4 STM #a+4,AR2 AR2a4 STM #4,AR0 4AR0 SSBX FRCT LD #x,DP PORTR PA1,@x PA1xn

  • *FIR2: LD *AR1-,T xn-4T MPY *AR2-,A a4*xn-4A LTD *AR1- xn-3T,xn-3xn-4 MAC *AR2-,A A+a3*xn-3A LTD *AR1- xn-2T,xn-2xn-3 MAC *AR2-,A A+a2*xn-2A LTD *AR1- xn-1T,xn-1xn-2 MAC *AR2-,A A+a1*xn-1A LTD *AR1 xnT, xnxn-1 MAC *AR2+0,A A+a0*xnA ,AR2a4 STH A,@y yn PORTW @yn,PA0 ynPA0 BD FIR2 FIR2 PORTR PA1,*AR1+0xn,AR1x+4 .end

  • *(3) FIR5-27 yn=a0*xn+ a1*xn-1+ a2*xn-2+ a3*xn-3+ a4*xn-4N=5 a0a4MACD

  • * .title FIR3.ASM .mmregs .def start start .bss y,1 y1x .usect x,6 x6PA0 .set 0 PA0PA1 .set 1 PA1 .dataCOEF: .word 1*32768/10 ,a4 .word -4*32768/10 a3 .word 3*32768/10 a2 .word -4*32768/10 a1 .word 1*32768/10 a0

  • * .textstart SSBX FRCT STM #x+5,AR1 AR1xn-4 STM #4,AR0 AR1 LD #x+1,DP PORTR PA1,@x+1 xnFIR3 RPTZ A,#4 A0,5 MACD *AR1-,COEF,A xn-4T,A= xn-4*a4 +A PAR+1PAR,xn-4xn-5 STH A,*AR1 yn PORTW *AR1+,PA0ynPA0AR1xn BD FIR3 PORTR PA1,*AR1+0xn,AR1xn-4

  • *(4) FIR5-28 yn=a0*xn+ a1*xn-1+ a2*xn-2+ a3*xn-3+ a4*xn-4N=5 a0a4DARAM

  • *.title FIR4.ASM .mmregs .def start start .bss y,1 yxn .usect xn,5 5xna0 .usect a0,5 5a0PA0 .set 0 I/OPA0=0PA1 .set 1 I/OPA1=1 .datatable: .word 1*32768/10 a0=0.1=0x0CCC .word 2*32768/10 a1=0.2=0x1999 .word 3*32768/10 a2=0.3=0x2666 .word 4*32768/10 a3=0.4=0x3333 .word 5*32768/10 a4=0.5=0x4000 .text

  • *start: SSBX FRCT STM #a0,AR1 AR1a0 RPT #4 table MVPD table,*AR1+ 5a0 STM #xn+4,AR3 AR3xn-4 STM #a0+4,AR4 AR4a4 STM #5,BK BK=5 STM #-1,AR0 AR0=-1, LD #xn,DP PORTR PA1,@xn xnFIR4: RPTZ A,#4 A0,5 MAC *AR3+0%,*AR4+0%,A STH A,@y yn PORTW @y,PA0 ynPA0 BD FIR4 PORTR PA1,*AR3+0% PA1xn .end

  • * 4.FIRFIRFIRFIRhnhn=hN-1-nhn=-hN-1-n FIRhn=hN-1-n

  • *N=8FIRyn=h0xn+h1xn-1+h2xn-2+h3xn-3+h3xn-4+h2xn-5+h1xn-6+h0xn-787 yn=h0[xn+xn-7]+h1[xn-1+xn-6]+h2[xn-2+xn-5]+h3[xn-3+xn-4]47FIR

  • *FIR(1) NewN/2=4OldN/2=4N/2

  • *(2) AR2NewAR3Old(3) (4)AR2+AR3AHAAR2-1AR2AR3-1AR3(5) B04i=0123AH*hi+BBPAR1AR2+AR3AHAR2AR3

  • *(6) BH(7) AR2AR3NewOld(8) NewOldOld1(9) New(4)(9)

  • *FIRSFIRS Xmem,Ymem,Pmad PmadPARRC0B+A3216PARPmemBXmem+Ymem
  • *5-29 FIRN=8 .title FIR5.ASM .mmregs .def start start .bss y,1 yx_new .usect DATA1,4 4DTAT1x_old .usect DATA2,4 4DATA2Size .set 4 size=4PA0 .set 0 I/OPA0=0PA1 .set 1 I/OPA1=1 .dataCOEF .word 1*32768/10,2*32768/10, .word 3*32768/10,4*32768/10 N/2=4

  • * .textstart: LD #y,DP SSBX FRCT STM #x_new,AR2 AR21 STM #x_old+size-1,AR3 AR3 1 STM #size,BK BK =size STM #-1,AR0 AR0=-1 PORTR PA1,#x_new I/OPA1 xn

  • *FIR5: ADD *AR2+0%,*AR3+0%,A AH=xn+ xn-7 RPTZ B,#size-1 B=0,size FIRS *AR2+0%,*AR3+0%,COEF B+=AH*h0, AH=xn-1+xn-6 STH B,@y y PORTW @y,PA0 PA0 MAR *+AR22% AR2, MAR *AR3+% AR3, MVDD *AR2,*AR3+0% BD FIR5 FIR5 PORTR PA1,*AR2 .end

  • * DSPIIR 1IIR

  • * yn xnM Nynai=0IIRFIRIIRZ

  • * IIRFIRIIRFIRIIRFIR

  • * 2 IIR 3IIRIIR

  • * x0=wn=xn+A1*x1+A2*x2 yn=B0*x0+B1*x1+B2*x2IIR

  • *1IIRx0xnx0yn5-30 IIR

  • *.title IIR1.ASM .mmregs .def start startX0 .usect x,1 3xX1 .usect x,1 X2 .usect x,1 B2 .usect COEF,1 5COEFB1 .usect COEF,1 B0 .usect COEF,1 A2 .usect COEF,1 A1 .usect COEF,1 PA0 .set 0 I/OPA0=0PA1 .set 1 I/OPA1=1.datatable: .word 0, 0 x(n-1), x(n-2).word 1*32768/10,2*32768/10,3*32768/10 B2,B1,B0.word 5*32768/10,-4*32768/10 A2,A1

  • * .textstart: LD #x0,DP x0 SSBX FRCT STM #x1,AR1 x1AR1 RPT #1 2 MVPD #table,*AR1+ 2 0x1, x2 STM #B2,AR1 B2AR1 RPT #4 5 MVPD #table+2,*AR1+ 5 B2,B1,B0,A2,A1

  • *IIR1: PORTR PA1,@x0 PA1xn LD @x0,16,A ,x0A16 LD @x1,T x1T MAC @A1,A x0+x1*A1A LD @x2,T x2T MAC @A2,A x0+x1*A1+x2*A2A STH A,@x0 x0+x1*A1+x2*A2x0 MPY @B2,A ,x2*B2A LTD @x1 x1T,x1x2 MAC @B1,A x2*B2+x1*B1A LTD @x0 x0T,x0x1 MAC @B0,A x2*B2+x1*B1+x0*B0A STH A,@x0 yn=x2*B2+x1*B1+x0*B0x0 BD IIR1 PORTW @x0,PA0 ynPA0 .end

  • *2IIR DARAM

  • *SSBX FRCTSTM #x2AR3STM #COEF+4AR4 ;AR4AR1MVMM AR4AR1 ;AR1STM #3,BK ;STM #-1AR0 ;

  • *PORTR PA1*AR3 ;PA1x(n)LD *AR3+0%,16A ;A=x(n)MAC *AR3+0%,*AR4-,A ;A=x(n)+A1*x1MAC *AR3+0%,*AR4-,A ;A=x(n)+A1*x1+A2*x2=x0STH A,*AR3 ;x0MPY *AR3+0%*AR4-A A=BO*x0MAC *AR3+0%*AR4-A A=B0*x0+B1*x1MAC *AR3*AR4A A=B0*x0+B1*x1+B2+x2=y(n)STH A*AR3 y(n)MVMM AR1AR4 AR4A1BD IIR PORTW *AR3PA0 PA0IIR:

  • *3IIRIIR IIRyn=B0*xn+B1*xn-1+B2*xn-2+A1*yn-1+A2*yn-2H(z)= IIR

  • *DARAM44

  • *5-32 IIR .title IIR3.asm .mmregs def start startX .usect X,3 3XY .usect Y,3 3YB .usect B,3 3BA .usect A,3 3APA0 .set 0 I/OPA0=0PA1 .set 1 I/OPA1=1 .datatable: .word 00 xn-2xn-1 .word 00 yn-2yn-1 .word 1*32768/102*32768/103*32768/10 B2B1B0 .word 5*32768/10-4*32768/10 A2A1

  • * .textstart: SSBX FRCT STM #x,AR1 xn-2xn-1 RPT #1 MVPD #table,*AR1+ xn-2=0xn-1=0 STM #Y,AR1 yn-2yn-1 RPT #1 MVPD #table+2,*AR1+ yn-2=0yn-1=0 STM #B,AR1 B2B1B0 RPT #2 MVPD #table+4,*AR1+B STM #A,AR1 A2A1 RPT #1 MVPD #table+7,*AR1+A

  • *STM #X+2,AR2 AR2xnSTM #A+1,AR3 AR3A1 STM #Y+1,AR4 AR4yn-1STM #B+2,AR5 AR5B0STM #3,BK BK=3STM #-1,AR0 AR0=-1

  • *IIR3PORTR PA1,*AR2 PA1xn MPY *AR2+0%,*AR5+0%,A A=xn*B0 MAC *AR2+0%,*AR5+0%,A A=xn*B0+xn-1*B1 MAC *AR2,*AR5+0%,AA=xn*B0+xn-1*B1+xn-2*B2 MAC *AR4+0%,*AR3+0%,A ,A=A+yn-1*A1 MAC *AR4+0%,*AR3+0%,A A=A+yn-2*A2 MAR *AR3+0% AR3A1 STH A,*AR4 yn BD IIR3 PORTW *AR4,PA0 ynI/OPA0 .end

  • * 3IIR IIR

  • *IIRB0=1.2xn*B0=xn*B0/2+xn*B0/2=0.6*xn+0.6*xn5-31A11

  • *2 APORTR 0001h,@XinLD @Xin,16,APORTR 0001h,@XinLD @Xin,16-3,A8

  • *

    ******