cp_track.asm

来自「这是我在ADSP tiger sharc 201上面实现的OFDM(标准是wim」· 汇编 代码 · 共 215 行

ASM
215
字号
#include "SS_SYN.h"
.section program;
.global _cp_track;
 

.align_code 4;
_cp_track:

/*   input:     j4=[ j31 + Pointer0 ];;
                j5=cp_corr_result_mid;;
                 
     cost time    =        

*/

             [j27+=4]=   cjmp ;     [k27+=4]=    yr0 ;;
             [j27+=4]=    lc0 ;     [k27+=4]=    yr0 ;;
             [j27+=4]=    lc1 ;     [k27+=4]=    yr0 ;;
             [j27+=4]=    jl0 ;     [k27+=4]=    kl0 ;;
             [j27+=4]=    jb0 ;     [k27+=4]=    kb0 ;;
             
            q[j27+=4]=  xr3:0 ;    q[k27+=4]=  yr3:0 ;;
            q[j27+=4]=  xr7:4 ;    q[k27+=4]=  yr7:4 ;;
            q[j27+=4]= xr11:8 ;    q[k27+=4]= yr11:8 ;;
            q[j27+=4]=xr15:12 ;    q[k27+=4]=yr15:12 ;; 
            q[j27+=4]=xr19:16 ;    q[k27+=4]=yr19:16 ;; 
            q[j27+=4]=xr23:20 ;    q[k27+=4]=yr23:20 ;;
            q[j27+=4]=   j3:0 ;    q[k27+=4]=   k3:0 ;;
            q[j27+=4]=   j7:4 ;    q[k27+=4]=   k7:4 ;;
            q[j27+=4]=  j11:8 ;    q[k27+=4]=  k11:8 ;;
            q[j27+=4]=	j15:12 ;    q[k27+=4]=	k15:12 ;; 
            q[j27+=4]=	j19:16 ;    q[k27+=4]=	k19:16 ;; 
            q[j27+=4]=	j23:20 ;    q[k27+=4]=	k23:20 ;;
             
      		///////////3 branch //////////////////
      		j4=j4+Path_Window_Length_syn;;	//point to the real slot header
      		j5=j4+FFT_size;;
      		xr0=j5;;
      		k4=xr0;;			//point to postamble
      		j5=cp_corr_result_mid;;
      		j6=CP_LEN;;
      		.align_code 4;
      		call _one_branch_corr;;
      		
      		j4=j4-TRK_OFFSET;;
      		j5=j4+FFT_size;;
      		xr0=j5;;
      		k4=xr0;;			//point to postamble
      		j5=cp_corr_result_ahead;;
      		j6=CP_LEN;;
      		.align_code 4;
      		call _one_branch_corr;;
      		
      		
      		j4=j4+TRK_OFFSET*2;;
      		j5=j4+FFT_size;;
      		xr0=j5;;
      		k4=xr0;;			//point to postamble
      		j5=cp_corr_result_later;;
      		j6=CP_LEN;;
      		.align_code 4;
      		call _one_branch_corr;;
      		///////////////////////////3 branch over////////////
      		xr1:0=l[j31+cp_corr_result_mid];;
      		xr1=r1*r1;;
      		xr0=r0*r0;;
      		xr1=r1+r0;;
      		[j31+cp_corr_abs_mid]=xr1;;
      		
      		xr1:0=l[j31+cp_corr_result_ahead];;
      		xr1=r1*r1;;
      		xr0=r0*r0;;
      		xr1=r1+r0;;
      		[j31+cp_corr_abs_ahead]=xr1;;
      		
      		xr1:0=l[j31+cp_corr_result_later];;
      		xr1=r1*r1;;
      		xr0=r0*r0;;
      		xr1=r1+r0;;
      		[j31+cp_corr_abs_later]=xr1;;
      		
      		xr1=[j31+cp_corr_abs_ahead];;
      		xr2=[j31+cp_corr_abs_mid];;      		
      		xr3=[j31+cp_corr_abs_later];;
      		
      		///check timing adjust
      		xr4=0;;
      		xr5=0;;
      		
      		xcomp(r2,r1)(U);;
      		.align_code 4;      		
      		if xalt, jump _ahead_GT_mid;;
      		
      		xcomp(r2,r3)(U);;
      		.align_code 4;      		
      		if xalt, jump _later_GT_mid;;
      		
      		
		      		.align_code 4;
		      		_ahead_GT_mid:
		      			xcomp(r2,r3)(U);;
		      			if xalt; do, xr4=1;;
		      			.align_code 4;
		      			jump _judge_end;;  			
		      			
		      			
		      		.align_code 4;
		      		_later_GT_mid:
		      			xcomp(r1,r2)(U);;
		      			if xalt; do, xr5=1;;
      			
      		
      		.align_code 4;
      		_judge_end:	
      			
      		xr0=1;;
      		xcomp(r4,r0);;
      		.align_code 4;
      		if xaeq, jump _just_ahead;;
      		
      		
      		xcomp(r5,r0);;
      		.align_code 4;
      		if xaeq, jump _just_later;;
      		
      		
      		
      		.align_code 4;
      		_just_ahead:
      			xr0=[j31+cp_trk_status];;
      			xr0=dec r0;;
      			[j31+cp_trk_status]=xr0;;
      			.align_code 4;
      			jump _just_over;;
      			
      		.align_code 4;
      		_just_later:
      			xr0=[j31+cp_trk_status];;
      			xr0=inc r0;;
      			[j31+cp_trk_status]=xr0;;
      			 	
      			
      		.align_code 4;
      		_just_over:
      		
      		
      		j0=[j31+cp_trk_status];;
      		comp(j0,0);;//ahead>mid>later
      		if jeq, jump _timing_backward;;
      		
      		
      		j0=[j31+cp_trk_status];;
      		comp(j0,(2*TRK_TH));;//ahead>mid>later
      		if jeq, jump _timing_forward;;
      		
      		
      		.align_code 4;
      		_timing_forward:
      		[j31+Timing_forward_en]=xr1;;
      		xr0=TRK_TH;;
      		[j31+cp_trk_status]=xr0;;
      		.align_code 4;jump _timing_over;;
      		
      		.align_code 4;
      		_timing_backward:
      		[j31+Timing_backward_en]=xr1;;
      		xr0=TRK_TH;;
      		[j31+cp_trk_status]=xr0;;
      		
      		.align_code 4;
      		_timing_over:	   		
      		
      		
      		
      		
      		
      		
      		
      		
      		
      		
      		
      	 
      		//////////////////////////////////////////
            
            
             
             j27=j27-4       ;     k27=k27-4      ;;
          j23:20=q[j27+=-4]  ;  k23:20=q[k27+=-4] ;;
          j19:16=q[j27+=-4]  ;  k19:16=q[k27+=-4] ;; 
          j15:12=q[j27+=-4]  ;  k15:12=q[k27+=-4] ;;
           j11:8=q[j27+=-4]  ;   k11:8=q[k27+=-4] ;;  
            j7:4=q[j27+=-4]  ;    k7:4=q[k27+=-4] ;;
            j3:0=q[j27+=-4]  ;    k3:0=q[k27+=-4] ;; 
         xr23:20=q[j27+=-4]  ; yr23:20=q[k27+=-4] ;;
         xr19:16=q[j27+=-4]  ; yr19:16=q[k27+=-4] ;; 
         xr15:12=q[j27+=-4]  ; yr15:12=q[k27+=-4] ;;
          xr11:8=q[j27+=-4]  ;  yr11:8=q[k27+=-4] ;; 
           xr7:4=q[j27+=-4]  ;   yr7:4=q[k27+=-4] ;;
           xr3:0=q[j27+=-4]  ;   yr3:0=q[k27+=-4] ;;
           
             jb0= [j27+=-4]  ;     kb0= [k27+=-4] ;; 
             jl0= [j27+=-4]  ;     kl0= [k27+=-4] ;;
             lc1= [j27+=-4]  ;     yr0= [k27+=-4] ;; 
             lc0= [j27+=-4]  ;     yr0= [k27+=-4] ;;
            cjmp= [j27+= 0]  ;     yr0= [k27+= 0] ;;
            .align_code 4;
            cjmp(abs);;


_cp_track.end:



⌨️ 快捷键说明

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