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

📄 _xcorrs_one_code_8_chips.asm

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


.section program;
.global _xcorrs_one_code_8_chips;

	//for 跟踪&AFC
	.align_code 4;
	_xcorrs_one_code_8_chips :
	//input register:
	//j0=	天线数据入口;假设跟踪的中心点在0的位置,那么天线数据入口在-4的位置,
	//		做8个chips是[-4,3];如果入口的位置不是4对齐的必须调整到4对齐.
	//k4=x路码字入口;只需要一路码字入口.
	//lc1=(匹配长度/32 -1);如果匹配长度是512,lc1=15; 若256,设置lc1=7;;
 	//j6=保存相关值结果的buffer地址. (8个)
 	
	//output register:
	//xr30=x路码字相关值的最大值;只需要一路码字.	
	//j10=x路最大值所在的位置;
	//j6=保存相关值结果的buffer地址.(8个)
	
	j10=0;;	
	r30=0;;
	
	//stack push	
             [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;;
            
		
	r7:4=q[j0+=4];   r3:0=q[k4+=4];;//data,code
	r15:12=q[j0+=4];;//data 	
	THR3:0=r3:0;j7=j0-8;;//save j0 to j7
	//first 4 cycles:
	.align_code 4;
	tr15:0=xcorrs(r7:4,thr3:0)(cut -7)(ext)(clr);	r11:8=q[j0+=4];;
    tr15:0=xcorrs(r15:12,thr3:0)(cut -3)(ext);		r19:16=q[j0+=4];;
 	tr15:0=xcorrs(r11:8, thr3:0)(ext);				r7:4=q[j0+=4];r3:2=l[k4+=2];;
	tr15:0=xcorrs(r19:16,thr3:0)(ext);				r15:12=q[j0+=4];;
 	//mid 120 (8*15) cycles:
 	// or mid 56 (8*7) cycles:
 	.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];THR3:2=r3:2;;	
	
	tr15:0=xcorrs(r7:4,  thr3:0)(ext);r11:8=q[j0+=4];r3:2=l[k4+=2];;
	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];;		
	.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];THR3:2=r3:2;;
    
	tr15:0=xcorrs(r7:4,thr3:0)(cut 7)(ext);; 
    tr15:0=xcorrs(r15:12,thr3:0)(cut 3)(ext);;
	
    
    
    
    //do not save, compare with th if sync, jump _SYNC;;
    j0=j7;						r3:0=tr3:0;;
    //8个相位点,每个都和峰值比较,如果比峰值大的,就替换成为新的峰值.   
    //.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,    
    //r3:2是第2个结果,r2=I,r3=Q;
    [j6+=1]=xr4;				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;;
	r4=r4+r5;[j6+=1]=xr6;							r6=r10*r10;;
	comp(r4,r30);									r7=r11*r11(NF);;
	if nxale;do, xr30=xr4;do,j10=j0-6;;    
    							r11:8=tr15:12;;
    r4=r0*r0;[j6+=1]=xr4;							r6=r6+r7;;
    r5=r1*r1(NF);									comp(r6,r30);;
    												if nxale;do, xr30=xr6;do,j10=j0-5;;    								
    r4=r4+r5;[j6+=1]=xr6;							r6=r2*r2;;
    comp(r4,r30);									r7=r3*r3(NF);;
    if nxale;do, xr30=xr4;do,j10=j0-4;;
    
    r4=r8*r8;[j6+=1]=xr4;							r6=r6+r7;;
	r5=r9*r9(NF);									comp(r6,r30);;
													if nxale;do, xr30=xr6;do,j10=j0-3;;
    r4=r4+r5;[j6+=1]=xr6;							r6=r10*r10;;								
    comp(r4,r30);									r7=r11*r11(NF);;
    if nxale;do, xr30=xr4;do,j10=j0-2;;   
    		 [j6+=1]=xr4;							r6=r6+r7;;
													comp(r6,r30);;
													if nxale;do, xr30=xr6;do,j10=j0-1;;//output xr30 and j10    											
    		 [j6+=1]=xr6;;
    j6=j6-8;;	       
    
    //stack popup
    
    		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_one_code_8_chips_End :
	nop;;
	nop;;



⌨️ 快捷键说明

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