{

irqmask=inportb(A1_8259+1);

outportb(A1_8259+1,irqmask & 0xfb);/* IRQ2 */ irqmask=inportb(A2_8259+1);

outportb(A2_8259+1,irqmask & 0xff ^ (1<<(wIrq-8))); setvect(wIrq-8+0x70,irq_service);

}

outportb(wBase+5,1);

/* enable interrupt (P2C0) */

now_int_state=0;

/* now ini_signal is low

*/

outportb(wBase+0x2a,1);

/* select the non-inverte

*/

enable();

 

 

}

 

 

void interrupt irq_service()

 

 

{

/* now P2C0 change to low

*/

if (now_int_state==1)

{

/* INT_CHAN_0 = !P2C0

*/

COUNT_L++;

/* find a low pulse (P2C0)

*/

if ((inportb(wBase+7)&1)==0)

/* P2C0 still fixed in low

*/

{

/* need to generate a high pulse */

outportb(wBase+0x2a,1);

/* INV0 select noninverted input */

now_int_state=0;

/* now P2C0=low

*/

}

/* now P2C0=High

*/

else now_int_state=1;

}

/* now P2C0 change to high

*/

else

{

/* INT_CHAN_0 = P2C0

*/

COUNT_H++;

/* find a high pulse (P2C0)

*/

if ((inportb(wBase+7)&1)==1)

/* P2C0 still fixed in high

*/

{

/* need to generate a high pulse */

outportb(wBase+0x2a,0);

/* INV0 select inverted input

*/

now_int_state=1;

/* now P2C0=high

*/

}

/* now P2C0=low

*/

else now_int_state=0;

}

 

 

if (wIrq>=8) outportb(A2_8259,0x20); outportb(A1_8259,0x20);

}

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

---- 42

Page 44
Image 44
Omega Engineering OME-PIO-D96 manual Countl++