⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s11_fir.sa

📁 dsp6713开发板的许多例程.对入门特别有用
💻 SA
字号:
***********************************************************************
*         Copyright (C) 1996-2001 Texas Instruments Incorporated
*                      All Rights Reserved
*         FIR11 ASSEMBLY OPTIMIZER SOURCE - Example 6-68
*         From Programmer's Guide
***********************************************************************
********* ASSEMBLY OPTIMIZER CODE: *******************

        .def _fir_sa

_fir_sa: .cproc   x, h, y

        .reg    x_1, h_1, sum0, sum1, ctr, octr, x_b, h_a
        .reg	p00, p01, p02, p03, p10, p11, p12, p13
        .reg	x0, x1, x2, x3, h0, h1, h2, h3, rstx, rsth
        .no_mdep
 
        MV          x, x_b
        MV          h, h_a
        ADD         h,2,h_1         ; set up pointer to h[1]
        MVK         50,octr         ; outer loop ctr = 100/2
        MVK         64,rstx         ; used to rst x pointer each outer loop
        MVK         64,rsth         ; used to rst h pointer each outer loop

OUTLOOP:
        ADD         x_b,2,x_1       ; set up pointer to x[j+1]
        SUB         h_1,2,h_a       ; set up pointer to h[0]
        MVK         8,ctr           ; inner loop ctr = 32/2
        ZERO        sum0            ; sum0 = 0
        ZERO        sum1            ; sum1 = 0
 [octr]	SUB         octr,1,octr     ; decrement outer loop counter
		
        .mptr   x_b, x+0
        .mptr   x_1, x+2
        .mptr   h_a, h+0
        .mptr   h_1, h+2

        LDH .D2T2   *x_b++[2],x0    ; x0 = x[j]

LOOP:   .trip 8

        LDH .D1T1   *x_1++[2],x1    ; x1 = x[j+i+1]
        LDH .D1     *h_a++[2],h0    ; h0 = h[i]
        MPY .M1X    x0,h0,p00       ; x0 * h0
        MPY .M1     x1,h0,p10       ; x1 * h0
        ADD .L1     p00,sum0,sum0   ; sum0 += x0 * h0
        ADD .L2X    p10,sum1,sum1   ; sum1 += x1 * h0

        LDH .D2T2   *x_b++[2],x2    ; x2 = x[j+i+2]
        LDH .D2     *h_1++[2],h1    ; h1 = h[i+1]
        MPY .M2X    x1,h1,p01       ; x1 * h1
        MPY .M2     x2,h1,p11       ; x2 * h1
        ADD .L1X    p01,sum0,sum0   ; sum0 += x1 * h1
        ADD .L2     p11,sum1,sum1   ; sum1 += x2 * h1

        LDH .D1T1   *x_1++[2],x3    ; x3 = x[j+i+3]
        LDH .D1     *h_a++[2],h2    ; h2 = h[i+2]
        MPY .M1X    x2,h2,p02       ; x2 * h2
        MPY .M1     x3,h2,p12       ; x3 * h2
        ADD .L1     p02,sum0,sum0   ; sum0 += x2 * h2
        ADD .L2X    p12,sum1,sum1   ; sum1 += x3 * h2

        LDH .D2T2   *x_b++[2],x0    ; x0 = x[j+i+4]
        LDH .D2     *h_1++[2],h3    ; h3 = h[i+3]
        MPY .M2X    x3,h3,p03       ; x3 * h3
        MPY .M2     x0,h3,p13       ; x0 * h3
        ADD	.L1X    p03,sum0,sum0   ; sum0 += x3 * h3
        ADD .L2     p13,sum1,sum1   ; sum1 += x0 * h3

  [ctr] SUB .S2     ctr,1,ctr       ; decrement loop counter
  [ctr] B   .S2     LOOP            ; branch to loop

        SHR         sum0,15,sum0    ; sum0 >> 15
        SHR         sum1,15,sum1    ; sum1 >> 15
        STH         sum0,*y++       ; y[j] = sum0 >> 15
        STH         sum1,*y++       ; y[j+1] = sum1 >> 15
        SUB         x_b,rstx,x_b    ; reset x pointer to x[j]
        SUB         h_1,rsth,h_1    ; reset h pointer to h[0]
 [octr] B           OUTLOOP         ; branch to outer loop

        .endproc

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -