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

📄 agc.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
字号:
*****************************************************************************
** Description:     agc() in agc.c                                         **
**                                                                         **
** Inputs                                                                  **
**                                                                         **
**   xar6---Word16 *sig_out                                                **
**   xar4---Word16 *sig_in                                                 **
**   xar5---agcState *st                                                   **
**                                                                         **
** Outputs:                                                                **
**   xar6---Word16 *sig_out                                                **
**                                                                         **
** Return value :       0                                                  **
**                                                                         **
** Attribute    :       Cycles:4049      Pm: 71                            **
**                      Modified Registers:  all                           **
**                                                                         **
** Programmer   :       Qi Ying                                            **
*****************************************************************************
            .global    _agc
            .ref       _energy_new    
            .ref       _div_s 
            .ref       _inv_sqrt
_agc:
            movl   xar3,            xar6          ;input:xar3=sig_out
            LCR    _energy_new                    ;output:acc=s
            movb   xar0,            #0
            cmpl   acc,             xar0
            sb     _Line_206,       NEQ
            mov    *xar5,           #0            ;st->past_gain=0
            LRETR                  
_Line_206: 
            csb    acc
            dec    T                              ;T=exp
            lsll   acc,             T  
            add    acc,             #0x0800<<#4   
            mov    ar1,             ah            ;ar1=gain_out
            push   T
            movl   xar3,            xar4          ;input:xar3=sig_in
            LCR    _energy_new                    ;output:acc=s
            pop    T
            movl   xar7,            acc
            movb   xar0,            #0        
            cmpl   acc,             xar0
            sb     _Line_242,       EQ             ;ar0=g0=0
            mov    ar3,             T              ;ar3=exp
            csb    acc                             ;T=i    
            lsll   acc,             T
            add    acc,             #0x0800<<#4   
            mov    ar2,             ah            ;ar2=gain_in
            push   T
            LCR    _div_s                         ;input:ar1=gain_out,ar2=gain_in
                                                  ;output:al
            mov    ah,              al
            mov    al,              #16
            mov    T,               al
            asrl   acc,             T             ;acc=s                                    
            lsl    acc,             #7
            pop    T                              ;i
            push   acc 
            mov    al,              ar3           ;exp
            cmp    al,              T
            sb     _Line_228,       GEQ
            sub    T,               al
            pop    acc
            lsll   acc,             T
            sb     _Line_230,       UNC
_Line_228:
            sub    al,              T
            mov    T,               al 
            pop    acc
            asrl   acc,             T 
_Line_230:            
            LCR    _inv_sqrt
            lsl    acc,             #9
            add    acc,             #0x0800<<#4   ;ah=i
            mpy    acc,    ah,      #3276
            lsl    acc,             #1
            mov    ar0,             ah            ;ar0=g0
_Line_242:
            movz   ar2,             *xar5         ;ar2=gain
            mov    ar3,             #39
_Loop_244:
            mpy    acc,    ar2,     #29491
            lsl    acc,             #1
            add    ah,              ar0           ;ah=gain
            mov    ar2,             ah
            mov    T,               ah            ;gain
            mpy    acc,    T,       *xar6         ;sig_out[i]
            lsl    acc,             #4
            mov    *xar6++,         ah  
            banz   _Loop_244,       ar3-- 
            mov    *xar5,           ar2           ;st->past_gain=gain           
            subb   xar6,            #40
            LRETR
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        


          

⌨️ 快捷键说明

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