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

📄 lsfwt.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
字号:
*****************************************************************************
** Description:           Lsf_wt()      in lsfwt.c                         **
**                                                                         **
** Inputs:                                                                 **
**    *XAR2---Word16 *lsf,        : LSF vector                       	   **
**								                                     	   **
** Outputs:                                                                **
**    *XAR3---Word16 *wf         : square of weighting factors             **
**                                                                         **
** Return value :                                                          **
**                                                                         **
** Attribute    :      		        Cycles: 882         Pm: 29             **
**                      Modified Registers: AR1,XAR2,XAR3,xar4			   **
**                                          ACC,P,T                        **
**			                  	            @_buffer1                       **
**								   							               **
** Programmer   :       ZHOU Bei       (ok! Mar 6th,2003)                  **
*****************************************************************************
	  .global _lsf_wt
	  
	  .ref _buffer1
	  
_lsf_wt:		
		PUSH	XAR3			; Temp save srart addr of wf	
		MOVL	XAR4,XAR2       ; XAR4=XAR2=lsf
		ADDB	XAR2,#1         

		MOV	    AL,*XAR2++      ; wf[0]=lsf[1]
		MOV     *XAR3++,AL      ; wf++,lsf++

		MOV		AR1,#7  		; wf[i]=lsf[i+1]-lsf[i-1] (i=1 to 8)
_LOOP_84:                       
 			MOV	    ACC,*XAR2++               
 			SUB	    ACC,*XAR4++
 			MOV	    *XAR3++,AL
 		    BANZ    _LOOP_84,AR1--
 		
 		MOV		ACC,#4000H      ; wf[9]=0.5-lsf[8] 
 		SUB	    ACC,*XAR4
 		MOV		*XAR3,AL
 		POP	    XAR3            ; Resume start addr of wf
 		
 		MOV	    AR1,#9			; Loop to operate on wf[i] (i=0 to 9)
_LOOP_91:
			CMP	    *XAR3,#733H 		;Compare wf[i] with 1843      		
			B		_LINE_101,GEQ       
			MPY	    P,*XAR3,#6E00H      ; Branch for (wf[i] < 1843)
			MOVH    @_buffer1,P          ; _buffer1=(wf[i]*28160)>>15
			MOV	    ACC,#0D63H          ; ACC=3427
			SB		_LINE_104,UNC       ; Branch finished,jump to _LINE_104
			
_LINE_101:								; Branch for (wf[i]>=1843)  
    		MOV	    ACC,#733H           ; ACC=1843
    		SUB	    *XAR3,AL            ; wf[i]=wf[i]-1843
    		MPY	    P,*XAR3,#1862H      ; _buffer1=(wf[i]*6242)>>15
    		MOVH    @_buffer1,P
_LINE_104:
			SUB	    ACC,@_buffer1		; ACC=ACC-_buffer1
    		LSL	    ACC,#3	            ; ACC<<3
       		MOV	    *XAR3++,AL			; Save result to wf[i],i++
       		
       	BANZ    _LOOP_91,AR1--	; Loop if AR1!= 0, AR1--  
        LRETR

⌨️ 快捷键说明

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