void interrupt irq_service() |
|
|
|
{ |
| /* read all interrupt state */ | |
new_int_state=inportb(wBase+7)&0x0f; | |||
int_c=new_int_state^now_int_state; | /* compare which interrupt | */ | |
if ((int_c&0x1)!=0) |
| /* signal be change | */ |
| /* INT_CHAN_0 is active | */ | |
{ | /* now P2C0 change to high | */ | |
if ((new_int_state&0x01)!=0) | |||
{ |
|
|
|
CNT_H1++; |
|
|
|
} | /* now P2C0 change to low | */ | |
else | |||
{ |
|
|
|
CNT_L1++; |
|
|
|
} | /* to generate a high pulse | */ | |
invert=invert^1; | |||
} |
|
|
|
if ((int_c&0x2)!=0) |
|
|
|
{ | /* now P5C0 change to high | */ | |
if ((new_int_state&0x02)!=0) | |||
{ |
|
|
|
CNT_H2++; |
|
|
|
} | /* now P5C0 change to low | */ | |
else | |||
{ |
|
|
|
CNT_L2++; |
|
|
|
{ | /* to generate a high pulse | */ | |
invert=invert^2; | |||
} |
|
|
|
if ((int_c&0x4)!=0) |
|
|
|
{ | /* now P8C0 change to high | */ | |
If ((new_int_state&0x04)!=0) | |||
{ |
|
|
|
CNT_H3++; |
|
|
|
} | /* now P8C0 change to low | */ | |
else | |||
{ |
|
|
|
CNT_L3++; |
|
|
|
} | /* to generate a high pulse | */ | |
invert=invert^4; | |||
} |
|
|
|
if ((int_c&0x8)!=0) |
|
|
|
{ | /* now P11C0 change to high | */ | |
if ((new_int_state&0x08)!=0) | |||
{ |
|
|
|
CNT_H4++; |
|
|
|
{ | /* now P11C0 change to low | */ | |
else | |||
{ |
|
|
|
CNT_L4++; |
|
|
|
} | /* to generate a high pulse | */ | |
invert=invert^8; | |||
} |
|
|
|
now_int_state=new_int_state; |
|
|
|
outportb(wBase+0x2a,invert); |
|
|
|
if (wIrq>=8) outportb(A2_8259,0x20); outportb(A1_8259,0x20);
}