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

📄 adaptp.asm

📁 "DIGITAL SIGNAL PROCESSING WITH C AND THE TMS32 0C30"一书的附带程序
💻 ASM
字号:
;ADAPTP.ASM-ADAPTIVE PREDICTOR
           .TITLE "ADAPTP.ASM"     ;ADAPTIVE FIR FILTER
           .GLOBAL RESET,BEGIN,FILT,ADAPT ;REF/DEF SYMBOLS
           .SECT   "VECTORS"       ;ASSEMBLE INTO VECTOR SECTION       
RESET      .WORD   BEGIN           ;RESET VECTOR
           .DATA                   ;ASSEMBLE INTO DATA SECTION
D_ADDR     .WORD   804000H         ;DESIRED SIGNAL PORT ADDRESS
DN_ADDR    .WORD   804001H         ;INPUT TO ADAPT FILTER PORT ADDR
OUT_ADDR   .WORD   804002H         ;OUTPUT PORT ADDRESS
DNS_ADDR   .WORD   DNS+LENGTH-1    ;LAST ADDR OF DN (HCOS312) SAMPLES
COEFF_ADDR .WORD   COEFF           ;ADDR OF COEFF H(N-1)
ERF_ADDR   .WORD   ERR_FUNC        ;ADDR OF ERROR FUNCTION
BETA       .FLOAT  5.0E-10         ;RATE OF ADAPTATION
LENGTH     .SET    41              ;FILTER LENGTH N 
           .BSS    DNS,LENGTH      ;N SPACE FOR DN SAMPLES
           .BSS    COEFF,LENGTH    ;N SPACE FOR COEFFICIENTS
           .BSS    ERR_FUNC,1      ;1 SPACE FOR ERROR FUNTION
           .TEXT                   ;ASSEMBLE INTO TEXT SECTION
BEGIN      LDI     @D_ADDR,AR2     ;DESIRED SIGNAL ADDR -> AR2
           LDI     @DN_ADDR,AR3    ;DN ADDRESS          -> AR3
           LDI     @OUT_ADDR,AR4   ;OUTPUT ADDR         -> AR4
           LDI     @ERF_ADDR,AR6   ;ERROR FUNC ADDR     -> AR6
           LDI     LENGTH,BK       ;FILTER LENGTH N     -> BK
           LDI     @COEFF_ADDR,AR0 ;COEFF H(N-1) ADDRESS-> AR0
           LDI     @DNS_ADDR,AR1   ;LAST DN SAMPLE ADDR -> AR1
           LDF     0,R0            ;INIT R0=0 
           RPTS    LENGTH-1        ;PERFORM NEXT 2 INST. N TIMES
           STF     R0,*AR0++       ;INIT COEFF TO 0, IN // WITH
||         STF     R0,*AR1++%      ;INIT DN SAMPLES TO 0
LOOP       FLOAT   *AR3,R3         ;INPUT DN SAMPLE INTO R3
           STF     R3,*AR1++(1)%   ;STORE IN RAM
           FLOAT   *AR2,R4         ;INPUT D SAMPLE INTO R4
           LDI     @COEFF_ADDR,AR0 ;H(N-1) ADDR -> AR0
           CALL    FILT            ;CALL FIR SUBROUTINE FILT
           FIX     R0,R1           ;CONVERT R0=Y TO INTEGER->R1
           STI     R1,*AR4         ;STORE R1 INTO OUTPUT PORT 
           SUBF    R0,R4,R0        ;ERROR = D-Y -> R0
           MPYF    @BETA,R0        ;R0=ERR FUNC=BETA*ERROR
           STF     R0,*AR6         ;STORE ERROR FUNCTION 
           LDI     LENGTH-2,RC     ;RESET REPEAT COUNTER
           LDI     @COEFF_ADDR,AR0 ;H(N-1) ADDR -> AR0
           CALL    ADAPT           ;CALL ADAPTING SUBROUTINE
           BR      LOOP            ;REPEAT WITH NEXT SAMPLE
;FIR FILTER SUBROUTINE
FILT       LDF     0,R2              ;R2 = 0                 
           RPTS    LENGTH-1          ;NEXT 2 INST.(LENGTH-1)TIMES
           MPYF    *AR0++,*AR1++%,R0 ;H(N-1-i)*x(n-(N-1-i))i=0,...,N-1 
||         ADDF    R0,R2,R2          ;ACCUMULATE
           ADDF    R0,R2,R0          ;ADD LAST PRODUCT = y(n) -> R0
           RETSU                     ;RETURN FROM SUBROUTINE
;ADAPTATION SUBROUTINE
ADAPT      MPYF    *AR6,*AR1++%,R0   ;ERR FUNC * x(n-(N-1))   -> R0
           LDF     *AR0,R3           ;H(N-1) -> R3           
           RPTB    LOOP_END          ;REPEAT(N-2 TIMES) UNTIL LOOP_END
           MPYF    *AR6,*AR1++%,R0   ;ERR FUNC * x(n-(N-1-i)) -> R0
||         ADDF    R3,R0,R2          ;H(N-1-i)+ERR FUNC * x(n-(N-1-i))
LOOP_END   LDF     *+AR0(1),R3       ;LOAD SUBSEQUENT H(k) -> R3
||         STF     R2,*AR0++         ;STORE/UPDATE COEFFICIENT
           ADDF    R3,R0,R2          ;H(n+1) = H(n) + ERR FUNC * x(n)
           STF     R2,*AR0           ;STORE/UPDATE THE LAST COEFF
           RETSU                     ;RETURN FROM SUBROUTINE
           .END                      ;END


⌨️ 快捷键说明

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