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

📄 port.c

📁 z85c30 DRIVER RUN ON PC104 PC AND VXWORKS SYSTERM.
💻 C
📖 第 1 页 / 共 5 页
字号:
				if(iportreceivebuffW[Tcom_number+1]!=iportreceivebuffR[Tcom_number+1]-1)
				{
					portreceivebuff[Tcom_number+1][iportreceivebuffW[Tcom_number+1]]=1;
					iportreceivebuffW[Tcom_number+1]++;
					if(iportreceivebuffW[Tcom_number+1]>=MAX_DATA)
						iportreceivebuffW[Tcom_number+1]=0;
				}
				else
				{}
				outp(commandport2,0x0);
				outp(commandport2,0x30);// Error Reset
			}
			else
			{
				if(iportreceivebuffW[Tcom_number+1]!=iportreceivebuffR[Tcom_number+1]-1)
				{
					portreceivebuff[Tcom_number+1][iportreceivebuffW[Tcom_number+1]]=0;
					iportreceivebuffW[Tcom_number+1]++;
					if(iportreceivebuffW[Tcom_number+1]>=MAX_DATA)
						iportreceivebuffW[Tcom_number+1]=0;
				}
				else
				{}
			}

			for(ifor1=0;ifor1<4;ifor1++)
			{
				if(iportreceivebuffW[Tcom_number+1]!=iportreceivebuffR[Tcom_number+1]-1)
				{
					portreceivebuff[Tcom_number+1][iportreceivebuffW[Tcom_number+1]]=0x7e;
					iportreceivebuffW[Tcom_number+1]++;
					if(iportreceivebuffW[Tcom_number+1]>=MAX_DATA)
						iportreceivebuffW[Tcom_number+1]=0;
				}
				else
				{}
			}
			//outp(commandport2,0x0);
			//outp(commandport2,0x30);// Error Reset
			//goto quit_interrupt;
			writedata_flag[Tcom_number+1]=0;
		}

		outp(commandport2,0x00);
		rr0=inp(commandport2);

		if((rr0&0x04)==0x0)               // Tx Buffer Empty;
		{
			outp(commandport2,0x0);
			outp(commandport2,0x28);
		};

		outp(commandport2,0x00);
		rr0=inp(commandport2);

		if((rr0&0x01)==0x0)	       // Rx character Available;
		{

		};
		outp(commandport2,0x0);
		outp(commandport2,0x10);
	}
    }
/////////////////data receive and send;
	outp(commandport1,0x03);                  //com4 receive;
	rr3=inp(commandport1);
	rr3=rr3&0x04;
	while(rr3==0x04)
	{
		recv_char=inp(dataport2);
		com_received_num[Tcom_number+1]++;

		if(iportreceivebuffW[Tcom_number+1]!=iportreceivebuffR[Tcom_number+1]-1)
		{
			portreceivebuff[Tcom_number+1][iportreceivebuffW[Tcom_number+1]]=recv_char;
			iportreceivebuffW[Tcom_number+1]++;
			if(iportreceivebuffW[Tcom_number+1]>=MAX_DATA)
				iportreceivebuffW[Tcom_number+1]=0;
			writedata_flag[Tcom_number+1]=1;
		}
		else
		{}
		outp(commandport1,0x03);
		rr3=inp(commandport1);
		rr3=rr3&0x04;
	}

	outp(commandport1,0x03);             //com4 send;
	rr3=inp(commandport1);
	rr3=rr3&0x02;
	while(rr3==0x02)
	{
		com_int_count[Tcom_number+1]++;
		if(iportsendbuffW[Tcom_number+1]!=iportsendbuffR[Tcom_number+1])
		{
			outp(dataport2,portsendbuff[Tcom_number+1][iportsendbuffR[Tcom_number+1]]);
			iportsendbuffR[Tcom_number+1]++;
			if(iportsendbuffR[Tcom_number+1]>=MAX_DATA)
				iportsendbuffR[Tcom_number+1]=0;
			sending[Tcom_number+1]=1;
			com_send_count[Tcom_number+1]++;
		}
		else
		{
		    if(Port_Set[Tcom_number+1][5]==0)
		    {
			sending[Tcom_number+1]=0;
		    }
		    else
		    {
		      if(sending[Tcom_number+1]!=0)
		      {
			sending[Tcom_number+1]++;
			if(sending[Tcom_number+1]>=1)
			  sending[Tcom_number+1]=0;
		      }
		    }
		    outp(commandport2,0x28);
		}
		outp(commandport1,0x03);
		rr3=inp(commandport1);
		rr3=rr3&0x02;
	}

//..............................end B;

	outp(commandport1,0x03);
	rr3=inp(commandport1);
	if(rr3!=0) goto handle3a;

	outp(commandport1,0x0);
	rr0=inp(commandport1);
	if((rr0 & 0x04)==0x04)
	{
		outp(commandport1,0x0);
		outp(commandport1,0x28);
	};

	outp(commandport2,0x0);
	rr0=inp(commandport2);
	if((rr0 & 0x04)==0x04)
	{
		outp(commandport2,0x0);
		outp(commandport2,0x28);
	};


	outp(commandport1,0x0);
	outp(commandport1,0xf8);

	outp(commandport1,0x0);
	outp(commandport1,0x10);

	enable();
	outp(intcommand1,0x20);
	outp(intcommand2,0x20);
}*/

void open_RTS(int Tport)
{
  int commandport;
  int dataport;
  int Tcom_number=6;
  Tcom_number=Tport+1;

    if(Tcom_number%2)
    {
	commandport=0x2d2+(Tcom_number-3)*2;
	dataport=0x2d3+(Tcom_number-3)*2;
    }
    else
    {
	commandport=0x2d0+(Tcom_number-4)*2;
	dataport=0x2d1+(Tcom_number-4)*2;
    }

    outp(commandport,0x05);        //WR5
    outp(commandport,0x6b);        //rts
}
void clear_RTS(int Tport)
{
  int commandport;
  int dataport;
  int Tcom_number=6;
  Tcom_number=Tport+1;

    if(Tcom_number%2)
    {
	commandport=0x2d2+(Tcom_number-3)*2;
	dataport=0x2d3+(Tcom_number-3)*2;
    }
    else
    {
	commandport=0x2d0+(Tcom_number-4)*2;
	dataport=0x2d1+(Tcom_number-4)*2;
    }
    outp(commandport,0x05);        //WR5
    outp(commandport,0x69);        //rts
}


void interrupt_zi_programe(int Tcom_number)
{
//    static int writedata_flag[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int commandport1;
int dataport1;
int commandport2;
int dataport2;

int ifor1;
char recv_char;

	disable();

	commandport1=0x2d2+(Tcom_number-3)*2;
	dataport1=0x2d3+(Tcom_number-3)*2;
	commandport2=0x2d0+(Tcom_number+1-4)*2;
	dataport2=0x2d1+(Tcom_number+1-4)*2;
	Tcom_number=Tcom_number-1;

handle3a:
    //********************************************//
    //==================CH: A=====================//
    //
    //
    //
    //begin


	if(Port_Set[Tcom_number][5]==1)
	{
		outp(commandport1,0x03);        //read WR3;
		rr3=inp(commandport1);

		if((rr3&0x20)==0x20)
		{
    //------------------------------//
    //-----------rxip---------------//
    //------------------------------//
	//read data;
			recv_char=inp(dataport1);
			com_received_num[Tcom_number]++;

			if(iportreceivebuffW[Tcom_number]!=iportreceivebuffR[Tcom_number]-1)
			{
				portreceivebuff[Tcom_number][iportreceivebuffW[Tcom_number]]=recv_char;
				iportreceivebuffW[Tcom_number]++;
				if(iportreceivebuffW[Tcom_number]>=MAX_DATA)
				iportreceivebuffW[Tcom_number]=0;
			}
	//------------------EOF-----------------//
			outp(commandport1,0x01);
			rr1=inp(commandport1);     //read RR1;

			if((rr1&0x80)==0x80)       //EOF
			{
				com_received_num[Tcom_number]--;
				com_received_num[Tcom_number]--;

	     //sync_recevie_7e[Tcom_number]=1;

				if((rr1&0x40)==0x40)      //CRC;
				{
		//crc_check_erro[Tcom_number]=1;
					if(iportreceivebuffW[Tcom_number]!=iportreceivebuffR[Tcom_number]-1)
					{
						portreceivebuff[Tcom_number][iportreceivebuffW[Tcom_number]]=1;

						iportreceivebuffW[Tcom_number]++;
						if(iportreceivebuffW[Tcom_number]>=MAX_DATA)
						iportreceivebuffW[Tcom_number]=0;
					}
					else
					{}
					outp(commandport1,0x0);
					outp(commandport1,0x30);// Error Reset
				}
				else
				{
					if(iportreceivebuffW[Tcom_number]!=iportreceivebuffR[Tcom_number]-1)
					{
						portreceivebuff[Tcom_number][iportreceivebuffW[Tcom_number]]=0;
						iportreceivebuffW[Tcom_number]++;
						if(iportreceivebuffW[Tcom_number]>=MAX_DATA)
						iportreceivebuffW[Tcom_number]=0;
					}
					else
					{}
				}

				for(ifor1=0;ifor1<4;ifor1++)
				{
					if(iportreceivebuffW[Tcom_number]!=iportreceivebuffR[Tcom_number]-1)
					{
						portreceivebuff[Tcom_number][iportreceivebuffW[Tcom_number]]=0x7e;
						iportreceivebuffW[Tcom_number]++;
						if(iportreceivebuffW[Tcom_number]>=MAX_DATA)
						iportreceivebuffW[Tcom_number]=0;
					}
					else
					{}
				}
			};
	//-------------------------End EOF-----

       //------------------------------//
       //rxip's txip;
       //------------------------------//
			if((rr3&0x10)==0x10)
			{
				if(iportsendbuffW[Tcom_number]!=iportsendbuffR[Tcom_number])
				{
					outp(dataport1,portsendbuff[Tcom_number][iportsendbuffR[Tcom_number]]);
					iportsendbuffR[Tcom_number]++;
		//if(iportsendbuffR[Tcom_number]>=MAX_DATA)
					if(iportsendbuffR[Tcom_number]>=200)
					iportsendbuffR[Tcom_number]=0;
					sending[Tcom_number]=1;
					com_send_count[Tcom_number]++;
				}
				else
				{
					//sending[Tcom_number]=0;
					if(Port_Set[Tcom_number][5]==0)
					{
						sending[Tcom_number]=0;
					}
					else
					{
						if(sending[Tcom_number]!=0)
						{
							sending[Tcom_number]++;
							if(sending[Tcom_number]>=3)//+++3
							sending[Tcom_number]=0;
						}
					}
					outp(commandport1,0x28);
				}
				com_int_count[Tcom_number]++;
			}
       //-----------end rxip's txip;

       //--------------------------------//
       //read WR3 again
       //
       //--------------------------------//
			outp(commandport1,0x03);        //read WR3;
			rr3=inp(commandport1);
       //-----------------------------//
       //
       //-----------------------------//
		       if((rr3&0x10)==0x10)
		       {
				if(iportsendbuffW[Tcom_number]!=iportsendbuffR[Tcom_number])
				{
					outp(dataport1,portsendbuff[Tcom_number][iportsendbuffR[Tcom_number]]);
					iportsendbuffR[Tcom_number]++;
					if(iportsendbuffR[Tcom_number]>=MAX_DATA)
					iportsendbuffR[Tcom_number]=0;
					sending[Tcom_number]=1;
					com_send_count[Tcom_number]++;
				}
				else
				{
					//sending[Tcom_number]=0;
					if(Port_Set[Tcom_number][5]==0)
					{
						sending[Tcom_number]=0;
					}
					else
					{
						if(sending[Tcom_number]!=0)
						{
							sending[Tcom_number]++;
							if(sending[Tcom_number]>=3)//+++3
							sending[Tcom_number]=0;
						}
					}
					outp(commandport1,0x28);
				}
				com_int_count[Tcom_number]++;
				//............end txip;
			};
       //-----------------------------

		}
    //------------------------------//
    //----------end rxip------------//
    //------------------------------//

		else
		{
			if((rr3&0x10)==0x10)
			{
      //------------------------------//
      //----------txip------------//
      //------------------------------//
				if(iportsendbuffW[Tcom_number]!=iportsendbuffR[Tcom_number])
				{
					outp(dataport1,portsendbuff[Tcom_number][iportsendbuffR[Tcom_number]]);
					iportsendbuffR[Tcom_number]++;
		//if(iportsendbuffR[Tcom_number]>=MAX_DATA)
					if(iportsendbuffR[Tcom_number]>=200)
					iportsendbuffR[Tcom_number]=0;
					sending[Tcom_number]=1;
					com_send_count[Tcom_number]++;
				}
				else
				{
					//sending[Tcom_number]=0;
					if(Port_Set[Tcom_number][5]==0)
					{
						sending[Tcom_number]=0;
					}
					else
					{
						if(sending[Tcom_number]!=0)
						{
							sending[Tcom_number]++;
							if(sending[Tcom_number]>=3)//+++3
							sending[Tcom_number]=0;
						}
					}
					outp(commandport1,0x28);
				}
				com_int_count[Tcom_number]++;
				//............end txip;


				/*outp(commandport1,0x03);        //read WR3;
				rr3=inp(commandport1);

	if((rr3&0x20)==0x20)            //rxip;
	{
	//........
	  if(Port_Set[Tcom_number][5]==1)
	  {
				   //read data;
	    recv_char=inp(dataport1);
	    com_received_num[Tcom_number]++;

	    if(iportreceivebuffW[Tcom_number]!=iportreceivebuffR[Tcom_number]-1)
	    {
		portreceivebuff[Tcom_number][iportreceivebuffW[Tcom_number]]=recv_char;
		iportreceivebuffW[Tcom_number]++;
		if(iportreceivebuffW[Tcom_number]>=MAX_DATA)
			iportreceivebuffW[Tcom_number]=0;
	    }
	    //---EOF--------------------------------------
	    outp(commandport1,0x01);
	    rr1=inp(commandport1);     //read RR1;

	    if((rr1&0x80)==0x80)       //EOF
	    {
	     //sync_recevie_7e[Tcom_number]=1;

	     if((rr1&0x40)==0x40)      //CRC;
	     {
		//crc_check_erro[Tcom_number]=1;
		if(iportreceivebuffW[Tcom_number]!=iportreceivebuffR[Tcom_number]-1)
		{
			portreceivebuff[Tcom_number][iportreceivebuffW[Tcom_number]]=1;

			iportreceivebuffW[Tcom_number]++;
			if(iportreceivebuffW[Tcom_number]>=MAX_DATA)
				iportreceivebuffW[Tcom_number]=0;
		}
		else
		{}
		outp(commandport1,0x0);
		outp(commandport1,0x30);// Error Reset
	     }
	     else
	     {
		if(iportreceivebuffW[Tcom_number]!=iportreceivebuffR[Tcom_number]-1)
		{
			portreceivebuff[Tcom_number][iportreceivebuffW[Tcom_number]]=0;
			iportreceivebuffW[Tcom_number]++;
			if(iportreceivebuffW[Tcom_number]>=MAX_DATA)
				iportreceivebuffW[Tcom_number]=0;
		}
		else
		{}
	     }

	     for(ifor1=0;ifor1<4;ifor1++)
	     {
		if(iportreceivebuffW[Tcom_number]!=iportreceivebuffR[Tcom_number]-1)
		{
			portreceivebuff[Tcom_number][iportreceivebuffW[Tcom_number]]=0x7e;
			iportreceivebuffW[Tcom_number]++;
			if(iportreceivebuffW[Tcom_number]>=MAX_DATA)
				iportreceivebuffW[Tcom_number]=0;
		}
		else
		{}
	     }
	    };
	    /////---------------End EOF-----
	  }
	  else
	  {
		recv_char=inp(dataport1);
		com_received_num[Tcom_number]++;

		if(iportreceivebuffW[Tcom_number]!=iportreceivebuffR[Tcom_number]-1)
		{
			portreceivebuff[Tcom_number][iportreceivebuffW[Tcom_number]]=recv_char;
			iportreceivebuffW[Tcom_number]++;
			if(iportreceivebuffW[Tcom_number]>=MAX_DATA)
				iportreceivebuffW[Tcom_number]=0;
		}
	  }
	};
	*/
			}
      //------------------------------//
      //----------end txip------------//
      //------------------------------//
		}
    //end;
	}
	else


 //==========================
 //Asncy:
 //
 //
	{
		outp(commandport1,0x03);                  //com3 receive;
		rr3=inp(commandport1);
		rr3=rr3&0x20;
		while(rr3==0x20)
		{
			recv_char=inp(dataport1);

⌨️ 快捷键说明

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