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

📄 codamr.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
📖 第 1 页 / 共 2 页
字号:
*****************************************************************************
** Description:     codamr()      in cod_amr.c                             **
**                                                                         **
** Inputs:   										                       **
**          *XAR3-  Word16 new_speech[]		: speech input (L_FRAME)       **
**  	                        										   **
** Outputs:   															   **
**          *XAR4-  Word16 ana[]         :Analysis parameters              **
**          *XAR5-  Word16 synth[]       :Local synthesis                  **
**                                                                         **
** Return value :                                                          **
**                                                                         **
** Attribute    :       Cycles:          Pm:                               **
**                      Modified Registers: 				  			   **
**									   									   **
** Programmer   :       ZHOU Bei        		   	                       **
*****************************************************************************
		.global	_codamr
		
		.ref	  _pre_process
		.ref	  _lpc
		.ref	  _copy
		.ref	  _lsp
		.ref	  _check_lsp
		.ref	  _pre_big
		.ref	  _pitch_ol
		.ref	  _spreproc
		.ref	  _update_gp_clipping
		.ref	  _spstproc
		.ref	  _code_2i40_9bits
		.ref	  _cl_ltp
		.ref	  _gainQuant
		.ref	  _Prm2bits
		
		.ref	 _buffer1
		.ref	 _buffer3
		
		
		.ref     old_A
		.ref     p_window          
   		.ref	 A_t
   		;.ref	 new_speech
   		.ref	 ana
   		.ref	 syn
        .ref     old_speech
  		.ref	 new_speech_st
  		.ref	 speech
  		.ref	 lsp_new
  		.ref     Aq_t
  		.ref	 lsp_old_q
  		.ref	 lsp_old
  		.ref	 count
  		.ref	 gp
  		.ref     gamma1
  		.ref	 gamma2
  		.ref 	 mem_w
  		.ref     wsp
 		.ref	 lsp_init_data
 		.ref     old_wsp
 		.ref	 ai_zero
 		.ref	 xn
 		.ref	 error
  		.ref	 exc
  		.ref	 hvec
  		.ref	 mem_w0
  		.ref	 mem_err
  		.ref	 res
  		.ref	 res2
 		;.ref	 ol_gain_flg
 		.ref	 old_exc
  		.ref	 L_INTERPOL
  		.ref	 mem_syn
  		.ref 	 sharp
  		.ref	 y1
  		.ref	 y2
  		.ref	 code
 		.ref	 xn2
 		.ref	 gCoeff
 		
 		
 		.ref	MP1
		.ref	PIT_MAX
		.ref	M
		.ref    L_FRAME
		.ref	L_FRAME_BY2
  		.ref	L_TOTAL
  		.ref	L_WINDOW
  		.ref	L_NEXT
  		.ref	L_SUBFR
  
				
_codamr:
        MOVW	 DP,#200H
	    ;input: new_speech
	    movl	xar3,#_buffer3   
	      
	    ;output: ana,syn
	    movl	xar4,#ana
	    movl	xar5,#syn
	    
	    ;save input output address
	    ADDB	SP,#26
	    MOVL	*-SP[4],XAR3
	    MOVL	*-SP[6],XAR4
	    MOVL	*-SP[8],XAR5
	
		;Call _pre_process
		movl	xar2,*-SP[4]
		movb	xar1,#0a0h
		LCR		_pre_process
		
		;Copy(new_speech, st->new_speech, L_FRAME)
		;AR1--length,XAR2--x[]  
        ;Outputs:XAR3--y[]
		MOV		AR1,#L_FRAME
		MOVL	XAR2,*-SP[4]
		MOVL	XAR6,#new_speech_st
	   	MOVL	ACC,*XAR6
	   	MOVL	XAR3,ACC
	   	LCR		_copy
			
		;Call _lpc
		;lpc(st->lpcSt, st->p_window, st->p_window_12k2, A_t)
		;*XAR3--Word16 st->levinsonSt[m+1]  (old_A[])
		;*XAR2--Word16 x[] 
        ;Outputs: 
	    ;*XAR1--Word16 st->levinsonSt[m+1]  (old_A[])
	   	;*XAR4---Word16 a[]  
	   	MOVL    XAR3,#old_A
	   	MOVL	XAR1,#old_A
	   	MOVL	XAR6,#p_window
	   	MOVL	ACC,*XAR6
	   	MOVL	XAR2,ACC
	   	MOVL	XAR4,#A_t
	   	LCR		_lpc
	   	
	    ;call lsp 
	   	;lsp(st->lspSt, A_t, Aq_t, lsp_new, &ana)
	   	;int lsp(lspState *st,az[],azQ[],lsp_new[],**anap)   
	   	;input: past_rq[M],lsp_old[M],lsp_old_q[M], xar5---Word16 az[]    
	   	;output: past_rq[M],lsp_old[M],lsp_old_q[M], xar5---Word16 az[],
	   	; xar2---Word16 azQ[],xar3---Word16 lsp_new[],xar4---Word16 anap
		MOVL	XAR5,#A_t
		MOVL	XAR2,#Aq_t
		MOVL	XAR3,#lsp_new
		MOVL	XAR4,*-SP[6]
		LCR		_lsp
		MOVL	ACC,*-SP[6]
		ADD		ACC,#3
		MOVL	*-SP[6],ACC
		
		;call check_lsp
		;lsp_flag = check_lsp(st->tonStabSt, st->lspSt->lsp_old)
		;Word16 check_lsp(tonStabState *st,Word16 *lsp)          
		;input: xar0--st->count,xar2--*lsp          
		;output: xar0--st->count
		;return: al
		MOVL	XAR0,#count
		;MOV		AL,*XAR6
		;MOV		AR0,AL
		MOVL	XAR2,#lsp_old
		LCR	 	_check_lsp
		MOV		AL,AR6
		;MOVL	XAR6,#count
		;MOV		*XAR6,AR0
		MOV		*-SP[10],AL           ;Save lsp_flag in *-SP[10]	      
	   	
	   	;for(subfrNr = 0, i_subfr = 0; 
	   	;    subfrNr < L_FRAME/L_FRAME_BY2; 
        ;    subfrNr++, i_subfr += L_FRAME_BY2)
	    MOV		AR1,#L_FRAME/L_FRAME_BY2-1
	    MOV		AR4,#0
	    
_LOOP_354:
	    ;pre_big(gamma1,gamma2, A_t, i_subfr, st->speech,st->mem_w, st->wsp);
        ;int pre_big(gamma1[],gamma2[],A_t[],frameOffset,speech[],mem_w[],wsp[])               
	    ;Input: xar0--*gamma1,xar7--*gamma2,xar3--*A_t,xar2--*speech,xar5--*mem_w,ar4--frameOffset 
	    ;Output: xar5--*mem_w,xar6--*wsp   
	   		PUSH	XAR1
	   		MOVL	XAR6,#old_wsp+PIT_MAX
	    	MOVL	XAR0,#gamma1
	    	MOVL	XAR7,#gamma2
	    	MOVL	XAR3,#A_t
	    	MOVL	XAR2,#speech
	    	MOVL	ACC,*XAR2
	    	MOVL	XAR2,ACC
	    	MOVL	XAR5,#mem_w
	    	LCR		_pre_big
	    	;ADD		AR4,#L_FRAME_BY2
	    	POP		XAR1
	    	BANZ	_LOOP_354,AR1--
	    	
 		;T_op[0] = Pitch_ol(st->wsp, PIT_MIN, PIT_MAX,L_FRAME);	    	
	    ;Word16 Pitch_ol (signal[],pit_min,pit_max,L_frame)	
	    ;Inputs: XAR1--Word16 &signal        
	    ;Outputs: AL--Word16 p_max1         	
	    MOVL	XAR1,#old_wsp+PIT_MAX
	   	nop
	   	LCR		_pitch_ol
	   	nop
     	MOV		*-SP[11],AL        ;Save T_op[0]
     	MOV		*-SP[12],AL	       ;Save T_op[1]
     	
     	
   		;evenSubfr = 0;                                                  
   		;subfrNr = -1;                                                   
   		;for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR)
   		MOV		*-SP[13],#0		   ;Save evenSubfr
	    MOV	    *-SP[14],#-1	   ;Save subfrNr
	    MOV		*-SP[15],#0		   ;Save i_subfr
	    MOVL	XAR6,#A_t		   ;Save A_t
	 	MOVL	*-SP[22],XAR6
	 	MOVL	XAR6,#Aq_t		   ;Save Aq_t 
	    MOVL	*-SP[24],XAR6
_LOOP_401:
			;subfrNr = add(subfrNr, 1);
      		ADD		*-SP[14],#1
      		;evenSubfr = sub(1, evenSubfr);
			MOV		AL,#1
			SUB		AL,*-SP[13]
			MOV		*-SP[13],AL
		
			;subframePreProc(gamma1,gamma2, A, 
			;                Aq, &st->speech[i_subfr],
            ;                st->mem_err, st->mem_w0, st->zero,
            ;                st->ai_zero, &st->exc[i_subfr],
            ;                st->h1, xn, res, st->error);
            ;int subframePreProc(gamma1[],gamma2[],*A,
            ;				*Aq,*speech,*mem_err,mem_w0,*zero,ai_zero[],          
    		;				*exc[],h1[],xn[],res2[],error[])                    
			;input:_buffer1--gamma1[],_buffer1+2--gamma2[],xar1--*A
			;      xar7--*Aq,_buffer1+4--speech[],_buffer1+6--mem_err[]
			;	   _buffer1+8--mem_w0[],_buffer1+10--zero[]
            ;output: xar0--ai_zero[],xar2--exc[],xar3--h1[]
			;		 xar4--xn[],xar5--res2[],xar6--error[]
	 		;INPUT:
	 		MOVL	XAR6,#gamma1			;gamma1
	 		MOVL	@_buffer1,XAR6
	 		MOVL	XAR6,#gamma2			;gamma2
	 		MOVL	@_buffer1+2,XAR6
	 		MOVL	XAR1,*-SP[22]					;A
	 		MOVL	XAR7,*-SP[24]					;Aq
	 		MOVL	XAR6,#speech				;speech[i_subfr]
			MOVL	ACC,*XAR6
			ADD		ACC,*-SP[15]
			MOVL	@_buffer1+4,ACC
			MOVL	XAR6,#mem_err			;mem_err
			MOVL	@_buffer1+6,XAR6
			MOVL	XAR6,#mem_w0			;mem_w0
			MOVL	@_buffer1+8,XAR6
			MOVL	XAR6,#ai_zero+MP1		;zero
			MOVL	@_buffer1+10,XAR6
			;OUTPUT:
			MOVL	XAR0,#ai_zero				;ai_zero
			MOVL	XAR6,#exc					;exc[i_subfr]
			MOVL	ACC,*XAR6
			ADD		ACC,*-SP[15]
			MOVL	XAR2,ACC
			MOVL	XAR3,#hvec+L_SUBFR			;h1
			MOVL	XAR4,#xn					;xn

⌨️ 快捷键说明

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