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

📄 codamr.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
📖 第 1 页 / 共 2 页
字号:
			MOVL	XAR5,#res					;res
			MOVL	XAR6,#error					;error
			MOVL	ACC,*XAR6
			MOVL	XAR6,ACC
			nop
	 		LCR		_spreproc
	 		
	 		;Copy (res, res2, L_SUBFR)
	 		MOV		AR1,#L_SUBFR
			MOVL	XAR2,#res
	   		MOVL	XAR3,#res2
	   		LCR		_copy
	   		
	   		;cl_ltp(st->clLtpSt, st->tonStabSt, i_subfr, T_op, st->h1, 
            ;		&st->exc[i_subfr], res2, xn, lsp_flag, xn2, y1, 
            ;		&T0, &T0_frac, &gain_pit, gCoeff, &ana,
            ;		&gp_limit);
            ;int cl_ltp(*clSt,*tonSt,frameOffset,T_op[],*h1,*exc,                
 			;		res2[],xn[],lsp_flag,xn2[],y1[],*T0,*T0_frac,     
			;		*gain_pit,g_coeff[],**anap,*gp_limit  
			;Input:
			MOV		*(0:_buffer1),*-SP[15]		;i_subrf
			MOV		*(0:_buffer1+10),*-SP[11]	;T_op[0]
			MOVL	XAR6,#hvec+L_SUBFR			;h1
			MOVL	@_buffer1+16,XAR6
			MOVL	XAR6,#old_exc+PIT_MAX+L_INTERPOL	;exc[i_subfr]
			MOVL	ACC,XAR6
			ADD		ACC,*-SP[15]
			MOVL	@_buffer1+12,ACC
			MOVL	XAR6,#res2					;res2
			MOVL	@_buffer1+18,XAR6
			MOVL	XAR6,#xn					;xn
			MOVL	@_buffer1+14,XAR6
			MOV		*(0:_buffer1+1),*-SP[10]	;lsp_flag
			;Output:
			MOVL	XAR6,#xn2					;xn2
			MOVL	@_buffer1+20,XAR6
			MOVL	XAR6,#y1					;y1
			MOVL	@_buffer1+22,XAR6
			MOVL	XAR6,*-SP[6]				;ana
			MOVL	@_buffer1+24,XAR6  
			LCR		_cl_ltp
			;Save res8ult
			MOVL	XAR6,@_buffer1+24
			MOVL	*-SP[6],XAR6				;anap
			MOV		*-SP[16],*(0:_buffer1+2)		;T0
			MOV		*-SP[19],*(0:_buffer1+3)		;T0_frac
			MOV		*-SP[17],*(0:_buffer1+4)		;gain_pit
			MOV		*-SP[20],*(0:_buffer1+5)		;gp_limit
			MOVL	XAR6,#gCoeff             	;g_coeff
			MOV		*XAR6++,*(0:_buffer1+6)
			MOV		*XAR6++,*(0:_buffer1+7)
			MOV		*XAR6++,*(0:_buffer1+8)
			MOV		*XAR6,*(0:_buffer1+9)
			
			
			;if ((subfrNr == 0) && (st->ol_gain_flg[0] > 0))
	        ;	 st->old_lags[1] = T0;     
	        ;if ((sub(subfrNr, 3) == 0) && (st->ol_gain_flg[1] > 0))
	        ;    st->old_lags[0] = T0;     
     		;MOVL	XAR6,#ol_gain_flg
     		;MOVL	XAR7,#ol_gain_flg+1
     		;MOV		AL,*-SP[16] 
     		;CMP		*-SP[14],#0
			;BF		_LINE_430,EQ
			;CMP		*-SP[14],#3
			;BF		_LINE_436,EQ
			;BF		_LINE_446,UNC	
;_LINE_430:	
				;CMP		*XAR6,#0
				;BF		_LINE_446,LOS
				;MOV		*XAR7,AL
				;BF		_LINE_446,UNC	
			
;_LINE_436:	
				;CMP		*XAR7,#0
				;BF		_LINE_446,LOS
				;MOV		*XAR6,AL
;_LINE_446:	
	
	 		
	 		;*ana++ = code_2i40_9bits(subfrNr, xn2, st->h1, T0, st->sharp, code, y2, &index);
	    	;Word16 code_2i40_9bits(subNr,x[],h[],T0,pitch_sharp,code[],y[],*sign)       
			;Inputs:al--pitch_sharp,ar4--subNr,xar2--h[],xar3--x[],ah--T0                                                      
			;Outputs:xar5--code[],xar6--y[],xar7--sign[]     
	    	;Input:
	    	MOV		AL,*-SP[14]				;subNr
	    	MOV		AR4,AL
	    	MOVL	XAR3,#xn2				;x
	    	MOVL	XAR2,#hvec+L_SUBFR		;h (st->h1)
	    	MOV		AH,*-SP[16]				;T0
	    	MOVL	XAR6,#sharp				;pitch_sharp(st->sharp)
	    	MOV		AL,*XAR6
	    	;Output:	
	    	MOVL	XAR5,#code				;code
	    	MOVL	XAR6,#y2				;y2
	    	MOVL	XAR7,#_buffer3-1         ;Save sign to #_buffer3-1
	    	LCR		_code_2i40_9bits
	    	nop
	    	nop
	    	;Save result
	    	;*ana++ = index;    /* sign index */   
	    	MOVL	XAR4,*-SP[6]
	    	MOV		AL,PL
	    	MOV		*XAR4++,AL
	    	MOVL	XAR6,#_buffer3-1 
	    	MOV		AL,*XAR6
	    	MOV		*XAR4++,AL	
	    	MOVL	*-SP[6],XAR4
	    	
			;gainQuant(st->gainQuantSt, res, &st->exc[i_subfr], code,
            ;		   xn, xn2,  y1, y2, gCoeff, evenSubfr, gp_limit,
            ;          &gain_pit_sf0, &gain_code_sf0,
            ;          &gain_pit, &gain_code, &ana)
            ;
            ;int gainQuant(*st,res[],exc[],code[],xn[],xn2[],y1[],Y2[],          
    		;			g_coeff[],even_subframe,gp_limit,`*sf0_gain_pit,
    		;		    `*sf0_gain_cod,*gain_pit,`*gain_cod,`**anap)
    		;
    		;Input:gainQuantState *st,xar7--*code,xar0--xn[],xar1--xn2[]                                                  **
			;		xar2--y1[],xar3--y2[],xar4--g_coeff[],ar5--gp_limit                                                    
			;Output:_buffer1--*gain_pit,_buffer1+2--*gain_cod,xar6--*anap                                         **
    		;Output:
    		MOVL	XAR6,#_buffer3-2			;*gain_pit
    		MOV		AL,*-SP[17]
    		MOV		*XAR6,AL
    		MOVL	@_buffer1,XAR6
    		MOVL	XAR6,#_buffer3-4			;*gain_cod
    		MOVL	@_buffer1+2,XAR6
    		MOVL	XAR6,*-SP[6]			;*anap
    		;Input:
     		MOVL	XAR7,#code				;*code
    		MOVL	XAR0,#xn				;xn
    		MOVL	XAR1,#xn2				;xn2
    		MOVL	XAR2,#y1				;y1
    		MOVL	XAR3,#y2				;y2
    		MOVL	XAR4,#gCoeff			;g_coeff[]
    		MOV		AL,*-SP[20]				;gp_limit
    		MOV		AR5,AL
    		
    		LCR		_gainQuant
    		
    		;Save result
    		MOVL	*-SP[6],XAR6			;*anap
    		MOVL	XAR7,#_buffer3-2
    		MOV		AL,*XAR7			;*gain_pit
    		MOV		*-SP[17],AL
    		MOVL	XAR7,#_buffer3-4
    		MOV		AL,*XAR7			;*gain_code
    		MOV		*-SP[18],AL
    		
    		
    		
    		;update_gp_clipping(st->tonStabSt, gain_pit)
    		;void update_gp_clipping(tonStabState *st,g_pitch)
    		;Input:xar4--st->gp[7],ar5--g_pitch                                                 **
			;Output:xar4--st->gp[7]
			;MOVL	XAR6,#count
			;MOV		AL,*XAR6
			;MOV		AR0,AL
			MOVL	XAR4,#gp
			MOV		AL,*-SP[17]
			MOV		AR5,AL
			LCR		_update_gp_clipping
			
    		
    		;subframePostProc(st->speech, i_subfr, gain_pit,
            ;        gain_code, Aq, synth, xn, code, y1, y2, st->mem_syn,
            ;        st->mem_err, st->mem_w0, st->exc, &st->sharp)
            ;int subframePostProc(*speech,i_subfr,gain_pit,gain_code, 
     		;		 *Aq,synth[],xn[],code[],y1[],y2[],*mem_syn,*mem_err,  
    		;		 *mem_w0,*exc,*sharp     
			;Input:_buffer1--*speech,ar0--i_subfr,ar1--gain_pit,ar2--gain_code                                                                      **
		    ;	   _buffer1+2--*Aq,_buffer1+4--Synth[],_buffer1+6--Xn[],
		    ;	   _buffer1+8--code[],_buffer1+10--y1[],_buffer1+12--y2[]
		    ;      xar3--*mem_syn
			;Output:xar3--*mem_syn,xar4--*mem_err,xar5--*mem_w0,xar6--*exc
			;	    xar7--*sharp    
			;input:                                                                  **
			MOVL	XAR7,#speech					;speech
			MOVL	XAR1,*XAR7
			MOVL	@_buffer1,XAR1
			MOV		AL,*-SP[15]                     ;i_subfr
			MOV		AR0,AL
			MOV		AL,*-SP[17]						;gain_pit
    		MOV		AR1,AL
    		MOV		AL,*-SP[18]						;gain_code
    		MOV		AR2,AL
    		MOVL	XAR7,*-SP[24]					;Aq
    		MOVL	@_buffer1+2,XAR7
    		MOVL	XAR6,*-SP[8]                    ;synth
    		MOVL	@_buffer1+4,XAR6
    		MOVL	XAR7,#xn
    		MOVL	@_buffer1+6,XAR7					;xn
    		MOVL	XAR7,#code
    		MOVL	@_buffer1+8,XAR7					;code
    		MOVL	XAR7,#y1
    		MOVL	@_buffer1+10,XAR7				;y1
    		MOVL	XAR7,#y2
    		MOVL	@_buffer1+12,XAR7				;y2
    		MOVL    XAR3,#mem_syn					;mem_syn
     		;Output:
    		MOVL	XAR4,#mem_err
    		MOVL	XAR5,#mem_w0
       		MOVL	XAR6,#old_exc+PIT_MAX+L_INTERPOL
    		MOVL	XAR7,#sharp
    		LCR		 _spstproc
    		
    		;A += MP1;    
      		;Aq += MP1;
      		MOVB	ACC,#MP1
   			ADDL	*-SP[22],ACC
			ADDL	*-SP[24],ACC  
			
			;for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR)
			ADD		*-SP[15],#L_SUBFR
			CMP		*-SP[15],#L_FRAME
			BF		_LOOP_401,LT
		
		;Copy(&st->old_exc[L_FRAME], &st->old_exc[0], PIT_MAX + L_INTERPOL);
   		;Input: AR1--Lenth,*XAR2--x[]  
        ;Outputs:*XAR3--Word16 y[]
        MOV		AR1,#PIT_MAX + L_INTERPOL
        MOVL	XAR2,#old_exc
        MOV		ACC,#L_FRAME
        ADDL	XAR2,ACC
        MOVL	XAR3,#old_exc
        LCR		_copy
        
        ;Copy(&st->old_wsp[L_FRAME], &st->old_wsp[0], PIT_MAX);
   		MOV		AR1,#PIT_MAX
   		MOVL	XAR2,#old_wsp
   		MOV		ACC,#L_FRAME
   		ADDL	XAR2,ACC
   		MOVL	XAR3,#old_wsp
   		LCR		_copy
   			
   		;Copy(&st->old_speech[L_FRAME], &st->old_speech[0], L_TOTAL - L_FRAME);
		MOV		AR1,#L_TOTAL - L_FRAME
   		MOVL	XAR2,#old_speech
   		MOV		ACC,#L_FRAME
   		ADDL	XAR2,ACC
   		MOVL	XAR3,#old_speech
   		LCR		_copy
   		
   		;Prm2bits (prm, serial) 
   		movl	xar2,#_buffer3
	    lcr		_Prm2bits
        		    		
	    subb	sp,#26
	    nop
	   	nop
	   	nop
	   	

		lretr
		
		
		

⌨️ 快捷键说明

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