?? _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= 天線數(shù)據(jù)入口;假設(shè)跟蹤的中心點在0的位置,那么天線數(shù)據(jù)入口在-4的位置,
// 做8個chips是[-4,3];如果入口的位置不是4對齊的必須調(diào)整到4對齊.
//k4=x路碼字入口;只需要一路碼字入口.
//lc1=(匹配長度/32 -1);如果匹配長度是512,lc1=15; 若256,設(shè)置lc1=7;;
//j6=保存相關(guān)值結(jié)果的buffer地址. (8個)
//output register:
//xr30=x路碼字相關(guān)值的最大值;只需要一路碼字.
//j10=x路最大值所在的位置;
//j6=保存相關(guān)值結(jié)果的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是第一個結(jié)果,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,最大值對應(yīng)的位置r31應(yīng)該是j0-8,
//r3:2是第2個結(jié)果,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;;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -