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

📄 s10_fir.sa

📁 dsp6713开发板的许多例程.对入门特别有用
💻 SA
字号:
***********************************************************************
*         Copyright (C) 1996-2001 Texas Instruments Incorporated
*                      All Rights Reserved
*         FIR10 ASSEMBLY OPTIMIZER SOURCE - Example 6-63
*         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, h_a
        .reg	p00, p01, p10, p11, x0, x1, h0, h1, rstx, rsth
        .no_mdep
 
        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,2,x_1         ; set up pointer to x[j+1]
        SUB         h_1,2,h_a       ; set up pointer to h[0]
        MVK         16,ctr          ; inner loop ctr = 32/2
        ZERO        sum0            ; sum0 = 0
        ZERO        sum1            ; sum1 = 0
 [octr] SUB         octr,1,octr     ; decrement outer loop counter
		
        LDH .D1     *x++[2],x0      ; x0 = x[j]

LOOP:   .trip 16

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

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

 [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,rstx,x        ; 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 + -