?? ss_syn.asm
字號:
j7=j4+SAMPLE_SEQUENCE_LENGTH+0x10000 ;;//Sample3
lc0=SAMPLE_SEQUENCE_LENGTH-Path_Window_Length-1;;
r7=0xffffffff;;
.align_code 4;
jump _debug_start_compare;;
.align_code 4;
_debug_linkprot_mode_2:
j4=[ j31+Pointer0 ] ;;
j4=j4+Path_Window_Length_syn ;;//指向天線數據Sample0
j5=j4+SAMPLE_SEQUENCE_LENGTH_SYN ;;//Sample1
j6=j4+2*SAMPLE_SEQUENCE_LENGTH_SYN ;;//Sample2
j7=j4+3*SAMPLE_SEQUENCE_LENGTH_SYN ;;//Sample3
lc0=SAMPLE_SEQUENCE_LENGTH_SYN-Path_Window_Length_syn-1;;
r7=0x0000ffff;;
#ifdef DEBUG_MODE2_FRAME_DATA
r7=0xffffffff;;
#endif
.align_code 4;
_debug_start_compare:
xr2=[j4+=1];;
#ifdef DEBUG_MODE2_FRAME_DATA
xr2=[ j31+FPGA_Slot_no ];;
xr2=pass r2;;
.align_code 4;
if xaeq;do,xr2=24;;
r2=dec r2;;
r1=4*SAMPLE_SEQUENCE_LENGTH_SYN;;
r2=r2*r1(I);;
#endif
r6=1;;
r3=[j5+=1];r2=r2+r6;;
r3=r3 and r7;;
comp(r3,r2);;
if NAEQ, jump _DEBUG_LINKPORT_ERROR;;
r3=[j6+=1];r2=r2+r6;;
r3=r3 and r7;;
comp(r3,r2);;
if NAEQ, jump _DEBUG_LINKPORT_ERROR;;
r3=[j7+=1];r2=r2+r6;;
r3=r3 and r7;;
comp(r3,r2);;
if NAEQ, jump _DEBUG_LINKPORT_ERROR;;
.align_code 4;
_DEBUG_LINKPORT_COMP:
r3=[j4+=1];r2=r2+r6;;
r3=r3 and r7;;
comp(r3,r2);;
if NAEQ, jump _DEBUG_LINKPORT_ERROR;;
r3=[j5+=1];r2=r2+r6;;
r3=r3 and r7;;
comp(r3,r2);;
if NAEQ, jump _DEBUG_LINKPORT_ERROR;;
r3=[j6+=1];r2=r2+r6;;
r3=r3 and r7;;
comp(r3,r2);;
if NAEQ, jump _DEBUG_LINKPORT_ERROR;;
r3=[j7+=1];r2=r2+r6;;
r3=r3 and r7;;
comp(r3,r2);;
if NAEQ, jump _DEBUG_LINKPORT_ERROR;;
.align_code 4;
jump _DEBUG_LINKPORT_RIGHT;;
.align_code 4;
_DEBUG_LINKPORT_ERROR:
xr0=1;;
#ifdef DEBUG_AD3
[ j31 + Stop_Linkport_AD3]=xr0;; //stop signal
#endif
#ifdef DEBUG_AD1
[ j31 + Stop_Linkport_AD1 ]=xr0;;
#endif
.align_code 4;
nop;nop;nop;lc0=0;;
.align_code 4;
jump run_error;;
.align_code 4;
jump _DEBUG_LINKPORT_ERROR;;
.align_code 4;
_DEBUG_LINKPORT_RIGHT:
.align_code 4;
if nlc0e, jump _DEBUG_LINKPORT_COMP;;
.align_code 4;
jump _ONE_INTR_END;;
#endif
//end of DEBUG_LINKPORT///////////////////////////////////////////
///////////////////////////function body here////////////////////////////////////
#ifdef DEBUG_GEN_DATA
//generate antenna data for debug BEGIN
//step1 : normalization;
// already use matlab to normalization;
j4=I1;;
k4=Q1;;
j5=IQ1;;
r0=[j4+=1];r4=[k4+=1];;
r8=0xffff0000;r7=r7 xor r7;;
r6=2147483647.00;;//2^31-1
lc0=1152;;
.align_code 4;
start_data_change:
//step2 : combine to packed 16Q 16I;
fr0=r0*r6;;
fr4=r4*r6;;
r1=fix fr0;;
r3=fix fr4;;
r4=r3 and r8; r0=lshift r1 by -16;;//fetch the high 16 bits
r4= r4 or r0;;// I Q combination;
[j5+=1]=xr4;;
r0=[j4+=1];r4=[k4+=1];;
if nlc0e, jump start_data_change;;
//generate antenna data for debug END
#endif //endif DEBUG_GEN_DATA
///////////////////////////////////////////////
///compare linkport mode to jump////////////
xr0= [ j31+linkport_mode_bak ];;
xr1=2;;
comp(r0,r1);;
.align_code 4;
if xaeq,jump _move_data_to_next_slot;;
//mode 1
/////////////////////move this frame tail data to the next frame Head/////////
.align_code 4;
_move_data_to_next_frame:
j4=[ j31+Pointer0 ];;//this frame data ;
j4=j4+SAMPLE_SEQUENCE_TAIL_OFF;;//this frame data tail;
lc0=(Path_Window_Length-16)/4; j5=[ j31+Pointer1 ];;//the next frame data ;
j6=j4+0x10000; k4=j5;;
j7=j4+SAMPLE_SEQUENCE_LENGTH;;
j8=j4+0x10000+SAMPLE_SEQUENCE_LENGTH;;
xr3:0=q[j4+=4]; k6=k4+0x10000;;
xr7:4=q[j6+=4];; k7=k4+SAMPLE_SEQUENCE_LENGTH;;
xr11:8=q[j7+=4];; k8=k4+0x10000+SAMPLE_SEQUENCE_LENGTH;;
xr15:12=q[j8+=4];;
.align_code 4;
_move_data:
q[k4+=4]=xr3:0;xr3:0=q[j4+=4];;
q[k6+=4]=xr7:4;xr7:4=q[j6+=4];;
q[k7+=4]=xr11:8;xr11:8=q[j7+=4];;
.align_code 4;
if nlc0e,jump _move_data;q[k8+=4]=xr15:12;xr15:12=q[j8+=4];;
.align_code 4;
_MOVE_DATA_END:
/////////////////////move end///////////////////////////////////////
// a Floating32 complex conjute multiple.
//r11=1.0;;r10=2.0;;//a=r11 + j* r10
//xr13=3.0;;xr12=4.0;;//b=r13 + j* r12
//yr12=xr13;;
//yr13=xr12; fr16=r10*r12;;
//fr17=r11*r13;;
//fr18=r16+r17,fr19=r16-r17;;// Real=xfr18,Imag=yfr19;
//two codes corr with one frame ant-data
//.align_code 4;
//_test_xcorrs:
//r31=1;;
.align_code 4;call _xcorrs_two_codes_one_frame;;
nop;;
//到此為止,x路得到一個峰,y路得到一個峰.
nop;;
.align_code 4;jump _NOT_SYNC;;
.align_code 4;
_SYNC:
//如果已經搜到一個符合條件的碼字,下面接連5幀都應該繼續匹配該碼字以確認.
//這樣x路碼字=已搜索到的碼字;y路碼字=未搜索的碼字.
//xr31 is the sync linkport_timing;
//config linkport_timing
[ j31 + linkport_timing ]=xr31;;
//config SYNC signal to EQU DSP
//change intr to 2 symbol:
//change linkport :
#ifdef DEBUG_AD3
xr0=1;;
[ j31 + Stop_Linkport_AD3]=xr0;;
#endif
xr0=2;;
[ j31+ LINKPORT_MODE ]=xr0;;
[ j31+ linkport_mode_bak ]=xr0;;
.align_code 4;jump _LOAD_TCB_TO_RECEIVE_DATA(NP);;
//give a signal to start AFC:
.align_code 4; jump _ONE_INTR_END(NP);;
.align_code 4;
_NOT_SYNC:
.align_code 4; jump _ONE_INTR_END(NP);;
//if mode 2:
.align_code 4;
_move_data_to_next_slot :
j4=[ j31+Pointer0 ];;//this frame data ;
j4=j4+SAMPLE_SEQUENCE_TAIL_OFF_SYN;;//this frame data tail;
lc0=Path_Window_Length_syn/4; j5=[ j31+Pointer1 ];;//the next frame data ;
j6=j4+SAMPLE_SEQUENCE_LENGTH_SYN; k4=j5;;
j7=j4+2*SAMPLE_SEQUENCE_LENGTH_SYN;;
j8=j4+3*SAMPLE_SEQUENCE_LENGTH_SYN;;
xr3:0=q[j4+=4]; k6=k4+SAMPLE_SEQUENCE_LENGTH_SYN;;
xr7:4=q[j6+=4];; k7=k4+2*SAMPLE_SEQUENCE_LENGTH_SYN;;
xr11:8=q[j7+=4];; k8=k4+3*SAMPLE_SEQUENCE_LENGTH_SYN;;
xr15:12=q[j8+=4];;
.align_code 4;
_move_slot_data:
q[k4+=4]=xr3:0;xr3:0=q[j4+=4];;
q[k6+=4]=xr7:4;xr7:4=q[j6+=4];;
q[k7+=4]=xr11:8;xr11:8=q[j7+=4];;
.align_code 4;
if nlc0e,jump _move_slot_data;q[k8+=4]=xr15:12;xr15:12=q[j8+=4];;
//check AFC_enable to start AFC
.align_code 4;
_ONE_INTR_END:
j0=[ j31 + Pointer0 ];;
j1=[ j31 + Pointer1 ];;
[ j31 + Pointer0 ] = j1 ;; //change pointer
[ j31 + Pointer1 ] = j0 ;; //change pointer
.align_code 4;
jump _one_intr ;;
//////////////////////////////////////////////////////////////////////////////
//*********************************************************************
ISR:
//*********************************************************************
irq0_svr:
.align_code 4;
[j27+=4]=cjmp ; [k27+=4]=yr0 ;;
[j27+=4]=j31 ; [k27+=4]=k31 ;;
q[j27+=4]=xr31:28; q[k27+=4]=yr31:28;;
q[j27+=4]=xr3:0 ; q[k27+=4]=yr3:0 ;;
q[j27+=4]=j3:0 ; q[k27+=4]=k3:0 ;;
yr0=[ j31 + int_counter ];;
yr0=inc r0;;
nop;;
[ j31 + int_counter ] = yr0;;
[ j31 + rpt_dsp3_watch_in_fpga ] = yr0 ;;
btgl_Flag:
yr0=[ j31 + int_counter ];;
yr1=0x1f;;
j0=[j31+linkport_mode_bak ];;
comp(j0,1);;
.align_code 4;
if jeq, jump _led_mode_1;;
yr1=0x1ff;;
.align_code 4;
_led_mode_1:
yr2=r0 and r1;;
yr3=0 ;;
ycomp(r2,r3);;
.align_code 4;
if nyaeq,jump btgl_Flag_end(np);;
yr0 = FLAGREG;;
yr0 = btgl r0 by FLAGREG_FLAG3_OUT_P;;
flagreg = yr0;;
btgl_Flag_end:
j27=j27-4; k27=k27-4;;
j3:0=q[j27+=-4]; k3:0=q[k27+=-4];;
xr3:0=q[j27+=-4]; yr3:0=q[k27+=-4];;
xr31:28=q[j27+=-4]; yr31:28=q[k27+=-4];;
j31= [j27+=-4]; k31= [k27+=-4];;
cjmp= [j27+= 0]; yr0= [k27+= 0];;
.align_code 4;
rti(abs)(np);;
dma0_svr:
dma1_svr:
.align_code 4;
nop;;
nop;;
nop;;
nop;;
rti(abs)(np);;
//*********************************************************************
.align_code 4;
run_error:
//*********************************************************************
xr0=INT_IRQ0;;
xr1=0xffffffff;;
xr0=r0 xor r1;;
xr2=IMASKH;;
xr2=r2 and r0;;
IMASKH=xr2;;
xr3=IMASKH;;
xr3=xr3;; // disable slot_INT
xr0=r0 xor r0;;
LRCTL0=xr0;;
LRCTL1=xr0;;
nop;;
nop;; // break here
nop;; nop;; nop;;idle ;;
nop;;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -