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

📄 xcorrs_two_codes_one_frame.asm

📁 这是我在ADSP tiger sharc 201上面实现的OFDM(标准是wimax)同步算法哦!具有非常高的指令效率.
💻 ASM
字号:
#include "SS_SYN.h"
#ifdef __ADSPTS201__
	#include "defts201.h"
#endif  

#define DEBUG_COMP_WITH_TH
.section program;
.global _xcorrs_two_codes_one_frame;


.extern Pointer0;
.extern q_time_code;
.extern xcorrs_result_X;
.extern xcorrs_result_Y;


	.align_code 4;
	_xcorrs_two_codes_one_frame :
	
	
             [j27+=4]=   cjmp;     [k27+=4]=   yr0;;
             [j27+=4]=    lc0;     [k27+=4]=   yr0;;
             [j27+=4]=    lc1;     [k27+=4]=   yr0;;
            q[j27+=4]=  xr3:0;    q[k27+=4]= yr3:0;;
            q[j27+=4]=  xr7:4;    q[k27+=4]= yr7:4;;
            q[j27+=4]=   j3:0;    q[k27+=4]=  k3:0;;
            
	//r31= DEC r31;;//1:
	r30=XCORR_TH;;//门限
	j0=[ j31+Pointer0 ];;//7:指向天线数据Sample0 ,此处不要加Path_window_length;	
	k4=q_time_code;;//1:第一个量化码字=>X路
	j8=j0;k5=q_time_code+20;;//1:第二个量化码字=>Y路,save j0 to j8
	j6=xcorrs_result_X;;//1:
	k6=xcorrs_result_Y;;//1:
	
	
	lc0=3570;;//1:帧长/8=28560/8=3570次循环.
	.align_code 4;
	_xcorrs_outer_loop:
	
	r7:4=q[j0+=4];   r3:0=q[k4+=4];;//data,code
	r15:12=q[j0+=4]; r11:8=q[k5+=4];;//data,code	
	xTHR3:0=r3:0;yTHR3:0=r11:8;j7=j0;k7=k4-4;;//j7,k7: save code pointer for next time. 		
	//first 4
	.align_code 4;
	tr15:0=xcorrs(r7:4,thr3:0)(cut -7)(ext)(clr);	r11:8=q[j0+=4];r21:20=l[k4+=2];;
    tr15:0=xcorrs(r15:12,thr3:0)(cut -3)(ext);	r19:16=q[j0+=4];r23:22=l[k5+=2];;
 	tr15:0=xcorrs(r11:8,thr3:0)(ext);				r7:4=q[j0+=4];lc1=7;;
    tr15:0=xcorrs(r19:16,thr3:0)(ext);r15:12=q[j0+=4];;  
    //mid 56	    
	.align_code 4;
	_xcorrs_main_loop:			
	tr15:0=xcorrs(r7:4,  thr3:0)(ext);r11:8=q[j0+=4];;
	tr15:0=xcorrs(r15:12,thr3:0)(ext);r19:16=q[j0+=4];;	
	tr15:0=xcorrs(r11:8, thr3:0)(ext);r7:4=q[j0+=4];;
	tr15:0=xcorrs(r19:16,thr3:0)(ext);r15:12=q[j0+=4];xTHR3:2=r21:20;yTHR3:2=r23:22;;	
	
	tr15:0=xcorrs(r7:4,  thr3:0)(ext);r11:8=q[j0+=4];r21:20=l[k4+=2];;
	tr15:0=xcorrs(r15:12,thr3:0)(ext);r19:16=q[j0+=4];r23:22=l[k5+=2];;	
	tr15:0=xcorrs(r11:8, thr3:0)(ext);r7:4=q[j0+=4];;		
	.align_code 4;
	if NLC1E, jump _xcorrs_main_loop;	
	tr15:0=xcorrs(r19:16,thr3:0)(ext);r15:12=q[j0+=4];;
		
	//last 6:
	tr15:0=xcorrs(r7:4,  thr3:0)(ext);r11:8=q[j0+=4];;
	tr15:0=xcorrs(r15:12,thr3:0)(ext);r19:16=q[j0+=4];;
	tr15:0=xcorrs(r11:8, thr3:0)(ext);r7:4=q[j0+=4];;
	tr15:0=xcorrs(r19:16,thr3:0)(ext);r15:12=q[j0+=4];xTHR3:2=r21:20;yTHR3:2=r23:22;;
    
	xytr15:0=xcorrs(r7:4,thr3:0)(cut 7)(ext);r7:4=q[j0+=4];k4=k7;;//5:write back pointer for next time 
    xytr15:0=xcorrs(r15:12,thr3:0)(cut 3)(ext);r15:12=q[j0+=4];;
	
    
    
    
    
    #ifdef DEBUG_COMP_WITH_TH
    //do not save, compare with th if sync, jump _SYNC;;
    j0=j7;k5=k4+20;				r3:0=tr3:0;;
    //8个相位点,每个都和峰值比较,如果比峰值大的,就替换成为新的峰值.
    //假设xr30,j10存放的是x路的最大相关值和其所在位置,yr30,j11是y路的;      
    //.code column1................................||  ......code column2..........
    r4=r0*r0;; //r1:0是第一个结果,r0=I,r1=Q;        
    r5=r1*r1;					r11:8=tr7:4;; // Q*Q+I*I, r30是最大值.
    r4=r4+r5;										r6=r2*r2;;
    comp(r4,r30);									r7=r3*r3(NF);;
    if nxale;do, xr30=xr4;do,j10=j0-8;;//最大值r30,最大值对应的位置r31应该是j0-8,
    if nyale;do, yr30=yr4;do,j11=j0-8;;
    //r3:2是第2个结果,r2=I,r3=Q;
    [j6+=1]=xr4;[k6+=1]=yr4;	r3:0=tr11:8;;
    
    r4=r8*r8;										r6=r6+r7;;
   	r5=r9*r9(NF);									comp(r6,r30);;
    												if nxale;do, xr30=xr6;do,j10=j0-7;;
    												if nyale;do, yr30=yr6;do,j11=j0-7;;
	r4=r4+r5;[j6+=1]=xr6;[k6+=1]=yr6;				r6=r10*r10;;
	comp(r4,r30);									r7=r11*r11(NF);;
	if nxale;do, xr30=xr4;do,j10=j0-6;;
    if nyale;do, yr30=yr4;do,j11=j0-6;;
    							r11:8=tr15:12;;
    r4=r0*r0;[j6+=1]=xr4;[k6+=1]=yr4;				r6=r6+r7;;
    r5=r1*r1(NF);									comp(r6,r30);;
    												if nxale;do, xr30=xr6;do,j10=j0-5;;
    												if nyale;do, yr30=yr6;do,j11=j0-5;;
    r4=r4+r5;[j6+=1]=xr6;[k6+=1]=yr6;				r6=r2*r2;;
    comp(r4,r30);									r7=r3*r3(NF);;
    if nxale;do, xr30=xr4;do,j10=j0-4;;
    if nyale;do, yr30=yr4;do,j11=j0-4;;
    
    r4=r8*r8;[j6+=1]=xr4;[k6+=1]=yr4;				r6=r6+r7;;
	r5=r9*r9(NF);									comp(r6,r30);;
													if nxale;do, xr30=xr6;do,j10=j0-3;;
    												if nyale;do, yr30=yr6;do,j11=j0-3;;
    r4=r4+r5;[j6+=1]=xr6;[k6+=1]=yr6;				r6=r10*r10;;								
    comp(r4,r30);									r7=r11*r11(NF);;
    if nxale;do, xr30=xr4;do,j10=j0-2;;
    if nyale;do, yr30=yr4;do,j11=j0-2;;
    		 [j6+=1]=xr4;[k6+=1]=yr4;				r6=r6+r7;;
													comp(r6,r30);;
													if nxale;do, xr30=xr6;do,j10=j0-1;;
    												if nyale;do, yr30=yr6;do,j11=j0-1;;
    		 [j6+=1]=xr6;[k6+=1]=yr6;;
    	
    
    //outer_loop:
    .align_code 4; if nlc0e,jump _xcorrs_outer_loop;;        
    #endif
    
    
    
    		j27=j27-4       ;     k27=k27-4      ;;
            j3:0=q[j27+=-4]  ;    k3:0=q[k27+=-4] ;; 
           xr7:4=q[j27+=-4]  ;   yr7:4=q[k27+=-4] ;;
           xr3:0=q[j27+=-4]  ;   yr3:0=q[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);;
            
    .align_code 4;
    _xcorrs_two_codes_one_frame_End :
	nop;;
	nop;;



⌨️ 快捷键说明

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