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

📄 calc_filt_energies.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
字号:
*****************************************************************************
** Description:     calc_filt_energies() in calc_enc.c                              **
**                                                                         **
** Inputs                                                                  **
**                                                                         **
**   xar0 ---Word16 xn[]                                                   **
**   xar1 ---Word16 xn2[]                                                  **
**   xar2 ---word16 y1[]                                                   **
**   xar3 ---word16 Y2[]                                                   **
**   xar6 ---word16 g_coeff[]                                              **

** Outputs:                                                                **
**   xar4 ---word16 frac_coeff[]                                           **
**   xar5 ---Word16 exp_coeff[]                                            **
**                                                                         **
** Attribute    :       Cycles: 3978       Pm: 79                           **
**                      Modified Registers:  all                           **
**                                                                         **
** Programmer   :      xiewei                                     **
*****************************************************************************

  .global _calc_enc
  .ref	_buffer2
_calc_enc:
	MOV @AR1,#39      		;L_SUBFR=40 
	;BY SKIFF
	PUSH XAR2
	MOVL XAR2,@XAR3
	
	MOVL XAR3,#_buffer2-40
	MOVL XAR7,@XAR3
_loop_31:   	          ;for (i = 0; i < L_SUBFR; i++) {                   		  
    MOV AL,*XAR2++        ;y2[i] = shr(Y2[i], 3); }
    ASR AL,#3
    MOV *XAR3++, AL
    BANZ _loop_31,AR1--
	
	POP	XAR2   
    
    MOV AL,*XAR6++   ;frac_coeff[0] = g_coeff[0]
    MOV *XAR4++,AL
    MOV AL,*XAR6++   ;exp_coeff[0] = g_coeff[1];           
    MOV *XAR5++,AL
    ;by yangzhw
    MOV AH,*XAR6++   ;frac_coeff[1] = negate(g_coeff[2]);
    MOV	AL,#0
    NEG	ACC
    MOV *XAR4++,AH     ;exp_coeff[1] = add(g_coeff[3], 1);   
    MOV AL,*XAR6
    ADD AL,#1
    MOV *XAR5++,AL
    MOVL XAR3,@XAR7    ;s = L_mac(ener_init, y2[0], y2[0]);
    MOV T,*XAR3
    MPY P,T,*XAR3++
    MOVB ACC,#1
    ADDL ACC,P<<PM
    MOV @AR1,#38      ;for (i = 1; i < L_SUBFR; i++) 
    MOVL XAR3,@XAR7
    ADDB XAR3,#1
_loop_56:                
	MOV T,*XAR3       ;s = L_mac(s, y2[i], y2[i]);
	MPY P,T,*XAR3++
	ADDL ACC,P<<PM
	BANZ _loop_56,AR1--   
    CSB ACC            ;exp = norm_l(s),to T!
    			       ;frac_coeff[2] = extract_h(L_shl(s, exp));
    LSL ACC,T  
    MOV *XAR4++,AH   
    MOV AL,#15          ; exp_coeff[2] = sub(15 - 18, exp); 
    SUB AL,#18
    SUB AL,T
    MOV *XAR5++,AL
    MOV T,*XAR0         ;s = L_mac(ener_init, xn[0], y2[0]);
    MOVL XAR3,@XAR7
    MPY P,T,*XAR3
    MOVB ACC,#1
    ADDL ACC,P<<PM            
                         
    MOV @AR1,#38        ;for (i = 1; i < L_SUBFR; i++)
    ADDB XAR0,#1
    ADDB XAR3,#1
_loop_80:                  ;s = L_mac(s, xn[i], y2[i]) 
	MOV T,*XAR0++
	MPY P,T,*XAR3++
	ADDL ACC,P<<PM
	BANZ _loop_80,AR1-- 
	
	CSB ACC            ; exp = norm_l(s); to T              
                       ;frac_coeff[3] = negate(extract_h(L_shl(s, exp))); 
    LSLL ACC,T 
    ;by yangzhw                          
    ;NEG AH
    MOV	AL,#0
    NEG	ACC
    MOV *XAR4++,AH
    MOV AL,#15         ;exp_coeff[3] = sub(15 - 9 + 1, exp);
    SUB AL,#9
   	ADD AL,#1                              
    SUB AL,T                                 
    MOV *XAR5++,AL       
    MOVL XAR3,@XAR7 
    MOV T,*XAR2         ;s = L_mac(ener_init, y1[0], y2[0]);
    MPY P,T,*XAR3
    MOVB ACC,#1
    ADDL ACC,P<<PM            
    MOV @AR1,#38          ;for (i = 1; i < L_SUBFR; i++)
    ADDB XAR2,#1           ;s = L_mac(s, y1[i], y2[i]) 
    ADDB XAR3,#1                                      
_loop_104:
	MOV T,*XAR2++
	MPY P,T,*XAR3++
	ADDL ACC,P<<PM
	BANZ _loop_104,AR1-- 
	CSB ACC            ; exp = norm_l(s); to T              
    LSLL ACC,T          ;frac_coeff[4] = extract_h(L_shl(s, exp));                  
    MOV *XAR4,AH
    MOV AL,#15         ;exp_coeff[4] = sub(15 - 9 + 1, exp);
    SUB AL,#9
   	ADD AL,#1                              
    SUB AL,T                                 
    MOV *XAR5,AL
    SUBB XAR4,#4
    SUBB XAR5,#4
    LRETR                                                                                       
    

⌨️ 快捷键说明

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