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

📄 gc_pred.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
字号:
*****************************************************************************
** Description:     gc_pred() in gc_pred.c                                 **
**                                                                         **
** Inputs                                                                  **
**                                                                         **
**	 wor16 gc_predState *st, I/O 全局变量                                        
**   xar7--- Word16 *code
** Outputs:                                                                **       
**   AH--- Word16 *exp_gcode0                                  
**   AL--- Word16 *frac_gcode0
**                                                        
**                                                                         **
** Return value :                                                          **
**                                                                         **
** Attribute    :       Cycles: 100       Pm: 44                           **
**                      Modified Registers:  all                           **
**                                                                         **
** Programmer   :       xiewei                                     		   **
***************************************************************************** 
  
  .ref _log2_norm
  .global _gc_pred
  .ref _buffer3
  .ref past_qua_en
_gc_pred:
    

	MOV T,*XAR7         ;ener_code = L_mac((Word32) 0, code[0], code[0]);
    MPY P,T,*XAR7++
    MOVB ACC,#0
    ADDL ACC,P<<PM
    MOV AR0,#38         ; for (i = 1; i < L_SUBFR; i++)
LOOP:
           				;ener_code = L_mac(ener_code, code[i], code[i]);
    MOV T,*XAR7
    MPY P,T,*XAR7++
    ADDL ACC,P<<PM
    BANZ LOOP,AR0--
    
    CSB ACC               ;exp_code = norm_l (ener_code);
    LSL ACC,T             ;ener_code = L_shl (ener_code, exp_code);
    MOVL XAR0,ACC
    MOV AR1,T
  ;  PUSH XAR6
    LCR _log2_norm        ; Log2_norm (ener_code, exp_code, &exp, &frac);
   ; POP XAR6
    ZAPA
    MOV T,#-24660          ;L_tmp = Mpy_32_16(exp, frac, -24660);
    MPYA P,T,AR2
    MPYA P,T,AR3
    MOVH AR0,P
    ADD ACC,AR0<<1            ;L_tmp = L_mac(L_tmp, 16678, 64); 
    MOV T,#16678
    MPY P,T,#64
    ADDL ACC,P<<PM
    LSL ACC,#10                ;L_tmp = L_shl(L_tmp, 10); 
    MOV AR0,#3
    MOVL XAR5,#_buffer3+400
    MOV *XAR5++,#5571
    MOV *XAR5++,#4751
    MOV *XAR5++,#2785
    MOV *XAR5,#1556
    MOVL XAR5,#_buffer3+400
    MOVL XAR6,#past_qua_en    
LOOP2:
    MOV T,*XAR5++              ;  for (i = 0; i < 4; i++)
    ;MOVL XAR6,#past_qua_en     ;!!!
    MPY P,T,*XAR6++            ;  L_tmp = L_mac(L_tmp, pred[i], st->past_qua_en[i]);
    ADDL ACC,P<<PM
    BANZ LOOP2,AR0--            
    MOV T,AH                    ; gcode0 = extract_h(L_tmp);
    MPY P,T,#0x00001543         ; L_tmp = L_mult(gcode0, 5443);
    MOVB ACC,#0
    ADDL ACC,P<<PM
    MOV T,#8                    ;L_tmp = L_shr(L_tmp, 8);           
    ASRL ACC,T
    LSR AL,1                   ;L_Extract(L_tmp, exp_gcode0, frac_gcode0); 
    LRETR                   
                        
                         
  

⌨️ 快捷键说明

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