第 7 章 汇编语言程序设计

Click here to load reader

Upload: eitan

Post on 13-Jan-2016

133 views

Category:

Documents


0 download

DESCRIPTION

第 7 章 汇编语言程序设计. 7.1 程序流程控制 7.2 数据块传送 7.3 定点数的基本算术运算 7.4 长字运算和并行运算 7.5 FIR 滤波器的 DSP 实现 7.6 IIR 数字滤波器的 DSP 实现 7.7 FFT 运算的 DSP 实现. 7.1 程序流程控制. 7.1.1 程序存储器地址生成 7.1.2 条件操作 7.1.3 分支转移 7.1.4 调用与返回 7.1.5 重复操作 7.1.6 TMS320C54x 中断系统 7.1.7 堆栈的使用. 返回首页. 7.1.1 程序存储器地址生成. - PowerPoint PPT Presentation

TRANSCRIPT

  • 7 7.1 7.2 7.3 7.4 7.5 FIRDSP7.6 IIRDSP7.7 FFTDSP

  • 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.1.6 TMS320C54x7.1.7

  • 7.1.1 PAGEN 57-1 PC RC BRC RSA REA

  • 7-1 PAGEN

  • 7.1.2 7-1

  • 7-2

    12ABABC EQ NEQ LEQ GEQ LT GTOVNOVTCNTCCNCBIONBIO

  • 1 // AGTAOVAGTBOV 2/ TCCBIONTCCNC

  • 7-1 BC subBLEQ ; B0sub CC startAGEQAOV ; A0 start RC NTC ; TC = 0

  • BC new, AGT, AOV AGTAOV A0,sub AGTAOV BC sub, AGT BC sub, AOV

  • 7.1.3 PC

    B[D] PC BACC[D] 16PC BC[D] PC BANG[D] 0PC FB[D] PCXPC FBACC[D] 23PCXPC

  • 7-2 STM #88HAR0 LD #1000HA zhong SUB AR0A BC zhongAGTAOV #88HAR0 #1000HACC AAR0 A A>0 zhong,

  • 7-3 STM #5,AR1 ; AR1=5 STM #10,AR0 ; AR0=10 loop: *AR1+ ; AR1=AR1+1 CMPR LT,AR1 ;AR1-AR0
  • 7.1.4

  • CALL[D] PC CALA[D] ABPC CC[D] PC FCALL [D] XPCPCPCXPC FCALA [D] XPCPC23 PCXPC

  • PC C54x

  • RET[D] PC RETE[D] PC RETF[D] RTNPC RC[D] PC FCALL [D] XPC PC FCALA [D] XPC PC

  • ISR

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

  • C54xCPU RPT RPTZ 0 RPTB RPTRPTZRPTBBANZ7.1.5

  • RPTRPTZ1 N+1N16RCRPTRPTZRC65536 1

  • 7-5x[8]={0,0,0,0,0,0,0,0} .bss x, 8 STM #x, AR1 LD #0, A RPT #7 STL A,*AR1+ .bss x, 8 STM #x, AR1 RPTZ A, #7 STL A, *AR1+ x[8]8071STL AAR1+7 RPTZ

  • 2 RPTBRPTBDRPTBBRC RPTBSTMBRC

  • RSARPTB REARPTB

  • 0ST1(BRAF)ST1 BRAF1 0~65535NBRC RSA REA

  • 7-6x[8]1 .bss x, 8begin: LD #1,16,B STM #7,BRC STM #x,AR4 RPTB next-1 ADD *AR4,16,B,A STH A,*AR4+next: LD #0,B ;;1BH;,BRC=78;xAR4;;16BH;;B0 REA-1 7 RPTB

  • 7-7 STM #L-1,AR7 1st: STM #M-1,BRC RPTB 2nd-1 RPT #N-1 2nd: BANZ 1st,*AR7-

  • 7.1.6 TMS320C54x1 C54xINTRTRAPRESET ,1 1 2

  • :(IMR)(ST1)INTMTMS320C54x16(SINT15SINT0)

    :IMRINTMTMS320C54x

  • 7-9 C5402

  • C54xIFRIMR 2 . (1) IFR IFR,,IFR1,CPU C5402IFR:

    15 141312111098 DMAC5DMAC4BXINT1BRINT1HPINTINT3

    76543210TINT1DMAC0BXINT0BRINT0TINT0INT2INT1INT0

  • C54xIFR5 ~ 015~6 IFR1 INTR #K

  • 2IMR

  • IMR IMR

    15 141312111098 DMAC5DMAC4BXINT1BRINT1HPINTINT3

    76543210TINT1DMAC0BXINT0BRINT0TINT0INT2INT1INT0

  • 1 IFR11 3

  • C5402 INT3 ~ INT0 RSNMI BRINT0BXINT0BRINT1BXINT1() TINT0TINT1() DMAC4DMAC5DMA HPINT(HPI)

  • 3 INTR(SINT0SINT30) TRAPINTRST1(INTM) RESET

  • CPU 3CPU 2 C54x INTM0 INTM=0 INTM=1 IMR1 IMR1,

  • CPU 3 PC PC PC

  • ISR PSHMMMR POPMMMR PSHD POPD.

  • ST1BRAFBRCBRC=0BRAF

  • 7-2

  • 4 128 C54xPMSTIPTR(9)2 =IPTR+(2) IPTR=0001HINT010H00C0H =0 00000001 100 0000 = 00C0H

  • 7-3

  • IPTR=1FFH511FF80H ,CPU0FF80H IPTR 0001HIPTR0080H

  • .mmregs .def _c_int00STACK .usect "STACK",100ht0_cout .usect "vars",1 ; t0_flag .usect vars,1 ;XFt0_flag=1 XF=1 ;t0_flag=0XF=0TVAL .set1639;1640(10(61=1ms, ;t0_cout=10001ms(1000=1sTIM0.set0024H;0PRD0.set0025HTCR0.set0026H.data TIMES.int TVAL ;.text (timers.asm)

  • *******************************; _c_int00b startnopnopNMIrete ;nopnopnopSINT17.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*16INT0rsbx intm ;0retenopnopINT1rsbx intm ;1retenopnopINT2rsbx intm ;2retenopnopTINT:bd timer ;nopnopnopRINT0:rete;0nopnopnop

  • XINT0:rete;0nopnopnop SINT6.space 4*16;SINT7.space 4*16;INT3:rete;3nopnopnop HPINT:rete ;nopnopnop RINT1:rete ;1nopnopnopXINT1:rete ;1nopnopnop******************************************start: LD #0,DP STM #STACK+100h,SP STM #07FFFh,SWWSR STM #1020h,PMST; 1000(1s) ST #1000,*(t0_cout) SSBX INTM; LD #TIMES,A READA TIM0 ; TIM,PRD READA PRD0 STM #669h,TCR0;TCR0 ; IMR, timer0 STM #8,IMR RSBX INTM ;WAIT:B WAIT*******************************************

  • ;0timer:ADDM #-1,*(t0_cout);1 . RETE .end timers.cmd) timers.obj /* */ -o timers.out /**/ -m timers.map /*map*/ MEMORY /*MEMORY */ { PAGE 0 RAM1origin=1000h, length=500h PAGE 1 SPRAM1origin=0600h, length=20h PAGE 1 SPRAM2origin=0100h, length=200h } SECTIONS /*SECTIONS*/ { .text : >RAM1 .data : >RAM1 .vars : >SPRAM1 .STACK :>SPRAM2 }

  • 7.1.7 DSP SPSP1SP1

  • C54x 1 2 3.cmd 1.

  • size .set 120 stack .usect STACKsize STM # stack + sizeSP RAM RAMSTACK120 # stack + sizeSP SP CALL pmad (SP)-1SP,(PC)+2TOSpmadPC RET (TOS)PC,(SP)+1SP

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

    RAM

    DDDDDSPD

  • 2. 6B140013SP 7AB3

    RAM

    AR4DBF8DBF8DBF8DBF8DBF8SPDBF8

  • C54x10 (1) MVDK Smemdmad MVKD dmadSmem MVDD XmemYmem2 22 21 17.2

  • (2) MMR MVDM dmadMMR MVMD MMRdmad MVMM MMRxMMRy 2 22 21 1(3) MVPD pmadSmem MVDP Smempmad READA Smem WRITA Smem 2 32 41 51 5

  • (4) PA/ PORTR PASmem PORTW SmemPA 2 22 2 RPT

  • 1 .mmregs .def _c_int00 .dataTBL: .word0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1 7,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;a[20]={0,1,2,3,4,5,6,7,8,9,10, ;11,12,13,14,15,16,17,18,19} RPT #39 ;x[20]={1,1,1,1,1,1,1,1,1,1 MVPD TBL,*AR1+ ;1,1,1,1,1,1,1,1,1,1} STM #x,AR2;x[20]y[20] STM #y,AR3 RPT #19 MVDD *AR2+,*AR3+

  • STM #a,AR1;a[20]PROM LD #PROM,A STM #19,AR3LOOPP: WRITA *AR1+ ADD #1,A,A BANZ LOOPP,*AR3- LD #PROM-1,A ;PROM20DATA STM#DATA,AR1 ST #19,BRC RPTB LOOP2 ADD #1,A,ALOOP2: READA *AR1+ WAIT: NOP B WAIT

  • 2CCS C5000CCSFileNewSource FileFileSave7-5D:\Program Files\ti \myprojcets\mymovemymoveAssembly Source Files*.asm

  • 3FileNewSource File mymove.obj -o mymove.out -m mymove.map 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}FileSave7-5D:\Program Files\ti\myprojcets\mymovemymoveTI Command Language File*.cmd

  • 4ProjectNewProject Creation7-6ProjectmymoveCCSmymove.pjt

  • 7-5 7-6

  • 5ProjectAdd Files to Projectmymove.asmmymove.asmProjectAdd Files to Projectmymove.cmd7-7mymove.asmmymove.asm

  • 6.outProjectRebuild Allmymove.out

  • 7.outFileLoad Programmymove.outRebuild AllDSPCCSDebugRunDebugStepIntoF8

  • 8ViewMemory7-8Address0x0100OK.out

  • 7.3 7.3.1 7.3.2

  • 1.DSP1 16 16 QQ0Q1Q15Q 7.3.1

  • 7-10 QS

  • 2 C54x2161()Q15-Q 2(Q15) MSB LSB -1. 2-1 2-2 2-3 2-15 00000010.1010000021+2-1+2-3 = 2.625

  • Q152 32 76816 32 76816 32 76817-9 DSP

  • 1 7FFFH 0.5 4000H 0.25 2000H 0 0000H -0.25 E000H -0.5 C000H -1 8000H132 768=7FFFH0.532 768=4000H0.2532 768=2000H032 768=0000H(0.2532 768)=E000H(0.532 768)=C000H(132 768)=8000H 0.907 .word 32 768*907/1000

  • 21616 C54xADDADDCADDMADDSADDSADDCADDM C54xSUBSUBBSUBCSUBSSUBSSUBBSUBC QQ

  • 7-8 x=5.625y=-0.625x+y : x=5.625Q3.125A00H y=-0.625Q.15B000H yQ3.123F600HF600H5A00H5000Hx+yQ3.125

  • 316C54x32ABC54xTAB16C54xMPYU

  • FRCT RSBX FRCT LD x , T MPY y A STH A z_h STL A , z_l 16,16

  • 4Q151632RAMQ15

  • 0.5(-0.375) = -0.1875 0 1 0 0 0.5)1 1 0 1 -0.375)0 1 0 00 0 0 00 1 0 01 1 0 0 -0100) 1 1 1 0 1 0 0-0.1875)

  • -0.1875 = 1110100 7 811110100 = -0.09375 2 S x x x (Q3 S y y y (Q3 S S z z z z z z (Q6 11110100 1 11101000 -0.1875

  • FRCT SSBX FRCT MPY *AR2*AR3A STH A@Z 16Q15*Q15=Q15RNDMPYR1616

  • 5 Q0Q15 1. 125Q15Q011.125Q14

  • 1.1251.5 = 1.6875 01. 00100000000000 (1.125 ) Q1401. 10000000000000 (1.5 ) Q14 0001.1011000000000000000000000000 = 1.6875 Q28320001.1011000000000000000000000000001.1011000000000000000000000000016001.1011000000000 Q13 Q1422Q144Q131.6875216Q14 01.10110000000000 Q14

  • .title "suanshu.asm".mmregs .def start,_c_int00 .bss x1,1.bss x2,1 .bss y1,1.bss y2,1 .bss z1,1.bss z2,1.bss z3_h,1.bss z3_l,1.bss z4,1

    v1.set 014H ; 20-----x1 v2 .set 036H ; 54 -----y1 v3.set 04000H ; 0.5(fraction)----x2 v4.set 00b548H ; -0.5837(fraction)-----y2

    7-9C54Xz1=x1+y1z2x1-y1z3=x1y1z4=x2y2

  • _c_int00b start nopnop start: LD #x1 , DP ST #v1 , x1 ST #v2 , y1; * * * * * * * * * * test ADD * * * * * * * * * * * *LDx1 , A ; load x1 -> A ADDy1 , A ; A + y1 -> A STL A , z1 ; save A(low 16 bits) ->z1NOP; * * * * * * * * * * test SUB* * * * * * * * * * * *LDx1 , ASUB y1 , ASTLA,z2NOP

  • ; * * * * * * * * * * test MPY (integer)* * * * * * * * * * * * RSBX FRCT ; LD x1 , T ; x1 -> T MPY y1 ,A ; x1*y1 -> A (result is 32 bit) STH A , z3_h ; 16 z3_h STLA , z3_l ; 16z3_l NOP ST #v3 , x2 ST #v4 , y2

    ; * * * * * * * * * * test MPY ((fraction) * * * * * * * * * * * * * ; * * * * * * * 0.5*(-0.58374)=-0.29187(0x0daa4) * * * * * * * *

    SSBX FRCT ; LD x2 , 16 ,A ; load x2 into A (high 16 bits) MPYA y2 ; x2*y2 -> B, and y2 -> T STHB , z4 ; z4 nop end: B end

  • 7-10y= ;*** ***;***a1=0.1 a2=0.2 a3=-0.3 a4=0.4 ***;***x1=0.8 x2=0.6 x3=-0.4 x4=-0.2*** .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_int00b start nopnop 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,*AR4 done: B done .end

  • C54x(SUBC)(RPT) SUBC Smem, src (src)-(Smem)
  • 0 0 0 0 1 1 30011 0 0 0 0 1 0 1 0 10 0 0 0 0 3 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 1 1 0 1 0 0 0 0 1 1 0 0 0 1

  • 8410/3(1)3 00001010 - 00011000 111100102 00010100 - 00011000 111111003

  • 00101000 - 00011000 0001000041 00100001 - 00011000 0000100151000100110011=340001=14

  • 1. ||
  • 1. ||
  • 1. ||
  • 2. ||>||: 16384512 .bss num,1 .bss den,1 .bss quot,1 .datatable .word 16 384 .word 512 .textstart: STM #num,AR1 RPT #1 MVPD table,*AR1+ 16 384 512

    2

  • 2. ||>||: 16384512 LD @den,16,A MPYA @num ABS A STH A,@den LD @num,A ABS A RPT #15 SUBC @den,A XC 1,BLT NEG A STL A,@quot A31~16 (num)*A(32~16)B, A15~0 16

    B

  • 2. ||>||: 16384512SUBC

    () () 16 384 512 0xC020 32 66*32 768/100(0.66) -33*32 768/100(-0.33) 0xFFFE -2

  • .title"chuf.asm" .mmregs .def start,_c_int00 .bssnum,1 .bssden,1 .bssquot,1 .datatable .word 4*32768/10 ;0.4 .word -8*32768/10 ;-0.8 .text _c_int00 b start nop nop7-110.4(-0.8)

  • start: STM #num,AR1 RPT #1 MVPD table,*AR1+ ;2 STM #den,AR1 LD *AR1-,16,A ;A(31-16) MPYA *AR1+ ;(num)*(A(32-16))->B ;(B) ABS A ; STH A,*AR1- ; LD *AR1+,16,A ;->A(32-16) ABS A ; RPT #14 ;15, SUBC *AR1,A XC 1,BLT ;B
  • 7.4 7.4.1 7.4.2

  • DLD Lmem,dst DST src,Lmem DADD Lmem,src[,dst] DSUB Lmem,src[,dst] DRSUB Lmem,src[,dst] ;dst=Lmem ;Lmem=src ;dst=src+Lmem ;dst=src-Lmem ;dst=Lmem-src C54x32 7.4.1

  • 1. DLD *AR3+,A A AR3 A AR3 6CAC0101BD900102 16

    0000000000

    0100

    0100h6 C A C0101hB D 9 0

    0000000000

    0100

  • 2. DLD *AR3+,A A AR3 A BD906CAC AR3 01020103 16

    0000000000

    0101

    0100h6 C A C0101hB D 9 0

    0000000000

    0101

  • .title "ADD32".mmregs.def start,_c_int00 .bss xhi , 2,1,1.bss yhi , 2,1,1.bss zhi , 2,1, 1.datatable .long 13578468H .long 1020B30AH .text _c_int00b start nopnopstart: LD #xhi ,DPSTM#xhi,AR1RPT #3MVPDtable,*AR1+DLDxhi , ADADDyhi , ADSTA ,zhiEND: B END.end7-12Z32=X32+Y32

  • -o add32.out -m add32.map MEMORY {PAGE 0: RAM: origin=1000h,length=80h PAGE 1: DARAM1: origin=0100h,length=500h } SECTIONS { .text :>RAM PAGE 0 .data :>RAM PAGE 0 .bss :>DARAM1 PAGE 1 }

  • X64:Y64:x3 x2 x1 x0 y3 y2 y1 y0 +s1 s0 Cs3 s2 S64: S64=s3s2s1s0 s1s0=x1x0+y1y0 s3s2=x3x2+y3y2+CZ64:z3 z2 z1 z0 -w1 w0 Cw3 w2 W64: Z64=z3z2z1z0 w1w0=s1s0-z1z0 w3w2=s3s2-z3z2- C7-13W64=X64+Y64-Z64

  • .title "ADDSUB64".mmregs.def start,_c_int00 .bss x1 , 2 ,1,1.bss x3 , 2 ,1,1.bss y1 , 2 ,1,1.bss y3 , 1.bss y2 , 1.bss z1 , 2 ,1,1.bss z3 , 1.bss z2 , 1.bss w1 , 2 ,1,1.bss w3 , 2 ,1,1 table .long12345678H;x1x0.long02468ACEH;x3x2

  • .long22222222H;y1y0.word 1357H,2468H;y3,y2.long44444444H;z1z0.word 1020H,0B30AH;z3,z2 .text _c_int00b start nopnopstart: LD #x1 ,DPSTM#x1,AR1RPT #11MVPDtable,*AR1+DLD x1,A ; A = X1 X0DADD y1,A ; A= X1 X0 + Y1 Y0,C

    DLD x3,B ; B = X3 X2

  • ADDCy2,B; B = X3 X2 + 00 Y2 + C ADD y3,16,B ; B = X3 X2 + Y3 Y2 + C DSUBz1,A; A= X1 X0 + Y1 Y0-Z1Z0C' DST A,w1; W1W0= X1 X0 + Y1 Y0-Z1Z0 SUBBz2,B; B = X3 X2 + Y3 Y2 + C - 00 Z2-C' SUBz3,16,B; B = X3 X2 + Y3 Y2 + C -Z3 Z2-C' DST B,w3; W3 W2= X3 X2 + Y3 Y2 + C - Z3 Z2-C'END:B END.end

  • 7-1432W64=X32Y32x1 x0 y1 y0 x0y0 x1y0 y1x0 y1x1 w0 w1 w2 w3 UU SU SU SS w0=x0y0L w1=x0y0H+x1y0L+y1x0L w2=x1y0H+y1x0H+y1x1L w3=y1x1H UUSUSSMPYU Smem,dst;dst=U(T)U(Smem)MACSU Xmem,Ymem,src;src=U(Xmem)S(Ymem)+srcMAC Xmem,Ymem,src;src=S(Xmem)S(Ymem)+src

  • STM #x0,AR2 STM #y0,AR3 LD *AR2,T MPYU *AR3+,A STL A,@w0 LD A,-16,A MACSU *AR2+,*AR3-,A MACSU *AR3+,*AR2,A STL A,@w1 LD A,-16,A MAC *AR2,*AR3,A STL A,@w2 STH A,@w3;AR2x0;(w3)A;AR3y0;T=x0;A=u(x0)u(y0);(w0)A;A=x0y0H;A=y1x0+x0y0H;A=x1y0+y1x0+x0y0H;(w1)A;A=y1x0H+x1y0H;A=y1x1+y1x0H+x1y0H;(w2)AAR2AR3AR3AR2AR3AR3

    RAM

    x0x1y0y1w0w1w2w3

  • 7.4.2 DE D E /

  • LD||MAC[R] LD||MAS[R] LD Xmem,dst1 ||MAC[R] Ymem,[,dst2] dst1=Xmem
  • ST||LD ST src,Ymem ||LD Xmem,dst Ymem=src>>(16-ASM); dst=Xmem
  • ST||MPY ST||MAC[R] ST||MAS[R] ST src,Ymem ||MAC[R] Xmem,dst Ymem=src>>(16-ASM); dst=dst+T*Xmem

  • ST||ADD ST||SUB ST src,Ymem ||ADD Xmem,dst Ymem=src>>(16-ASM); dst=dst+Xmem /

  • ASM

  • 7-15z=x+yf=e+d bss x,3 bss d,3 STM #x,AR5 STM #d,AR2 LD #0,ASM LD *AR5+,16,A ADD *AR5+,16,A ST A,*AR5 ||LD *AR2+,B ADD *AR2+,16,B STH B, *AR2 bss x,3 bss d,3 STM #x,AR5 LD #0,ASM LD *AR5+,16,A ADD *AR5+,16,A ST A,*AR5 ||LD *AR2+,B ADD *AR2+,16,B STH B, *AR2 STM #d,AR2

    xyzdef

  • 7.5 FIRDSP7.5.1 7.5.2 7.5.3 FIRDSP

  • DSPMACFIRIIRDSPFIRh(0)h(1) ...h(N-1)X(n)nn 7-1

  • 7-10FIR7-10 FIR 7-2

    Z-1

    Z-1

    h(0)

    h(1)

    h(2)

    h(N-2)

    h(N-1)

    y(n)

    x(n)

    Z-1

  • 7.5.1 n=NFIRNNN=67-11

  • 7-11 N=6

  • 7.5.2 7-12FIRNFIRNN

  • 7-12 FIR

  • 7-12FIR1FIRFIR1500Hz1dB2000Hz40dB8000HzFIRMATLAB

  • 2SimulatorCCSSimulatorx(n)Fs8000Hz1000Hz2500Hz2500Hz1000Hz

  • 3FIRFIRfir.asm************FIR fir.asm*****************.mmregs.global start.def start,_c_int00INDEX .set 1KS.set 256 ;COEF_FIR.sect "COEF_FIR";FIRN .set 17 ;FIR

  • .word 0,158,264,-290,-1406,-951,3187,9287,12272.word9287,3187,-951,-1406,-290,264,158,0.dataINPUT.copy "firin.inc";0x2400OUTPUT.space1024;0x2500COEFTAB .usect"FIR_COEF",NDATABUF.usect"FIR_BFR",NBOS.usect"STACK",0FhTOS.usect"STACK",1 .text.asgAR0,INDEX_P

  • .asgAR4,DATA_P;x(n).asgAR5,COEF_P;FIR.asg AR6,INBUF_P;.asgAR7,OUTBUF_P ;FIR_c_int00b start nopnopstart: SSBxFRCT ;FRCT()MVPD#COEF_FIR,*COEF_P+STM#INDEX,INDEX_P

  • STM#DATABUF,DATA_P;RPTZA,#N-1STLA,*DATA_P+STM#(DATABUF+N-1),DATA_P;x[n-(N-1)]STM#COEFTAB,COEF_PSTM #COEFTAB,COEF_P;FIRRPT #N-1 FIR_TASK:STM#INPUT,INBUF_PSTM #OUTPUT,OUTBUF_P

  • STM#KS-1,BRCRPTBDLOOP-1STM#N,BK;FIRLD*INBUF_P+,A;FIR_FILTER: ;FIRSTLA,*DATA_P+%;RPTZA,N-1MAC*DATA_P+0%,*COEF_P+0%,ASTHA,*OUTBUF_P+LOOP:EENDB EEND.end

  • 4FIRfir.cmdfir.obj-m fir.map-ofir.outMEMORY{PAGE 0:ROM1(RIX):ORIGIN=0080H,LENGTH=100HPAGE 1:INTRAM1(RW) :ORIGIN=2400H,LENGTH=0200H INTRAM2(RW) :ORIGIN=2600H,LENGTH=0100H

  • INTRAM3(RW) :ORIGIN=2700H,LENGTH=0100HB2B(RW):ORIGIN=0070H,LENGTH=10H }SECTIONS{.text :{}>ROM1PAGE 0.data : {}>INTRAM1 PAGE 1FIR_COEF: {}>INTRAM2 PAGE 1FIR_BFR : {}>INTRAM3 PAGE 1.stack : {}>B2B PAGE 1 }

  • 5CCS1CCSfirfir.out 27-13~7-1537-167-17

  • 7-13 Graph

  • 7-14 7-15

  • 7-16 7-17

  • 7.5.3 FIRDSP1NewN/2=4N=8Old4N/2AR2New AR3Old 7-18

  • 2.(AR2)+(AR3)AHA(AR2)-1AR2(AR3)-1AR33B0N/2i=0123(AH)ai+(B)BPAR1(AR2)+(AR3)AHAR2 AR31BH

  • 4AR2AR3NewOld New Old 7-18Old 15New 25

  • 7.6 IIRDSPIIRH(z)

    IIR7-197-207-47-3

  • 7-19 IIR

  • 7-20

  • 7-15Fs =16kHz3.2kHz
  • N=3 wn =0.4000 0.6000 b0=0.0114747a0=1.000000 b1=0 a1=0 b2=-0.034424 a2=2.13779 b3=0 a3=0 b4=0.034424 a4=1.76935 b5=0 a5=0 b6=-0.0114747 a6=0.539758

  • 2CCSSimulatorx(n) #include #include void main() { int i; double f[256]; FILE *fp; if((fp=fopen("iirin.inc","wt"))==NULL) { printf("can't open file! \n"); return; }

  • fprintf(fp,"INPUT: .sect %cINPUT %c\n",'"','"');for(i=0;i
  • iirin.incINPUT:.sect"INPUT".word0.word25486.word-15136.word-314.word-11585.word19580.word6270.word-30006.word16383DSP.copyiirin.incIIR

  • 3IIRIIRdiir.asm********IIR********** .title "diir.asm" .mmregs .globalstart .def start,_c_int00 N .set16 .copy "iirin.inc";x(n) table;IIR .word 63 0 -188 0 188 0 -63 .word 0 11675 0 9663 0 2948 .data

  • BN .usect "BN",N+1AN .usect "AN",N+1INBUF .usect"INBUF",256;0x2400OUTPUT .usect "OUTPUT",256;0x2600 .text .asgAR0,INDEX_P .asgAR2,XN_P .asgAR3,ACOFF_P .asgAR4,YN_P .asgAR5,BCOFF_P _c_int00 b start nop nopstart:SSBXFRCT

  • SSBX OVMSSBX SXM STM#BN+N,AR1RPT#NMVPD#table,*AR1- biSTM#AN+N-1,AR1RPT#N-1MVPD#table+N+1,*AR1- aiSTM#OUTPUT,AR1RPTZA,#255STL A,*AR1+ STM#INBUF,AR1RPT#255MVPD#INPUT,*AR1+

  • STM#OUTPUT,YN_P STM#INBUF,XN_P STM#N-1,INDEX_P STM#255,BRC RPTB LOOP-1IIR: SUB A,A STM#BN,BCOFF_P STM#AN,ACOFF_P RPT#N-1 MAC*XN_P+,*BCOFF_P+,A MAC*XN_P,*BCOFF_P,A

  • MAR *XN_P-0 AR2x(n-N) RPT #N-1 MAC*YN_P+,*ACOFF_P+,A STHA,*YN_P-0y(n)LOOP:EEND B EEND .end

  • 4IIRdiir.cmddiir.obj-o diir.out-m diir.mapMEMORY{ PAGE 0: ROM: ORIGIN=0080H, LENGTH=1000H PAGE 1: SPRAM: ORIGIN=0060H,LENGTH=0020H DARAM: ORIGIN=0080H, LENGTH=1380H RAM1: ORIGIN=2400H, LENGTH=0200H RAM2: ORIGIN=2600H, LENGTH=0200H}SECTIONS

  • {.text:>ROM PAGE 0.data:>DARAM PAGE 1BN:>DARAM PAGE 1AN:>DARAM PAGE 1 INBUF:>RAM1 PAGE 1OUTPUT:>RAM2 PAGE 1}

  • 7.7 FFTDSP7.7.1 FFT7.7.2 FFT7.7.3 FFT7.7.4

  • 7.7.1 FFT7-21NFFTDATANFFT7-22

  • FFTFFTRPRMIPIM2NFFT2N=256256DFT7-24

  • 7.7.2 FFTCmdata.incDSP.copymdata.inc7-127-15INPUTINPUTmdata.dat 1651 1 0 1 0 0x1f400x1f40

  • 7.7.3 FFT7-16256FFTDSP256FFT ************************************* *Radix-2,DIT,Real-input FFT Program * * fft.asm * ************************************* .mmregs .global reset,start,sav_sin,sav_idx,sav_grp .def start,_c_int00 .data

  • DATA .space 1024.copy "mdata1.inc"; mdata1.incINPUT N.set128; LOGN.set7 ;sav_grp.usect "tempv",3 ;sav_sin.setsav_grp+1;sav_idx.setsav_grp+2OUTPUT.usect "OUTPUT",256 ;BOS.usect"stack",0Fh;TOS.usect"stack",1 .copy "twiddle1.inc" ;twiddle1.incTWI1

  • .copy "twiddle2.inc" ;twiddle2.incTWI2.text_c_int00b start nopnopstart:STM#TOS,SPLD#0,DPSSBXFRCT *****************************************************************

  • 7.7.4 0x2000256CCSViewGraphTime/Frequency0x9000256Display TypeFFT MagnitudeSingle Time7-250x2000pagedataSampling Rate256Display TypeSingle Time7-25

  • 7-25