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

📄 d_plsf_3.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
字号:
*****************************************************************************
** Description:     D_plsf_3() in d_plsf_3.c                               **
**                                                                         **
** Inputs                                                                  **
**                                                                         **
**   D_plsfState *st                                                       **
**   xar2---Word16 *indice                                                 **
**   xar3---Word16 *lsp1_q                                                 **
**                                                                         **
** Outputs:                                                                **
**                                                                         **
**   D_plsfState *st                                                       **
**   xar3---Word16 *lsp1_q                                                 **
**                                                                         **
** Return value :       		                                           **
**                                                                         **
** Attribute    :       Cycles: 62        Pm: 2322                         **
**                      Modified Registers:  acc,p,t,xar0,xar2-7           **
**                                                                         **
** Programmer   :       YANG zhiwei                                        **
*****************************************************************************

      .global _D_plsf_3
  
      .ref _reorder
      .ref _copy
      .ref _lsf_lsp
      
      .ref dico1_lsf    
      .ref dico2_lsf
      .ref mr515_3_lsf
      .ref pred_fac
      .ref mean_lsf

	  .ref past_r_q
      .ref past_lsf_q
      .ref _buffer2
	
	  .ref M
	  .ref LSF_GAP
	  		
_D_plsf_3:  
      movl	 	xar4,#dico1_lsf			;xar4 point to 	p_cb1(dico1_lsf)
      mov		t,*xar2++				;al = index = *indice++
      mpy		acc,t,#3				;acc = al * 3
      addl		xar4,acc				;xar4 =  p_dico = &p_cb1[add(index, add(index, index))]
    	
      movl		xar5,#_buffer2			;xar5 point to lsf1_r
      mov		al,*xar4++
      mov		*xar5++,al				;lsf1_r[0] = *p_dico++;
      mov		al,*xar4++
      mov		*xar5++,al				;lsf1_r[1] = *p_dico++;
      mov		al,*xar4++
      mov		*xar5++,al				;lsf1_r[2] = *p_dico++;
      
      movl	 	xar4,#dico2_lsf			;xar4 point to 	p_cb2(dico2_lsf)
  	  mov		al,*xar2++				;al = index = *indice++
      ;lsl		al,#1					;index = shl(index,1)
  	  mpy		acc,al,#3*2				;acc = al * 3 * 2
      addl		xar4,acc				;xar4 =  p_dico = &p_cb2[add(index,  add(index, index))]   
     
      mov		al,*xar4++
      mov		*xar5++,al				;lsf1_r[3] = *p_dico++;
      mov		al,*xar4++
      mov		*xar5++,al				;lsf1_r[4] = *p_dico++;
      mov		al,*xar4++
      mov		*xar5++,al				;lsf1_r[5] = *p_dico++;
      
      movl	 	xar4,#mr515_3_lsf		;xar4 point to 	p_cb3(mr515_3_lsf)
  	  mov		acc,*xar2++				;acc = index = *indice++
      lsl		acc,#2					;index = shl(index,2)
      addl		xar4,acc				;xar4 =  p_dico = &p_cb3[shl(index, 2)] 
     
      mov		al,*xar4++
      mov		*xar5++,al				;lsf1_r[6] = *p_dico++;
      mov		al,*xar4++
      mov		*xar5++,al				;lsf1_r[7] = *p_dico++;
      mov		al,*xar4++
      mov		*xar5++,al				;lsf1_r[8] = *p_dico++;
      mov		al,*xar4++
      mov		*xar5++,al				;lsf1_r[9] = *p_dico++;
      
      mov		ar0,#M-1				;M loops
      movl		xar4,#past_r_q
      movl		xar5,#pred_fac
      movl		xar6,#mean_lsf
      movl		xar7,#_buffer2+16		;xar7 point to lsf1_q
      movl		xar2,#_buffer2			;xar2 point to lsf1_r
_loop_120:            
      mov		t,*xar4					;t = past_r_q[i]
      mpy		acc,t,*xar5++			;acc = past_r_q[i] * pred_fac[i]
      lsl		acc,#1					;ah = mult(st->past_r_q[i], pred_fac[i])
      add		ah,*xar6++				;ah = add(mean_lsf[i], mult(st->past_r_q[i], pred_fac[i]))
      add		ah,*xar2				;ah = add(lsf1_r[i], temp)
      mov		*xar7++,ah				;lsf1_q[i] = ah
      mov		al,*xar2++				;al = lsf1_r[i]
      mov		*xar4++,al				;past_r_q[i] = al 
      banz		_loop_120,ar0--			;if ( i < M ) then jump to _loop_120  
 	  
 	  movl		xar7,#_buffer2+16		;xar7 point to lsf1_q
 	  mov		ar1,#LSF_GAP
 	  mov		ar2,#M     
 	  lcr		_reorder
 	  
 	  movl		xar2,#_buffer2+16		;xar2 point to lsf1_q 
 	  push		xar3					;store address of lsp1_q[]
 	  movl		xar3,#past_lsf_q		;xar3 point to past_lsf_q 
 	  mov		ar1,#M
 	  lcr		_copy
 	  
 	  pop		xar3					;restore address of lsp1_q[]
 	  movl		xar2,#_buffer2+16		;xar2 point to lsf1_q
 	  lcr		_lsf_lsp
 	  
 	  lretr

⌨️ 快捷键说明

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