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

📄 searchfrac.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
字号:
***************************************************************************
** Description: seachfrac() in pitch_fr.c                              
**                                                                         
** Inputs                                                                  
**                                                                         
**	 AR1:		Word16 lag
**	 AR2:		Word16 frac
**	 AR3:		Word16 last_frac
**	 XAR4:		Word16 &corr[0]
**                                                                   
** Outputs:                                                                
**                                                                         
** Return value:
**	
**   AR1:		Word16 lag
**	 AR2:		Word16 frac                                         
**                                                                         
** Attribute:   Cycles: 1770     Pm: 51                            
**                      
** Modified Registers:  all                           
**                                                                         
** Programmer:  Liu Yang
**
** Complete time: 2003 3 31 	
*****************************************************************************
		
		.global		_searchfrac
		.ref		_interpol_3or6

_searchfrac:
		ADDB		SP,#16
		;by skiff
		mov			ah,#0
		MOV			AL,AR1			    ; Al = lag
		ADDL		@XAR4,ACC			; XAR4 = &corr[lag]
		MOVL		*-SP[6],XAR4		; *-SP[6] = &corr[lag]
		MOV			AL,AR1			    ; AL = lag
		MOV			*-SP[8],AL			; *-SP[8] = lag
		MOV			AL,AR2				; AL = frac		
		MOV			*-SP[9],AL			; *-SP[9] = frac
		INC			@AR3				; AR3 = last_frac + 1
		MOV			*-SP[10],AR3		; *-SP[10] = last_frac + 1
		
		MOVL		@XAR3,XAR4			; XAR3 = &corr[lag]
		;BY SKIFF
		MOV			AH,#0
		MOV			AL,AR2	 			; AL = frac
		MOV			AR1,#1				; AR1 = flag3 = 1
		
		LCR			_interpol_3or6		; AH = max = Interpol_3or6 (&corr[lag], frac, flag3)
		
		MOV			*-SP[12],AH			; *-SP[12] = max			
		
		MOV			AL,*-SP[9]			; AL = frac
		INC			@AL					; AL = i = frac + 1
		MOV			*-SP[13],AL			; *-SP[13] = i
		
L1:		MOVL		XAR3,*-SP[6]		; XAR3 = &corr[lag]
		MOV			AR1,#1				; AR1 = flag3 = 1
		MOV			ACC,*-SP[13]		; AL = i
				
		LCR			_interpol_3or6 		; AH = corr_int = Interpol_3or6 (&corr[*lag], i, flag3)
		
		MOV			AR6,*-SP[13]		; AR6 = i
		MOV			AR7,*-SP[10]		; AR7 = last_frac + 1
		CMP			AH,*-SP[12]			; if (corr_int > max)
		SB			B1,LEQ
		MOV			*-SP[12],AH			; *-SP[12] = max = corr_int
		MOV			*-SP[9],AR6			; *-SP[9] = frac = i

B1:		INC			@AR6				; i++
		MOV			*-SP[13],AR6		; *-SP[13] = i
		BAR			L1,AR6,AR7,NEQ		; if (i <= last_frac) loop
		
		MOV			AH,*-SP[8]			; AH = lag
		MOV			AL,*-SP[9]			; AL = frac
		MOV			@AR1,AH				; AR1 = lag
		MOV			@AR2,AL				; AR2 = frac
						
		; Limit the fraction value between -1 and 1
		
		CMP		    @AL,#-2				; if (frac == -2)
		SB			B2,NEQ
		MOV			AR2,#1				; AR2 = frac = 1
		DEC			@AH					; AH = lag - 1
		MOV			AR1,AH				; AR1 = lag = lag - 1
		SB			B3,UNC						
		
B2:		CMP		    @AL,#2				; if (frac == 2)
		SB			B3,NEQ
		MOV			AR2,#-1				; frac = -1
		INC			@AH					; AH = lag + 1
		MOV			AR1,AH				; AR1 = lag = lag + 1				
		
B3:		SUBB		SP,#16

		LRETR							; else return
		
		
		

⌨️ 快捷键说明

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