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

📄 port.c

📁 z85c30 DRIVER RUN ON PC104 PC AND VXWORKS SYSTERM.
💻 C
📖 第 1 页 / 共 5 页
字号:
		outp(commandport,0x63);         //BRG clock soure: PCLK pin;
						//DPLL CLOCK SOURCE=BRG;
	}

	outp(commandport,0x03);        //WR3
	outp(commandport,0xd9);        //8 bit received per character;
				       //no auto mode;
				       //CRC check;
				       //no address search;
				       //sync character load inhibit;
				       //rx enable;

	outp(commandport,0x01);
	outp(commandport,0x12);        //receive,transmit interupt enable;
	//outp(commandport,0x11);        //receive interupt enable;
				       //'D0': External interrupt enable;

	outp(commandport,0x0f);        //WR15
	outp(commandport,0x0);
	//outp(commandport,0x50);      //+++//0x10;
					//break/abort interrrupt enable;
				       //sync/hunt interrupt enable;


	outp(commandport,0x09);
	outp(commandport,0x08);        //master interupt enable;
	//outp(commandport,0x0a);        //master interupt enable;

	outp(commandport,0x05);        //WR5
	outp(commandport,0x69);        //Tx 8 bits/character;
				       //tx CRC enable;
				       //TX ENABLE

	outp(commandport,0x40);

	inp(dataport);

}


/******************************************************************/
//interrupt port seting;
/*void interrupt_initial(void)
{
	disable();                                    //disable the interrupt;
	old_int5=getvect(0x0d);
	setvect(0x0d,nic_interrupt);

	old_int10=getvect(0x72);                     //save the old nic interrupt;
	setvect(0x72,com34_interrupt);                //set the new nic interrupt;

	old_int7=getvect(0x0f);
	setvect(0x0f,com56_interrupt);

	old_int11=getvect(0x73);
	setvect(0x73,com78_interrupt);

	old_int15=getvect(0x77);
	setvect(0x77,com90_interrupt);

	//old_int14=getvect(0x76);
	//setvect(0x76,com90_interrupt);

	//old_int15=getvect(0x77);
	//setvect(0x77,com1112_interrupt);
	//old_keyint=getvect(0x09);                     //save the old keyboard interrupt vector;
	//setvect(0x09,keyboard_interrupt);      	      //set the new keyboard interrupt vector;

	old_intmas_reg1=inp(intmask1);
	old_intmas_reg2=inp(intmask2);		      //save the old interrupt mask registor;
	outp(intmask1,0x0);  	               	      //open all interrupt;
	outp(intmask2,0x0);  	               	      //open all interrupt;
	enable();                                     //enable the interrupt;
}*/

void interrupt_initial(void)
{
	disable();                                    //disable the interrupt;

	old_com1int=getvect(0x0c);            //change interrupt vector;
	setvect(0x0c,com1_interrupt);
	outp(com1_modemclt,0x0b);             //open serial interrupt;
	outp(com1_intenable,0x03);
//	outp(com1_intenable,0x02);

	old_com2int=getvect(0x0b);            //change interrupt vector;
	setvect(0x0b,com2_interrupt);
	outp(com2_modemclt,0x0b);             //open serial interrupt;
	outp(com2_intenable,0x03);

	switch(Nic_Interrupt)
	{
		case 5:
			old_int5=getvect(0x0d);
			setvect(0x0d,nic_interrupt);
		break;
		case 6:
		break;
		case 7:
			old_int7=getvect(0x0f);
			setvect(0x0f,nic_interrupt);
		break;
		case 9:
		break;
		case 10:
			old_int10=getvect(0x72);                     //save the old nic interrupt;
			setvect(0x72,nic_interrupt);                //set the new nic interrupt;
		break;
		case 11:
			old_int11=getvect(0x73);
			setvect(0x73,nic_interrupt);
		break;
		case 13:
		break;
		case 15:
			old_int15=getvect(0x77);
			setvect(0x77,nic_interrupt);
		break;
	}

	switch(Com34_Interrupt)
	{
		case 5:
			old_int5=getvect(0x0d);                     //save the old nic interrupt;
			setvect(0x0d,com34_interrupt);                //set the new nic interrupt;
		break;
		case 6:
		break;
		case 7:
			old_int7=getvect(0x0f);                     //save the old nic interrupt;
			setvect(0x0f,com34_interrupt);                //set the new nic interrupt;
		break;
		case 9:
		break;
		case 10:
			old_int10=getvect(0x72);                     //save the old nic interrupt;
			setvect(0x72,com34_interrupt);                //set the new nic interrupt;
		break;
		case 11:
			old_int11=getvect(0x73);
			setvect(0x73,com34_interrupt);
		break;
		case 13:
		break;
		case 15:
			old_int15=getvect(0x77);
			setvect(0x77,com34_interrupt);
		break;
	}

	switch(Com56_Interrupt)
	{
		case 5:
			old_int5=getvect(0x0d);
			setvect(0x0d,com56_interrupt);
		break;
		case 6:
		break;
		case 7:
			old_int7=getvect(0x0f);
			setvect(0x0f,com56_interrupt);
		break;
		case 9:
		break;
		case 10:
			old_int10=getvect(0x72);                     //save the old nic interrupt;
			setvect(0x72,com56_interrupt);                //set the new nic interrupt;
		break;
		case 11:
			old_int11=getvect(0x73);
			setvect(0x73,com56_interrupt);
		break;
		case 13:
		break;
		case 15:
			old_int15=getvect(0x77);
			setvect(0x77,com56_interrupt);
		break;
	}

	switch(Com78_Interrupt)
	{
		case 5:
			old_int5=getvect(0x0d);
			setvect(0x0d,com78_interrupt);
		break;
		case 6:
		break;
		case 7:
			old_int7=getvect(0x0f);
			setvect(0x0f,com78_interrupt);
		break;
		case 9:
		break;
		case 10:
			old_int10=getvect(0x72);                     //save the old nic interrupt;
			setvect(0x72,com78_interrupt);                //set the new nic interrupt;
		break;
		case 11:
			old_int11=getvect(0x73);
			setvect(0x73,com78_interrupt);
		break;
		case 13:
		break;
		case 15:
			old_int15=getvect(0x77);
			setvect(0x77,com78_interrupt);
		break;
	}

	switch(Com910_Interrupt)
	{
		case 5:
			old_int5=getvect(0x0d);
			setvect(0x0d,com90_interrupt);
		break;
		case 6:
		break;
		case 7:
			old_int7=getvect(0x0f);
			setvect(0x0f,com90_interrupt);
		break;
		case 9:
			old_int9=getvect(0x71);
			setvect(0x71,com90_interrupt);
		break;
		case 10:
			old_int10=getvect(0x72);                     //save the old nic interrupt;
			setvect(0x72,com90_interrupt);                //set the new nic interrupt;
		break;
		case 11:
			old_int11=getvect(0x73);
			setvect(0x73,com90_interrupt);
		break;
		case 13:
		break;
		case 15:
			old_int15=getvect(0x77);
			setvect(0x77,com90_interrupt);
		break;
	}

	switch(Com1112_Interrupt)
	{
		case 5:
		break;
		case 6:
		break;
		case 7:
		break;
		case 9:
			old_int9=getvect(0x71);
			setvect(0x71,com1112_interrupt);
		break;
		case 10:
		break;
		case 11:
		break;
		case 13:
		break;
		case 14:
			//old_int14=getvect(0x76);
			//setvect(0x76,com1112_interrupt);
		break;
		case 15:
		break;
	}
	switch(Com1314_Interrupt)
	{
		case 5:
		break;
		case 6:
			old_int6=getvect(0x0E);
			setvect(0x0E,com1314_interrupt);
		break;

		case 7:
		break;
		case 9:
		break;
		case 10:
			old_int10=getvect(0x72);                     //save the old nic interrupt;
			setvect(0x72,com1314_interrupt);                //set the new nic interrupt;
		break;
		case 11:
		break;
		case 13:
		break;
		case 14:
			//old_int14=getvect(0x76);
			//setvect(0x76,com1112_interrupt);
		break;
		case 15:
		break;
	}
	//old_int14=getvect(0x76);
	//setvect(0x76,com90_interrupt);
	//old_int15=getvect(0x77);
	//setvect(0x77,com1112_interrupt);
	//old_keyint=getvect(0x09);                     //save the old keyboard interrupt vector;
	//setvect(0x09,keyboard_interrupt);      	      //set the new keyboard interrupt vector;

	old_intmas_reg1=inp(intmask1);
	old_intmas_reg2=inp(intmask2);		      //save the old interrupt mask registor;

	outp(intmask1,0x0);  	               	      //open all interrupt;
	outp(intmask2,0x0);  	               	      //open all interrupt;
	enable();                                     //enable the interrupt;
}

//---------------------------------------------interrupt mprogram;
void interrupt timer_interrupt(void)
{
}
void interrupt com1_interrupt(void)
{
unsigned char tmp;
  int iIntType,i;
static  int gps_write;
  //read com1's IIR(interrupt identiafication register)
  disable();
  iIntType=inp(0x3fa);
  while(1)
  {
    switch(iIntType)
    {
      case 6://recieve error or disconenct

	     break;
      case 4://recieve buffer register ready
	     //int_rev++;
	     tmp=inp(0x3f8);
	     if(tmp=='$')
	     {
		rev_state=1;
		gps_write=0;
	     }
	     if(rev_state==1)
	     {
		GpsMsg[gps_write]=tmp;
		gps_write++;
		//if(gps_write>99) gps_write=0;
		if(tmp=='\r')  rev_state=2;

	     }
	     //biEmpty=FALSE;
	     break;
      case 2://transmit hold register empty
	     //int_send++;
	     break;
      case 0://MODEM status change

	     break;
    }
    iIntType=inp(0x3fa);
    //no interrupt need be process then exit
    if(iIntType==1) break;
  }
  outportb(0x20,0x20);//transmit EOI to interrupt command register
		      //end the interrupt
   enable();


/*	int intflag=0;
	unsigned char tmp;
	disable();
	intflag=inp(com1_intflag);
	switch (intflag)                               //which interrupt source;
	{
		case 2:                                //send;
			if(iportsendbuffW[0]!=iportsendbuffR[0])
			{
				outp(com1_dataport,portsendbuff[0][iportsendbuffR[0]]);
				iportsendbuffR[0]++;
				if(iportsendbuffR[0]>=MAX_DATA)
					iportsendbuffR[0]=0;
				//sending1=1;
				com_send_count[0]++;
			}
			else
			{
				sending1=0;
			}

		break;
		case 4:                                //receive;
		//gps_r_ok=1;

		tmp=inportb(0x3f8);
			//if(iportreceivebuffW[0]!=iportreceivebuffR[0]-1)
			{
				portreceivebuff[0][iportreceivebuffW[0]]=tmp;
				iportreceivebuffW[0]++;
				if(iportreceivebuffW[0]>=MAX_DATA)
					iportreceivebuffW[0]=0;
			}
			com_received_num[0]++;
		break;
		define: break;
	 }
	 enable();
	 outp(intcommand1,0x20);*/
}


void interrupt com2_interrupt(void)
{
	int intflag=0;
	char ch;
	disable();
	com_int_count[1]++;
	intflag=inp(com2_intflag);
while((intflag==2)||(intflag==4))
{
	switch (intflag)                               //which interrupt source;
	{
		case 2:
			//com2_int_count++;		   //send;
			if(iportsendbuffW[1]!=iportsendbuffR[1])
			{
				outp(com2_dataport,portsendbuff[1][iportsendbuffR[1]]);
				iportsendbuffR[1]++;
				if(iportsendbuffR[1]>=MAX_DATA)
					iportsendbuffR[1]=0;
				sending2=1;
				com_send_count[1]++;
			}
			else
			{
				sending2=0;
			}
		break;
		case 4:                                //receive;
			ch=inportb(0x2f8);
			if(iportreceivebuffW[1]!=iportreceivebuffR[1]-1)
			{
				portreceivebuff[1][iportreceivebuffW[1]]=ch;
				iportreceivebuffW[1]++;
				if(iportreceivebuffW[1]>=MAX_DATA)
					iportreceivebuffW[1]=0;
			}
			com_received_num[1]++;
		break;
		define: break;
	 }
	intflag=inp(com2_intflag);
}
	 enable();
	 outp(intcommand1,0x20);
}
void interrupt com34_interrupt(void)
{
	disable();
	if(Port_Set[2][5]==0&&Port_Set[3][5]==0)
	interrupt_zi_programe_async_a(3);
	else
	interrupt_zi_programe(3);
	enable();
}

void interrupt com56_interrupt(void)
{
	disable();
	if(Port_Set[4][5]==0&&Port_Set[5][5]==0)
	interrupt_zi_programe_async_a(5);
	else
	interrupt_zi_programe(5);
	enable();
}

void interrupt com78_interrupt(void)
{
	disable();
	if(Port_Set[6][5]==0&&Port_Set[7][5]==0)
	interrupt_zi_programe_async_a(7);
	else
	interrupt_zi_programe(7);
	enable();
}

void interrupt com90_interrupt(void)
{
	disable();
	if(Port_Set[8][5]==0&&Port_Set[9][5]==0)
	interrupt_zi_programe_async_a(9);
	else
	interrupt_zi_programe(9);
	enable();
}

void interrupt com1112_interrupt(void)
{
	disable();
	if(Port_Set[10][5]==0&&Port_Set[11][5]==0)
	interrupt_zi_programe_async_a(11);
	else
	interrupt_zi_programe(11);
	enable();
}

void interrupt com1314_interrupt(void)
{
	disable();
	if(Port_Set[12][5]==0&&Port_Set[13][5]==0)
	interrupt_zi_programe_async(13);
	else
	interrupt_zi_programe(13);
	enable();
}



void interrupt nic_interrupt(__CPPARGS)
{
disable();
net_handle:
asm{
	push ax
	push dx
	push bx
	push ax
	push ds
	push bp
	push di
	push si
	push es
	push cx
	//sti
	mov ax,seg Mark_INT
	mov ds,ax
	mov Mark_INT,88h
	/*mov dx,IMR      // clear IMR Disable Interrupt
	mov al,0
	out dx,al */

	mov dx,ISR     /*; 读中断识别寄存器ISR */

⌨️ 快捷键说明

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