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

📄 ss_syn.asm

📁 时域量化码字,基于时间间隙和DSP的信道编程
💻 ASM
字号:
#include "SS_SYN.h"
//#define DEBUG_LINKPORT

#define DEBUG_AD3
//#define DEBUG_AD1
#define DEBUG_COMP_WITH_TH

///////////////////////extern function declaration////////////////////////////////
.extern _system_func;
.extern _null_func;
.extern _wait_cycles;

.extern JStack;
.extern KStack; 
.extern int_counter;
.extern Save_INTCTL;

#ifdef DEBUG_GEN_DATA
	.extern I1;
	.extern Q1;
	.extern IQ1;
#endif

.extern Pointer0;
.extern Pointer1;
.extern Ant_Data0;
.extern Ant_Data1;
.extern Ant_Data2;
.extern Ant_Data3;
.extern	Receive_Link0_TCB;
.extern	Receive_Link1_TCB;
.extern	Receive_Link2_TCB;
.extern	Receive_Link3_TCB;
.extern q_time_code;
.extern xcorrs_result_X;
.extern xcorrs_result_Y;
.extern pmb_index;
.extern pmb_index_now_pointer;
////////////////////
.extern result;
.extern maxi;
.extern counter1;
.extern counter2;
.extern in_addr;
.extern out_addr;
.extern antenna;
///////////////////
.extern pre_code_exist;
.extern pre_code_index;
////////////////////////////////////////extern functions
.extern _user_initial;
.extern _change_linkport_TCB;
.extern _debug_linkport;
.extern _xcorrs_two_codes_one_frame;
.extern _xcorrs_one_code_8_chips;
.extern _move_data_to_next_frame;
////////////////////////////////////////



//*********************************************************************//

.section program;
_power_up: 
//.align_code 4; jump _xcorrs_two_codes_one_frame;;
//*********************************************************************//
  
 //-------------   base initial -----------------
 
 _DISABLE_HARDWARE_INTERRUPTS:

 XR0=0;;
 IMASKH=XR0;;
 IMASKL=XR0;;
 XR1=IMASKL;;
 XR1=XR1;;  

 //xr0=0x381041;;
 xr0=0x3819e7;;
 //xr0=0x381067;;
 syscon= xr0;;
 xr0=r0 xor r0;;
 sdrcon=xr0;;
 
 
 j0=pRead_Enable_clear;;
 k0=1;;
 [j0+j31]=k0;;
 j0=pRead_End;;
 [j0+j31]=k0;;

 

 j27=JStack;;
 k27=KStack;;
.align_code 4;
 call _system_func;q[J27+4]=J27:24;q[k27+4]=k27:24;;
 nop;;
 
 .align_code 4;
 call _null_func;;
 
.align_code 4;
_SET_INTCTL_REG:

 R0=0X0;;
 INTCTL=xR0;[ j31 + Save_INTCTL ]=yR0;;
 
 
_ENABLE_HARDWARE_INTERRUPTS:
 
 SQCTLST=SQCTL_GIE;;     
 nop;;
 
 /////////////////////for debug////////////////////////////
 
 		xmr1:0=r1:0;;
 		xr0=compact mr1:0;;
			
 ///////////////////////////////////////////////////////////
 //-------------   user initial ------------------
 
  
_after_reset: 

 XR0=0;;
 IMASKH=XR0;;
 IMASKL=XR0;;
 XR1=IMASKL;;
 XR1=XR1;;
 
 j27=JStack;;
 k27=KStack;;
 
 
 _Disable_Linkport_Input_first:
     
	r0=1;;
	#ifdef DEBUG_AD1
 	[ j31 + Stop_Linkport_AD1 ]=xr0;;
 	#endif
 	#ifdef DEBUG_AD3
 	[ j31 + Stop_Linkport_AD3 ]=xr0;;
 	#endif
 	//配置SS
 	[j31+SS_IND_ADDRESS]=xr0;;
 	//j4 = 320000*2 ;; 
	j4=1000;;
  	.align_code 4;
 	call _wait_cycles;;
  
 
 
 nop;;
 nop;;
.align_code 4;
call _user_initial;;                                    // _initial_Interface                     
                                                         //_initial_Received_TCB
                     
.align_code 4;                                                         
call _change_linkport_TCB;;                                                         
 .align_code 4;


                       
//-----------------  for debug function ----------------------- 
 
 
 //--------------  sys  initial -------------------
 
 _SET_INTERRUPT_VECTOR:
 
 j0=irq0_svr;;
 IVIRQ0=j0;;
 j0=dma0_svr;;
 IVDMA0=j0;;
 j0=dma1_svr;;
 IVDMA1=j0;;
 
 _UNMASK_INTERRUPT:
 
 xr0=IMASKH;;
 XR1=INT_IRQ0;;
 XR0=R0 OR R1;;
 IMASKH=XR0;;
 xr0=IMASKL;;
 XR1=INT_DMA0|INT_DMA1;;
 XR0=R0 OR R1;;
 IMASKL=XR0;;
 
_INITIAL_LINKPORT: 

 xr0=r0 xor r0;;
 LRCTL0=xr0;;
 LRCTL1=xr0;;
 nop;;nop;;nop;;nop;;nop;;
 xr0=LRCTL_REN  |  LRCTL_RDSIZE  ;;
 LRCTL0=xr0;;
 LRCTL1=xr0;;
 
_enable_flag_out:
             
       
 FLAGREGST= FLAGREG_FLAG3_EN;;
 xr0 = FLAGREG;;
 xr0 = bset r0 by FLAGREG_FLAG3_EN_P;;
 flagreg = xr0;;  
 
 yr0 = FLAGREG;;
 yr0 = btgl r0 by FLAGREG_FLAG3_OUT_P;;
 flagreg = yr0;;

nop;;nop;;nop;; idle;;

 /////////////////////////////////first load data from linkport////////
 		r0=1;;
 		[j31+LINKPORT_MODE ]=xr0;;
 		[j31+linkport_mode_bak ]=xr0;; 
 		r0=0;;
 		[j31+linkport_timing ]=xr0;; 		
 		[j31+Bts_sim_timing ]=xr0;;
 		r0=1;;
 		#ifdef DEBUG_AD3
		[ j31 + Stop_Linkport_AD3]=xr0;; //stop signal		
		#endif
		#ifdef DEBUG_AD1		
		[ j31 + Stop_Linkport_AD1 ]=xr0;;
		#endif
		
  xr0=[j31+bs_frame_timing_rpt];;
  xr0=[j31+bs_frame_timing_rpt];;
  xr0=[j31+bs_frame_timing_rpt];;
  xr0=[j31+bs_frame_timing_rpt];;
  xr0=[j31+bs_frame_timing_rpt];;
  xr0=[j31+bs_frame_timing_rpt];;
  xr0=[j31+bs_frame_timing_rpt];;
  xr0=[j31+bs_frame_timing_rpt];;
  
  xr1=(32-(96/8)-1)*4;;//ok shift 0x40
  
  xr0=r0+r1;;
  xr3=28560*4;;
  xr4=0;;
  xcomp(r0,r3);;
  if nxalt;do, xr0=r0-r3;;
   xcomp(r0,r4);;
  if xalt;do, xr0=r0+r3;;
  
  //xr0=0;;
  //[j31+linkport_timing ]=xr0;;
  nop;; nop;; nop;;idle ;;
 nop;; nop;; nop;;idle ;;
 
 
 
 
 clear_data_in_Linkport_Buffer:
 
          xlr3:2=r3:2 xor r3:2;;
 		  xlr1:0=r1:0 xor r1:0;;
 
 		  DC8 = xr3:0;;   
 		  DC9 = xr3:0;;
 
 	      xr0=Ant_Data0;;
  	 	  xr1=SAMPLE_SEQUENCE_LENGTH<<16|4;;
  	 	  xr2=0;;
  	 	  xr3=TCB_INTMEM|TCB_QUAD|TCB_DMA8DEST;;               
          DC8 = xr3:0;;
          
          xr0=Ant_Data0+SAMPLE_SEQUENCE_LENGTH;;
  	 	  xr1=SAMPLE_SEQUENCE_LENGTH<<16|4;;
  	 	  xr2=0;;
  	 	  xr3=TCB_INTMEM|TCB_QUAD|TCB_DMA9DEST;;               
          DC9 = xr3:0;;
      
 clear_data_in_Linkport_Buffer_end:
  
 		  nop;; nop;; nop;;idle ;;
		  nop;; nop;; nop;;idle ;;
		  
		  j0=[j31+debug_linkport];;
		  comp(j0,0);;
		  .align_code 4; if jeq, jump clear_data_in_Linkport_Buffer_end;;
		  
 	
  
.align_code 4; 
 _LOAD_TCB_TO_RECEIVE_DATA :    		 
          xlr3:2=r3:2 xor r3:2;;
 		  xlr1:0=r1:0 xor r1:0;; //clear control words
 		  DC8 = xr3:0;;   
 		  DC9 = xr3:0;;
		  nop;;
 		  nop;;
 		  
 		  j0=[j31+linkport_mode_bak ];;
 		  comp(j0,1);;
 		  .align_code 4;
 		  if njeq, jump _tcb_mode_2;;
 		  
 		  .align_code 4;
 		  _tcb_mode_1: 
 		   
			  j0=Ant_Data0;;
			  j1=Ant_Data1;;  
			  [ j31 + Pointer0 ] = j0 ;;   
			  [ j31 + Pointer1 ] = j1 ;;

	 		  j0=Receive_Link1_TCB;;
			  xr3:0 = q[ j0 + j31 ];;//fetch the control words		  
			  DC9 = xr3:0;;		//write control words
	 		  nop;;        
	 		  
	 		  j0=Receive_Link0_TCB;;
			  xr3:0 = q[ j0 + j31 ];;//fetch the control words		  
	 		  DC8 = xr3:0;;  	//write control words
	 		  nop;;
 		  .align_code 4;
 		  jump _tcb_end;;
 		  
 		  .align_code 4;
 		  _tcb_mode_2: 
 		  /*
 		  	  j0=Ant_Data2;;
			  j1=Ant_Data3;;  
			  [ j31 + Pointer0 ] = j0 ;;   
			  [ j31 + Pointer1 ] = j1 ;;
	 	
			  j0=Receive_Link3_TCB;;
			  xr3:0 = q[ j0 + j31 ];;//fetch the control words		  
			  DC9 = xr3:0;;		//write control words
	 		  nop;;        
	 		  
	 		  j0=Receive_Link2_TCB;;
			  xr3:0 = q[ j0 + j31 ];;//fetch the control words		  
	 		  DC8 = xr3:0;;  	//write control words
	 		  nop;;
 		  */
 		  .align_code 4;
 		  _tcb_end: 
 		  
		  xr0 = 1;;
		#ifdef DEBUG_AD3
		[ j31 + Start_Linkport_AD3]=xr0;; 		
		#endif
		#ifdef DEBUG_AD1		
		[ j31 + Start_Linkport_AD1 ]=xr0;;
		#endif
		  nop;;nop;;nop;;idle;;		  
_LOAD_TCB_TO_RECEIVE_DATA_END:

	  		  
 		 
//loop and wait interrupt
.align_code 4;
_one_intr:
	nop;;nop;;nop;;idle;;

///////////////DEBUG_LINKPORT//////////////////////////////////
	
	#ifdef DEBUG_LINKPORT
	.align_code 4;call _debug_linkport;;
	nop;nop;nop;nop;;			// break here	
	.align_code 4;jump _ONE_INTR_END(NP);;
	#endif 
//end of DEBUG_LINKPORT///////////////////////////////////////////

	///compare linkport mode to jump////////////
	xr0= [ j31+linkport_mode_bak ];;	
	xr1=2;;
	comp(r0,r1);;
	.align_code 4;
	if xaeq,jump _RUN_IN_MODE_2;;
	
	//////////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////
	//////if mode 1,必须做初始同步////////////////////////////////
	/////////////////////move this frame tail data to the next frame Head/////////
	.align_code 4;
	call _move_data_to_next_frame ;;			
	
	
	//首先判断是否有一个"有希望"的码字;如果已经有一个有希望的码字
	//那么k4=该码字,这一帧继续匹配它来确认5帧;从pmb_index中在读取一个。
	j0=[ j31+ pmb_index_now_pointer ] ;;//现在匹配到了哪一个码字?
	j1= pmb_index_end;;
	comp(j0,j1);;
	if njle; do,j0=j1-8;;//如果指针越界,回到最开始的地方.
	r4=q_time_code;;//this is the head address of the table of code 	
	r0=[ j31+ pre_code_exist ];;
	r1=1;
	xcomp(r0,r1);;
	.align_code 4;
	if nxaeq ,jump _no_pre_code;;
	
	r0=[ j31+ pre_code_index ];;//代号??
	r3=Q_TIME_CODE_LEN;;//Q_TIME_CODE_LEN=36
	r1=[j0+=1];;
	r0=r0*r3(I);;
	r0=r4+r0;;
	k4=xr0;;
	r1=r1*r3(I);;
	r1=r4+r1;;
	k5=xr1;[ j31+pmb_index_now_pointer]=j0;;//同时更新pointer,k5为现在参与匹配的码子的首地址??
	.align_code 4; jump _start_xcorr;;
	//在pmb_index指向中读取两个码字index

⌨️ 快捷键说明

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