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

📄 qua_gain.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
字号:
*****************************************************************************
** Description:     Qua_gain() in qua_gain.c                               **
**                                                                         **
** Inputs                                                                  **
**                                                                         **
**   al  ---Word16 exp_gcode0                                              **
**   ar3 ---Word16 frac_gcode0                                             **
**   xar4---Word16 frac_coeff[]                                            **
**   xar5---Word16 exp_coeff[]                                             **
**   ar6 ---Word16 gp_limit                                                **
**                                                                         **
** Outputs:                                                                **
**                                                                         **
**   xar1---Word16 *gain_pit                                               **
**   xar0---Word16 *gain_cod                                               **         
**   xar2---Word16 *qua_ener_MR122                                         **                      
**   xar7---Word16 *qua_ener                                               **
**                                                                         ** 
**                                                                         **
** Return value :       ar5                                                **
**                                                                         **
** Attribute    :       Cycles: 21389     Pm: 192                          **
**                      Modified Registers:  all                           **
**                                                                         **
** Programmer   :       Qi Ying                                            **
*****************************************************************************
          .global _qua_gain
          .global table_gain_lowrates
          .ref    _pow2
          .ref    _buffer1
          .ref    _buffer2
_qua_gain:
          push   acc
          push   xar1
          push   xar0
          push   xar2
          push   xar7
          sub    al,           #11
          mov    ar2,          al                   ;ar2=exp_code     
          push   xar2
          push   xar4
          push   xar5
          push   xar6 
          mov    ar2,          #14
          LCR    _pow2
          movl   acc,          xar1
          mov    ar3,          al                   ;ar3=gcode0
          pop    xar6
          pop    xar5
          pop    xar4
          pop    xar2
          movl   xar7,         xar5                 ;xar7=exp_max[]
          mov    al,           *xar5++
          sub    al,           #13
          mov    *xar7++,      al                   ;exp_max[0] = sub(exp_coeff[0], 13)                
          mov    al,           *xar5++
          sub    al,           #14            
          mov    *xar7++,      al                   ;exp_max[1] = sub(exp_coeff[1], 14)
          mov    al,           ar2
          lsl    al,           #1
          addb   al,           #15
          add    al,           *xar5++
          mov    *xar7++,      al                   ;exp_max[2] = add(exp_coeff[2], add(15, shl(exp_code, 1)));   
          mov    al,           *xar5++
          add    al,           ar2
          mov    *xar7++,      al                   ;exp_max[3] = add(exp_coeff[3], exp_code);                    
          inc    ar2
          mov    al,           ar2
          add    al,           *xar5
          mov    *xar7,        al                   ;exp_max[4] = add(exp_coeff[4], add(1, exp_code));            
          subb   xar7,         #4                   ;xar7指回exp_max头
          mov    ar0,          #4
          mov    al,           *+xar7[ar0]          ;al=e_max
          dec    ar0
_Loop_142:
          cmp    al,           *+xar7[ar0]
          sb     _Line_148,    GEQ
          mov    al,           *+xar7[ar0]
_Line_148:
          banz   _Loop_142,    ar0--  
          inc    al
          mov    ar5,          al                   ;ar5=e_max
          mov    ar0,          #0                   ;ar0=i
          movl   xar1,         xar7                 ;xar1=coeff[]
          movl   xar2,         xar1
          addb   xar2,         #5                   ;xar2=coeff_lo[]
_Loop_154:
          cmp    ar0,          #5
          sb     _Line_173,    GEQ
          mov    al,           ar5
          sub    al,           *+xar7[ar0]
          mov    T,            al                   ;T=j
          movb   acc,          #0
          mov    ah,           *+xar4[ar0]          ;acc=L_tmp 
          asrl   acc,          T                    ;acc=L_tmp = L_shr(L_tmp, j)
          mov    *+xar1[ar0],  ah                   ;coeff[]
          push   acc
          mpy    acc,*+xar1[ar0],#16384 
          lsl    acc,          #1
          movl   P,            acc
          mov    al,           #1
          mov    T,            al
          pop    acc
          asrl   acc,          T
          subl   acc,          p
          mov    *+xar2[ar0],  al                   ;coeff_lo[]
          inc    ar0 
          sb     _Loop_154,    UNC
_Line_173:          
          mov    al,           #0
          mov    pl,           al                   ;pl=index  
          mov    al,           #0xffff
          mov    ah,           #0x7fff 
          movl   XT,           acc                  ;XT=dist_min
          movl   xar4,         #table_gain_lowrates ;xar4=p
          mov    ar0,          #0                   
_Loop_177:
          cmp    ar0,          #64          
          sb     _Line_215,    GEQ
          movz   ar5,          *xar4++              ;ar5=g_pitch
          nop
          nop
          nop
          nop
          mov    ar7,          *xar4++              ;ar7=g_code
          addb   xar4,         #2 
          mov    al,           ar5
          cmp    al,           ar6                  ;比较g_pitch和gp_limit
          sb     _Line_207,    GEQ
          push   p
          push   XT
          mov    T,            ar7
          mpy    acc,    T,    ar3                  ;g_code*gcode0 
          lsl    acc,          #1                  
          mov    ar7,          ah                   ;ar7=g_code
          mov    T,            ar5
          mpy    acc,    T,    ar5                  ;g_pitch*g_pitch
          lsl    acc,          #1                   ;ah=g2_pitch 
          mov    T,            ah
          mpy    acc,    T,    *xar2++              ;g2_pitch*coeff_lo[0]
          lsl    acc,          #1
          mov    al,           ah
          mov    ah,           #0
          lsl    acc,          #1
          movl   p,            acc
          mpy    acc,    T,    *xar1++              ;g2_pitch*coeff[0] 
          lsl    acc,          #1
          addl   p,            acc                  ;p=L_temp
          mov    T,            ar5                  ;g_pitch 
          mpy    acc,    T,    *xar2++              ;g_pitch*coeff_lo[1]
          lsl    acc,          #1
          mov    al,           ah
          mov    ah,           #0 
          lsl    acc,          #1
          addl   p,            acc
          mpy    acc,    T,    *xar1++              ;g_pitch*coeff[1] 
          lsl    acc,          #1
          addl   P,            acc                  ;P=L_add(L_tmp, Mpy_32_16(coeff[1], coeff_lo[1], g_pitch));
          mov    T,            ar7                  ;g_code 
          mpy    acc,    T,    ar7                  ;g_code*g_code
          lsl    acc,          #1                   ;ah=g2_code
          mov    T,            ah
          mpy    acc,    T,    *xar2++              ;g2_code*coeff_lo[2]
          lsl    acc,          #1
          mov    al,           ah
          mov    ah,           #0  
          lsl    acc,          #1
          addl   p,            acc
          mpy    acc,    T,    *xar1++              ;g2_code*coeff[2] 
          lsl    acc,          #1
          addl   P,            acc                  ;P=L_add(L_tmp, Mpy_32_16(coeff[2], coeff_lo[2], g2_code));
          mov    T,            ar7                  ;g_code
          mpy    acc,    T,    *xar2++              ;g_code*coeff_lo[3]
          lsl    acc,          #1
          mov    al,           ah
          mov    ah,           #0
          lsl    acc,          #1
          addl   p,            acc
          mpy    acc,    T,    *xar1++              ;g_code*coeff[3] 
          lsl    acc,          #1
          addl   P,            acc                  ;P=L_add(L_tmp, Mpy_32_16(coeff[3], coeff_lo[3], gcode));
          mpy    acc,    T,    ar5                  ;g_code*g_pitch                    
          lsl    acc,          #1                   ;ah=g_pit_cod 
          mov    T,            ah                                    
          mpy    acc,    T,    *xar2                ;g_pit_cod*coeff_lo[4]
          lsl    acc,          #1
          mov    al,           ah
          mov    ah,           #0
          lsl    acc,          #1
          addl   p,            acc
          mpy    acc,    T,    *xar1                ;g2_code*coeff[4] 
          lsl    acc,          #1
          addl   P,            acc                  ;P=L_add(L_tmp, Mpy_32_16(coeff[4], coeff_lo[4],g_pit_cod));
          subb   xar1,         #4                   ;xar1指回coeff头  
          subb   xar2,         #4                   ;xar2指回coeff_lo头    
          movl   acc,          P
          pop    XT
          pop    p
          cmpl   acc,          XT                   ;比较L_tmp和dist_min                                                                                                                                                                                                                                                                                                    
          sb     _Line_207,    GEQ
          movl   XT,           acc                  ;dist_min = L_tmp
          mov    pl,           ar0                  ;index=i 
_Line_207:
          inc    ar0                                ;i++
          sb     _Loop_177,    UNC
_Line_215:                         
          pop    xar7
          pop    xar2
          pop    xar0
          pop    xar1
          movl   acc,          p                    ;al=index
          mov    ar5,          al                   ;ar5=index 
          lsl    al,           #2                             
          mov    pl,           al
          movl   xar4,         #table_gain_lowrates  
          movl   acc,          xar4
          add    acc,          pl                                                      
          movl   xar4,         acc                  ;xar4=p
          mov    al,           *+xar4[0]              
          mov    *xar1,        al                   ;*xar1=*gain_pit
          mov    ar6,          *+xar4[1]            ;ar6=g_code = *p++
          nop
          nop
          nop
          nop
          mov    al,           *+xar4[2]              
          mov    *xar2,        al                   ;*xar2=*qua_ener_MR122 
          mov    al,           *+xar4[3]
          mov    *xar7,        al                   ;*xar7=*qua_ener   
          pop    acc                                ;exp_gcode0
          movb   ah,           #10
          sub    ah,           al
          mov    ar4,          ah                   ;ar4= sub(10,exp_gcode0)
          mov    T,            ar6     
          mpy    acc,   T,     ar3                  ;g_code*gcode0                                                          
          lsl    acc,          #1
          mov    T,            ar4
          asrl   acc,          T                    
          mov    *xar0,        ah                   ;*xar0=*gain_cod                                                                    
          LRETR                                                                                          
                                                                                                              
                                                                                                                        
                                                                                                                                  
                                                                                                                                            
                                                                                                                                                                
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          
          

⌨️ 快捷键说明

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