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

📄 residu.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
字号:
*****************************************************************************
** Description:     Residu()      in residu.c                              **
**                                                                         **
** Inputs                                                                  **
**    AR1=const	(不用传)		   	: size of filtering                    **
**   *XAR7---Word16  a[],           : prediction coefficients              **
**   *XAR4---Word16  x[],     	    : speech signal                        **
**	   note:x[-10]~x[-1] should also be read before call the function     **
**			                                                               **
** Outputs:                                                                **
**   *XAR3---Word16  y[],            : residual signal                     **
**                                                                         **
** Return value :                                                          **
**                                                                         **
** Attribute    :      		        Cycles: 5312         Pm:46             **
**                      Modified Registers: AR1,XAR3,XAR4,XAR7             **
**                                          ACC,P, T                       **
**                                                                         **
** Programmer   :       ZHOU Bei           (OK! MAR 5th,2003)              **
*****************************************************************************

	  .global _residu
	  
	  .ref		L_SUBFR
	  .ref		M
_residu:		
			PUSH	XAR0
			MOV		AR1,#L_SUBFR-1
			;DEC	    AR1             ; loop time--
		
_LOOP_63:
 	    	ADDB	XAR4,#1         ; Increase addr of x
 	    	PUSH	XAR7			; Save start addr of a[i]
	    	PUSH	XAR4			; Save start addr of x[j]
			MOV		AR0,#M
			ZAPA
_LOOP_68:		 
				;MOV		T,*--XAR4  
				;MPYA	P,T,*XAR7++   ; P=a[i]*x[j],j--,; A=A+P<<1, i++
				MAC		 p,*--XAR4,*xar7++
				BANZ	_LOOP_68,AR0--

			ADDL 	ACC,P<<PM         	; Perform final accumulate
			movl    p,acc
			sb  _L1,LT          ;讨论左移时的溢出问题
            sb  _L2,UNC
_L1:
            and acc,#0xf000<<16
            cmp ah,#0xf000
            sb  _L3,EQ
            sb  _L4,UNC
_L2:
            and acc,#0xf000<<16
            cmp ah,#0x0000
            sb  _L3,EQ
            sb  _L5,UNC
_L4:  
            mov ah,#0x8000
            mov al,#0x0000
            sb  _L6,UNC
_L5:
            mov ah,#0x7fff
            mov al,#0xffff
            sb  _L6,UNC
_L3:
            movl    acc,p  
            LSL	    ACC,#3	            ; ACC<<3
_L6:			
			ADD 	ACC,#0800H<<4	    ; Round
			MOV 	*XAR3++,AH          ; Save MSB as final result
			POP	    XAR4				; Resume start addr of a[i]
			POP		XAR7                ; Resume start addr of x[j]
			
			BANZ    _LOOP_63,AR1--     ; Loop if AR1!= 0, AR1--
        
		POP		XAR0                                                               
		LRETR
		
		
		  

⌨️ 快捷键说明

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