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

📄 initiate.asm

📁 基于TMS320F2812的AMR+RS编解码+OFDM调制解调源程序。是stand alone运行版本
💻 ASM
字号:
*****************************************************************************
** Description:     _initiate()      in .c		                   **
**    to initiate viables                                                  **
** Inputs :                                                                **
**    									   **
** Return value :       			                          **
**                                                                         **
** Attribute    :       Cycles:1533         Pm: 59                        **
**               Modified Registers:					   **
**                                                                         **
** Programmer   :       ZHOU Bei    			                   **
*****************************************************************************
    	 .global _initiate
	 
	 	.ref     old_A
		.ref     p_window          
   		.ref	 A_t
   		;.ref	 new_speech
        .ref     old_speech
  		.ref	 new_speech_st
  		.ref	 speech
  		.ref	 lsp_new
  		.ref     Aq_t
  		.ref	 lsp_old_q
  		.ref	 lsp_old
  		.ref	 lsp_init_data
  		.ref	 error
  		.ref	 old_exc
   		.ref	 exc
  		.ref	 wsp
  		.ref	 zero
        .ref	 old_wsp
        .ref     ai_zero
   		.ref	 mem_err
  		.ref	 hvec
  		.ref	 h1
  		;.ref	 old_lags
		.ref	 mem_w
  		.ref	 mem_syn
  		.ref	 mem_w0
  		.ref	 past_rq
  		.ref     y2_hi
   		.ref     y2_lo
   		.ref     y1_hi
   		.ref     y1_lo
   		.ref     x0
  		.ref     x1
  		.ref	 sf0_exp_gcode0
  		.ref	 T0_prev_subframe
		.ref 	 UnqSt_past_qua_en
  		.ref	 UnqSt_past_qua_en_MR122
  		.ref	 past_qua_en
  		.ref	 past_qua_en_MR122
  		.ref	 count
  		.ref	 sharp
  		.ref	 old_speech
  		.ref	 p_window

 
 		.ref	L_INTERPOL
  		.ref	PIT_MAX
  		.ref	MP1
   		.ref	M
		.ref    L_FRAME
  		.ref	L_TOTAL
  		.ref	L_WINDOW
  		.ref	L_NEXT
  		.ref	L_SUBFR
  		.ref	NPRED
		.ref	MIN_ENERGY  
		.ref	MIN_ENERGY_MR122 
		.ref	N_FRAME
		.ref	SHARPMIN
  		
  		.ref	_copy
  		
	
	
_initiate:
	;in Pre_Process_reset
		;Initializes state memory
		MOVL	XAR6,#y2_hi
		NOP
		RPT		#5
		||MOV	*XAR6++,#0
	
    	;speech
		
		MOVL	XAR6,#old_speech
		NOP
		;RPT     #L_TOTAL-1
		RPT		#79
		||MOV	*XAR6++,#0
		
	 
	 ;in cod_amr_reset
	 
		;st->new_speech = st->old_speech + L_TOTAL - L_FRAME; 
		MOVL	XAR6,#old_speech+L_TOTAL
		MOVL	ACC,XAR6
		PUSH	ACC
		SUB		ACC,#L_FRAME
		MOVL	XAR6,#new_speech_st
		MOVL	*XAR6,ACC

		;st->speech = st->new_speech - L_NEXT		
		SUB		ACC,#L_NEXT
		MOVL	XAR6,#speech
		MOVL	*XAR6,ACC
		
		;st->p_window = st->old_speech + L_TOTAL - L_WINDOW;
		POP		ACC
		SUB		ACC,#L_WINDOW
		MOVL	XAR6,#p_window
		MOVL	*XAR6,ACC
		
		;st->wsp = st->old_wsp + PIT_MAX
		MOVL	XAR6,#old_wsp+PIT_MAX
		MOVL	ACC,XAR6
		MOVL	XAR6,#wsp
		MOVL	*XAR6,ACC
	
		;st->exc = st->old_exc + PIT_MAX + L_INTERPOL;
   		MOVL	XAR6,#old_exc+PIT_MAX+L_INTERPOL
		MOVL	ACC,XAR6
		MOVL	XAR6,#exc
		MOVL	*XAR6,ACC
		
   		;st->zero = st->ai_zero + MP1
   		MOVL	XAR6,#ai_zero+MP1
		MOVL	ACC,XAR6
		MOVL	XAR6,#zero
		MOVL	*XAR6,ACC
   		
   		;st->error = st->mem_err + M
   		MOVL	XAR6,#mem_err+M
		MOVL	ACC,XAR6
		MOVL	XAR6,#error
		MOVL	*XAR6,ACC
		
   		;st->h1 = &st->hvec[L_SUBFR]
   		MOVL	XAR6,#hvec+L_SUBFR
		MOVL	ACC,XAR6
		MOVL	XAR6,#h1
		MOVL	*XAR6,ACC
		
 	    MOVL	XAR6,#p_window
	    MOVL	ACC,*XAR6
	    MOVL	XAR6,ACC
	    RPT		#79
	    ||MOV	*XAR6++,#0
  
   		;Static vectors to zero 
	    ;set_zero(st->old_speech, L_TOTAL);
   		NOP
   		MOVL	XAR6,#old_speech
   		RPT		#L_TOTAL-1
   		||MOV	*XAR6++,#0
   		;Set_zero(st->old_exc,    PIT_MAX + L_INTERPOL);
   		NOP
   		MOVL	XAR6,#old_exc
   		RPT		#PIT_MAX + L_INTERPOL-1
   		||MOV	*XAR6++,#0
   		;Set_zero(st->old_wsp,    PIT_MAX);
   		NOP
   		MOVL	XAR6,#old_wsp
   		RPT		#PIT_MAX-1
   		||MOV	*XAR6++,#0
   		;Set_zero(st->mem_syn,    M)
   		NOP
   		MOVL	XAR6,#mem_syn
   		RPT		#M-1
   		||MOV	*XAR6++,#0
   		;Set_zero(st->mem_w,      M);
   		NOP
   		MOVL	XAR6,#mem_w
   		RPT		#M-1
   		||MOV	*XAR6++,#0
   		;Set_zero(st->mem_w0,     M);
   		NOP
   		MOVL	XAR6,#mem_w0
   		RPT		#M-1
   		||MOV	*XAR6++,#0
   		;Set_zero(st->mem_err,    M);
		NOP
   		MOVL	XAR6,#mem_err
   		RPT		#M-1
   		||MOV	*XAR6++,#0   
   		;Set_zero(st->zero,       L_SUBFR);
   		NOP
   		MOVL	XAR6,#zero
   		MOVL	ACC,*XAR6
   		MOVL	XAR6,ACC
   		RPT		#L_SUBFR-1
   		||MOV	*XAR6++,#0
   		;Set_zero(st->hvec,       L_SUBFR);    /* set to zero "h1[-L_SUBFR..-1]" */
		NOP
   		MOVL	XAR6,#hvec
   		RPT		# L_SUBFR-1
   		||MOV	*XAR6++,#0
  		
  		;/* OL LTP states */
   		;for (i = 0; i < 5; i++)   st->old_lags[i] = 40
   		;NOP	
   		;MOVL	XAR6,#old_lags
   		;RPT		#4
   		;||MOV	*XAR6++,#40
   		
     ;in lpc_reset (lpc.c) 
	 	;to  initiate old_A (st->lpcSt)
	    ;state->old_A[0] = 4096;
  		;for(i = 1; i < M + 1; i++)
      	;state->old_A[i] = 0;
	    MOVL	XAR6,#old_A
	    MOV		*XAR6++,#4096	
		RPT		#M-1
		||MOV	*XAR6++,#0
     
     ;in lsp_reset (lsp.c)
		;Copy(lsp_init_data, &st->lsp_old[0], M);
	    ;Copy(st->lsp_old, st->lsp_old_q, M);
  		MOVB	XAR1,#M
  		MOVL	XAR2,#lsp_init_data
  		MOVL	XAR3,#lsp_old
  		LCR		_copy
  		MOVB	XAR1,#M
  		MOVL	XAR2,#lsp_old
  		MOVL	XAR3,#lsp_old_q
  		LCR		_copy
  		
  		;in	Q_plsf_reset
  		;for ( i = 0; i < M; i++)
      	;state->past_rq[i] = 0
		NOP
      	MOVL	XAR6,#past_rq
		RPT		#M-1
		||MOV	*XAR6++,#0
		
	;in cl_ltp_reset
		;in Pitch_fr_reset
		;state->T0_prev_subframe 
		MOVL	XAR6,#T0_prev_subframe
		MOV		*XAR6,#0
		
	;in gainQuant_reset
		;state->sf0_exp_gcode0 = 0;
  		;state->sf0_frac_gcode0 = 0;
  		;state->sf0_exp_target_en = 0;
  		;state->sf0_frac_target_en = 0;
  		;Set_zero (state->sf0_exp_coeff, 5);
  		;Set_zero (state->sf0_frac_coeff, 5)
  		NOP
      	MOVL	XAR6,#sf0_exp_gcode0
		RPT		#13
		||MOV	*XAR6++,#0
  		
  		;in gc_pred_reset
  		;gc_pred_reset(state->gc_predSt);
  		;gc_pred_reset(state->gc_predUnqSt);
   		;for(i = 0  i < NPRED i++)
  			;state->past_qua_en[i] = MIN_ENERGY;
  			;state->past_qua_en_MR122[i] = MIN_ENERGY_MR122;
   		NOP
      	MOVL	XAR6,#past_qua_en
		RPT		#NPRED-1
		||MOV	*XAR6++,#MIN_ENERGY
		NOP
      	MOVL	XAR6,#past_qua_en_MR122
		RPT		#NPRED-1
		||MOV	*XAR6++,#MIN_ENERGY_MR122
		NOP
      	MOVL	XAR6,#UnqSt_past_qua_en
		RPT		#NPRED-1
		||MOV	*XAR6++,#MIN_ENERGY
		NOP
      	MOVL	XAR6,#UnqSt_past_qua_en_MR122
		RPT		#NPRED-1
		||MOV	*XAR6++,#MIN_ENERGY_MR122
   
   	;in ton_stab_reset
   		;st->count = 0;
    	;Set_zero(st->gp, N_FRAME)
    	NOP
      	MOVL	XAR6,#count
		RPT		#N_FRAME
		||MOV	*XAR6++,#0
    	
    ;st->sharp = SHARPMIN
    	MOVL	XAR6,#sharp
		MOV	*XAR6++,#SHARPMIN
  		
  		lretr

⌨️ 快捷键说明

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