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

📄 port.c

📁 z85c30 DRIVER RUN ON PC104 PC AND VXWORKS SYSTERM.
💻 C
📖 第 1 页 / 共 5 页
字号:
			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;
			}
			else
			{}
			outp(commandport1,0x03);
			rr3=inp(commandport1);
			rr3=rr3&0x20;
		}

		outp(commandport1,0x03);             //com3 send;
		rr3=inp(commandport1);
		rr3=rr3&0x10;
		while(rr3==0x10)
		{
			com_int_count[Tcom_number]++;
			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;
				outp(commandport1,0x28);
			}
			outp(commandport1,0x03);
			rr3=inp(commandport1);
			rr3=rr3&0x10;
		}

	}
    //==================End CH: A=================//

    //==================CH: B=====================//
    //
    //
    //
    //begin

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

		if((rr3&0x04)==0x04)
		{
    //------------------------------//
    //-----------rxip---------------//
    //------------------------------//
	//read data;
			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;
			}
	//------------------EOF-----------------//
			outp(commandport2,0x01);
			rr1=inp(commandport2);     //read RR1;

			if((rr1&0x80)==0x80)       //EOF
			{

				com_received_num[Tcom_number+1]--;
				com_received_num[Tcom_number+1]--;


	     //sync_recevie_7e[Tcom_number+1]=1;

				if((rr1&0x40)==0x40)      //CRC;
				{
		//crc_check_erro[Tcom_number+1]=1;
					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
					{}
				}
			};
	//-------------------------End EOF-----

       //------------------------------//
       //rxip's txip;
       //------------------------------//
			if((rr3&0x02)==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
				{
					//sending[Tcom_number+1]=0;
					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]>=3)//+++3
							sending[Tcom_number+1]=0;
						}
					}
					outp(commandport2,0x28);
				}

			}
       //-----------end rxip's txip;

       /*/--------------------------------//
       //read WR3 again
       //
       //--------------------------------//
       outp(commandport1,0x03);        //read WR3;
       rr3=inp(commandport1);
       //-----------------------------//
       //
       //-----------------------------//
       if((rr3&0x02)==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]>=3)//+++3
		  sending[Tcom_number+1]=0;
	      }
	    }
	    outp(commandport2,0x28);
	}
	//............end txip;
       }
       //-----------------------------*/
		}
    //------------------------------//
    //----------end rxip------------//
    //------------------------------//

		else
		{
			if((rr3&0x02)==0x02)
			{
      //------------------------------//
      //----------txip------------//
      //------------------------------//

				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
				{
					sending[Tcom_number+1]=0;
					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]>=3)//+++3
							sending[Tcom_number+1]=0;
						}
					}
					outp(commandport2,0x28);
				}
	/*/............end txip;
	outp(commandport1,0x03);        //read WR3;
	rr3=inp(commandport1);

	if((rr3&0x04)==0x04)            //rxip;
	{
	//........
	  if(Port_Set[Tcom_number+1][5]==1)
	  {
				   //read data;
	    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;
	    }
	    //---EOF--------------------------------------
	    outp(commandport2,0x01);
	    rr1=inp(commandport2);     //read RR1;

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

	     if((rr1&0x40)==0x40)      //CRC;
	     {
		//crc_check_erro[Tcom_number+1]=1;
		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
		{}
	     }
	    };
	    /////---------------End EOF-----
	  }
	  else
	  {
		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;
		}
	  }
	}*/
			}
      //------------------------------//
      //----------end txip------------//
      //------------------------------//
		}
    //end;
	}
	else

 //======================
 //Asncy:
 //
 //
	{
		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;
			}
			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
			{
				sending[Tcom_number+1]=0;
				outp(commandport2,0x28);
			}
			outp(commandport1,0x03);
			rr3=inp(commandport1);
			rr3=rr3&0x02;
		}
	}
    //==================End CH: B=================//

    //********************************************//
	outp(commandport1,0x03);
	rr3=inp(commandport1);
	//if(rr3 & 0x66!=0) goto handle3a;
	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);

	outp(intcommand1,0x20);
	outp(intcommand2,0x20);

	enable();
}

void port_end(void)
{
	disable();
	asm{
	push ds
	mov dx,300h
	mov al,01
	out dx,al
	pop ds
	}
	setvect(0x0c,old_com1int);                   //recover interrupt vector
	setvect(0x0b,old_com2int);                   //recover interrupt vector
	setvect(0x0d,old_int5);
	setvect(0x0e,old_int6);
	setvect(0x0f,old_int7);
	setvect(0x71,old_int9);
	setvect(0x73,old_int11);
	//setvect(0x76,old_int14);
	setvect(0x77,old_int15);
	setvect(0x72,old_int10);

	//outp(com1_intflag,0x0);
	/*outp(com2_intflag,0x0);
	outp(com3_intflag,0x0);
	outp(com4_intflag,0x0);
	outp(com5_intflag,0x0);
	outp(com6_intflag,0x0);
	outp(com7_intflag,0x0);
	outp(com8_intflag,0x0);
	outp(com9_intflag,0x0);
	outp(com10_intflag,0x0);
	outp(inter_state,0x0); */

	/*setvect(0x0c,old_com1int);
	setvect(0x0b,old_com2int);
	setvect(0x0d,old_com3int);
	setvect(0x0e,old_com4int);
	setvect(0x0f,old_com5int);
	setvect(0x73,old_com6int);
	setvect(0x77,old_com7890int);
	setvect(0x77,old_com8int);
	setvect(0x09,old_keyint);
	setvect(0x72,old_int10);
	setvect(0x08,old_int0);*/

	outp(intmask1,old_intmas_reg1);
	outp(intmask2,old_intmas_reg2);
	outp(com3_commandport,0x09);
	outp(com3_commandport,0xc0);        //hardeware reset;
	outp(com5_commandport,0x09);
	outp(com5_commandport,0xc0);        //hardeware reset;
	outp(com7_commandport,0x09);
	outp(com7_commandport,0xc0);        //hardeware reset;
	outp(com9_commandport,0x09);
	outp(com9_commandport,0xc0);        //hardeware reset;
	outp(com11_commandport,0x09);
	outp(com11_commandport,0xc0);        //hardeware reset;
	outp(com13_commandport,0x09);
	outp(com13_commandport,0xc0);        //hardeware reset;
	enable();
}

/****************************************
*
*
*
*/
void interrupt_zi_programe_async(int Tcom_number)//2003-06-10
{
    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;

    handleasyn:
//.........................A
/////////////////////////////
/////////////////data receive;
	outp(commandport1,0x03);                  //A receive;
	rr3=inp(commandport1);
	rr3=rr3&0x20;
	while(rr3==0x20)
	{
		com_int_count[Tcom_number]++;
		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;
			iportreceive

⌨️ 快捷键说明

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