📄 port.c
字号:
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 + -