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);

}

OME-PIO-D96 User Manual (Ver.1.1, Mar/2003)

---- 15

Page 17
Image 17
Omega Engineering OME-PIO-D96 manual Read all interrupt state