📄 _xcorrs_one_code_8_chips.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 + -