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 + -
显示快捷键?