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

📄 adapter.asm

📁 "DIGITAL SIGNAL PROCESSING WITH C AND THE TMS32 0C30"一书的附带程序
💻 ASM
字号:
;ADAPTER.ASM-ADAPTIVE STRUCTURE FOR NOISE CANCELLATION.OUTPUT AT E
           .TITLE "ADAPTER.ASM"    ;ADAPTIVE FIR USING AIC
           .GLOBAL RESET,BEGIN,AICSET,AICSEC,IOPRI,IOAUX,SPSET 
           .SECT   "vectors"       ;ASSEMBLE INTO VECT SECTION       
RESET      .WORD   BEGIN           ;RESET VECTOR
           .DATA                   ;ASSEMBLE INTO DATA SECTION
AICSEC     .WORD   1428h,1h,5EBEh,73h   ;FOR AIC, Fs = 8 KHz
N_ADDR     .WORD   N+LENGTH-1      ;LAST ADDR OF NOISE SAMPLES
COEFF_ADDR .WORD   COEFF           ;ADDR OF COEFF H(N-1)
ERF_ADDR   .WORD   ERR_FUNC        ;ADDR OF ERROR FUNCTION
BETA       .FLOAT  2.5E-12         ;RATE OF ADAPTATION CONSTANT 
LENGTH     .SET    50              ;FILTER LENGTH N 
           .BSS    COEFF,LENGTH    ;N SPACE FOR COEFFICIENTS
           .BSS    ERR_FUNC,1      ;1 SPACE FOR ERROR FUNTION
N          .USECT  "XN_BUFF",LENGTH ;NOISE SAMPLES BUFFER SIZE
           .TEXT                   ;ASSEMBLE INTO TEXT SECTION
BEGIN      LDP     SPSET           ;INIT DATA PAGE
           LDI     10h,R1          ;SERIAL PORT 1 OFFSET
           STI     R1,@SPSET       ;ENABLE SERIAL PORT 1
           CALL    AICSET          ;INIT AIC/TMS320C30
           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     @N_ADDR,AR1     ;LAST NOISE 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 NOISE SAMPLES TO 0
LOOP       CALL    IOAUX           ;OUTPUT,THEN GET N FROM AUX IN
           FLOAT   R6,R3           ;INPUT NOISE SAMPLE INTO R3
           STF     R3,*AR1++%      ;STORE IN RAM
           LDI     @COEFF_ADDR,AR0 ;H(N-1) ADDR -> AR0
           CALL    FILT            ;CALL FIR SUBROUTINE FILT
           CALL    IOPRI           ;OUTPUT,THEN GET D+N FROM PRI IN
           FLOAT   R6,R4           ;R4=FLOATING POINT(D+N)                
           SUBF3   R0,R4,R0        ;ERROR => R0 = (D+N)-Y
           FIX     R0,R7           ;R7=INTEGER(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
FILT       LDF     0,R2               ;R2 = 0                 
           RPTS    LENGTH-1           ;NEXT 2 INST.(LENGTH-1)TIMES
           MPYF3   *AR0++,*AR1++%,R0  ;H(N-1-i)*x(n-(N-1-i)),i=0,...,N-1 
||         ADDF3   R0,R2,R2           ;ACCUM     
           ADDF3   R0,R2,R0           ;ADD LAST PRODUCT=y(n) -> R0
           RETSU                      ;RETURN FROM SUBROUTINE
ADAPT      MPYF3   *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
           MPYF3   *AR6,*AR1++%,R0 ;ERR FUNC * x(n-(N-1-i)) -> R0
||         ADDF3   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 COEFF
           ADDF3   R3,R0,R2           ;H(n+1) = H(n) + ERR FUNC * x(n)
           STF     R2,*AR0            ;STORE/UPDATE COEFF
           RETSU                      ;RETURN FROM SUBROUTINE
           .END                       ;END




⌨️ 快捷键说明

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