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

📄 main_zkf.c

📁 TD-SCDMA的工作原理,工作过程以及信号的形成
💻 C
📖 第 1 页 / 共 4 页
字号:
void Calculate(void)
{
	//eeprom_write(0,1);
	//eeprom_read(0);
}



//////////////////////衰减函数///////

void Att(unsigned char channel, unsigned char data)
{
  
  
	if (channel==1||channel==2||channel==3)//上行
	{
		SendPortD (control_att_up,data);
	}
    else if (channel==0||channel==4||channel==5||channel==6)//下行
	{
		SendPortD (control_att_dn,data);
	}
	
}

void SendPortD(unsigned char control_choice,unsigned char data) //FPGA与CPU之间的一般数据传递
{
	PORTD=control_choice|(data<<3);		
}	

///////////////串口接收处理///////////////
void uart_rec_process (void)// 模拟发送设置数据包0x7E,0x03,0xff, 0x01, 0x04,0x44,0x00,Forward_dn,0x7E
{                           // 模拟发送查询数据包0x7E,0x02,0xff, 0x01, 0x04,0x44,0x00,Forward_dn,0x7E
	
unsigned int n;	
	
	if(RC_flag ==1)	//串口接收中断处理结束
{
	RC_flag = 0;
	  
	  if(package_data_count == 0)
	    {
 	     if(uart_rec_data[0]==0x7E) //开始数据包
		    {
      	package_data_count = 1;
      	uart_send_data[8] = uart_rec_data[0];
		    } 
		   else
		    {
      	package_data_count = 0;
      	uart_send_data[8] =0;
		    } 		     
		  }
		else if(package_data_count == 1)
		  {  
		  	
		  	if(uart_rec_data[0]==0x02) //即出现1xxxxxxx,对本系统的读操作,即查询
		  	  {
		  	   r_w = 1;  //对本系统读标志
		  	   uart_send_data[7] =uart_rec_data[0];
		  	   package_data_count ++;
		  	   
		  	  } 
		  	else if (uart_rec_data[0]==0x03)  //设置
		  	  {
		  	   r_w = 0;  //对本系统写标志	
		  	   uart_send_data[7] =uart_rec_data[0];	  	  	
		  	   package_data_count ++;
		  	   
		  	  }
		  	else
		  	 {
		  	 	package_data_count = 0;
		  	 	uart_send_data[7]=0;
		  	 	r_w = 0xff;
		  	 	}   	  	      
		  }	
		  
		else if(package_data_count == 2)
		  { 
		  	 
		  	if((uart_rec_data[0]==0xFF)&&(r_w==0)) 
          {
           //uart_send_data[6] =0;	  	  	
		  	   package_data_count ++;	
          }
		  	else if((uart_rec_data[0]==0xFF)&&(r_w==1)) //上位机读取时也是FF
          {
           //uart_send_data[6] =0;	  	  	
		  	   package_data_count ++;	
          }
        else
         {
 		  	 	package_data_count = 0;
		  	 	uart_send_data[6] =0xaa;
         	}
		  }	
		  
		else if(package_data_count == 3) 		
		  {  
  	     data_width = uart_rec_data[0]; 
  	     uart_send_data[5] =uart_rec_data[0];  //记住数据字节数
  	     if(data_width > 2)     
  	       {
 		  	   	uart_send_data[6] =0xaa; 	  //操作字节数超支     	 
  	       	 data_width = 0;
  	       	}  
		  	package_data_count ++;
		  	
		  }			  
		  
		else if((package_data_count == 4)||(package_data_count == 5)) 
		  {
	  	   package_data_count++;         
		     uart_send_data[9-package_data_count]= uart_rec_data[0];

		  }
		  
/*////////////////////////////----------------((package_data_count == 6) ||(package_data_count == 7))开始-----------------///////////////////////////////////*/		  
		 
		 else if((package_data_count == 6) ||(package_data_count == 7))		
		  { 
	  	   package_data_count++;
	  	   
/*////////////////////////////----------------读开始-----------------///////////////////////////////////*/		  	  
	  	   
		  	if(r_w==1)  //读
		  	  { 
////////////这里是Forward_dn开始/////////////////// 	  		  	  	
		  	  	if((uart_send_data[4]==0x04)&&(uart_send_data[3]==0x44))
		  	  	  {
		  	  	  	uart_send_data[2]= 0;
		  	  	  	uart_send_data[1]= Forward_dn; //只有一个字节的高位为全0		  	  	  	
		  	   address_right= 1;
		  	      }
 	
//////////////////////这里是Forward_dn截止////////////////

////////////这里是Backward_dn开始/////////////////// 	  		  	  	
		  	 else	if((uart_send_data[4]==0x04)&&(uart_send_data[3]==0x45))
		  	  	  {
		  	  	  	uart_send_data[2]= 0;
		  	  	  	uart_send_data[1]= Backward_dn; //只有一个字节的高位为全0		  	  	  	
		  	   address_right= 1;
		  	      }

//////////////////////这里是Backward_dn截止////////////////

////////////这里是控制上下行通道关闭开始/////////////////// 	  		  	  	
		  	  else if((uart_send_data[4]==0x04)&&(uart_send_data[3]==0x46))
		  	  	  {
		  	  	  	uart_send_data[2]= 0;
		  	  	  	uart_send_data[1]= switch_in_shut; //只有一个字节的高位为全0		  	  	  	
		  	   address_right= 1;
		  	      }

//////////////////////这里是控制上下行通道关闭截止////////////////
          
          else 
             {
		  	   address_right= 0;   //读取数据地址错误          	
             }

		  	  }//(r_w==1) //读
		  	  
/*////////////////////////////----------------读结束-----------------///////////////////////////////////*/
			  	  
/*////////////////////////////----------------写开始-----------------///////////////////////////////////*/	

		  	  
		  	else if(r_w==0) //写
		  	  { 

		  	  		uart_send_data[9-package_data_count]=uart_rec_data[0]; //只有一个字节的高位为全0
		  	  	  setup_data[8-package_data_count]=uart_rec_data[0];
////////////这里是Forward_dn开始/////////////////// 	  
		  	if((uart_send_data[4]==0x04)&&(uart_send_data[3]==0x44))
		  	   {
		  	   	if(package_data_count == 7)
		  	   	  eeprom_write(0x19,0); //写入E2PROM
		  	   	else if(package_data_count==8)
		  	   	  {
		  	   	  eeprom_write(0x19,uart_rec_data[0]); //写入E2PROM		
		  	   	  Forward_dn= eeprom_read(0x19);		  	   	    	   	
		  	   	  if(Forward_dn == uart_rec_data[0])
		  	  	  	  {
		  	  	  	  uart_send_data[6] =0;
		  	  	  	  SendPortD (control_bias,Forward_dn);
		  	  	  	  }
		  	  	  else
		  	  	  	  {
		  	  	  	  uart_send_data[6] =0xaa;
		  	  	  	  }
		  	   	  } 
		  	   address_right= 1;
		  	   }
		  	  	  
//////////////////////这里是Forward_dn截止////////////////
////////////这里是Backward_dn开始/////////////////// 	  
		  	else if((uart_send_data[4]==0x04)&&(uart_send_data[3]==0x45))
		  	   {
		  	   	if(package_data_count == 7)
		  	   	  eeprom_write(0x20,0); //写入E2PROM
		  	   	else if(package_data_count==8)
		  	   	  {
		  	   	  eeprom_write(0x20,uart_rec_data[0]); //写入E2PROM		
		  	   	  Forward_dn= eeprom_read(0x20);		  	   	    	   	
		  	   	  if(Forward_dn == uart_rec_data[0])
		  	  	  	  {
		  	  	  	  uart_send_data[6] =0;
		  	  	  	  SendPortD (control_backward_bias,Backward_dn);
		  	  	  	  }
		  	  	  else
		  	  	  	  {
		  	  	  	  uart_send_data[6] =0xaa;
		  	  	  	  }
		  	   	  } 
		  	   address_right= 1;
		  	   }
  		  	  	  
//////////////////////这里是Backward_dn截止////////////////

////////////这里是控制上下行通道关闭开始/////////////////// 	  
		  	else if((uart_send_data[4]==0x04)&&(uart_send_data[3]==0x46))
		  	   {
		  	   	if(package_data_count == 7)
		  	   	  eeprom_write(0x21,0); //写入E2PROM
		  	   	else if(package_data_count==8)
		  	   	  {
		  	   	  eeprom_write(0x20,uart_rec_data[0]); //写入E2PROM		
		  	   	  switch_in_shut= eeprom_read(0x21);		  	   	    	   	
		  	   	  if((switch_in_shut == uart_rec_data[0])&&((switch_in_shut == 0x00)||(switch_in_shut == 0xff)))
		  	  	  	  {
		  	  	  	  uart_send_data[6] =0;
		  	  	  	  SendPortD (control_no_detect,switch_in_shut);
		  	  	  	  }
		  	  	  else
		  	  	  	  {
		  	  	  	  uart_send_data[6] =0xaa;
		  	  	  	  }
		  	   	  } 
		  	   address_right= 1;
		  	   }
	  	  	  
//////////////////////这里是控制上下行通道关闭截止////////////////
		  	else
		  	  {
		  	  	address_right = 0; //写入数据地址错误 
		  	  }
		  	  
		  	  	
		  	  }	//(r_w==0) //写

/*////////////////////////////----------------写结束-----------------///////////////////////////////////*/
		  	  	  	  
		  } //(package_data_count == 6) ||(package_data_count == 7)	
		  
/*////////////////////////////----------------((package_data_count == 6) ||(package_data_count == 7))结束-----------------///////////////////////////////////*/		  
		  
		  
		 else if(package_data_count == 8) 		
		  {
		  	
 	     if(uart_rec_data[0]==0x7E) //结束数据包
		    {

      	uart_send_data[0] = 0x7E;
		    } 
		   else
		    {

      	uart_send_data[6] =0xaa;
      	uart_send_data[0] = 0x7E;
		    } 
		    	
      for(n=0;n<9;n++)//p[n]!=0xff;n++)
           {
           while (TX1IF== 0);        // TXIF=0表示发送缓冲区不为空
           TXREG1 = uart_send_data[8-n];
           }
        while (TX1IF== 0);        // TXIF=0表示发送缓冲区不为空
        
        package_data_count = 0;  	  	  
		  }

		  
		 while (TX1IF== 0);        //Only for test 
  TXREG1=package_data_count;  //Only for test
     while (TX1IF== 0);        //Only for test
       
} // if(RC1IF==0)
	
	
	
	}





/******************************需要设置的参量**********************************************/    
//同步开关前沿量(前沿提前量) Forward_dn,读写整数(1)
//同步开关后沿量 (后沿延时量)Backward_dn,读写整数(1)
//下行输出过功率门限(启控电平  下行输出) Ts0_threhold,Ts4_threhold,Ts5_threhold,Ts6_threhold,读写有符号整数(2)
//上行输出过功率门限 (启控电平  上行输出)Ts1_threhold,Ts2_threhold,Ts3_threhold,读写有符号整数(2)
//
//上行人为衰减(上行衰减)Att_manual_up,读写整数(1)
//下行人为衰减(下行衰减)Att_manual_dn,读写整数(1)
//
//启动门限量 Open_threhold_dn,浮点数 ,读写(单位伏特)
//
//末级功放偏压 A1,A2,B1,B2, 写(滑条)浮点数
//
//末级功放偏压显示 A1_latch,A2_latch,B1_latch,B2_latch, 读(数据框)浮点数
//下行输入功率电平:Ts0_latch, Ts4_latch,Ts5_latch,Ts6_latch,只读有符号整数(2)
//下行输出功率电平:Ts0_out_latch, Ts4_out_latch,Ts5_out_latch,Ts6_out_latch,只读有符号整数(2)
//上行输入功率电平:Ts1_latch, Ts2_latch,Ts3_latch,只读有符号整数(2)
//上行输出功率电平:Ts1_out_latch, Ts2_out_latch,Ts3_out_latch,只读有符号整数(2)
//
//下行实际增益 Gain_dn,只读浮点数
//下行驻波比值 SW_latch,只读浮点数
//
//电源电压  只读浮点数 (单位伏特)
//环境温度  只读浮点数
//末级温度  只读浮点数
/****************************************************************************/


⌨️ 快捷键说明

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