irqmask=inportb(1);
outportb(1,irqmask & 0xff ^ (1<<wIrq));
setvect(wIrq+8,irq_service);
}
else
{
irqmask=inportb(1);
outportb(1,irqmask & 0xfb); /* IRQ2 */
irqmask=inportb(1);
outportb(1,irqmask & 0xff ^ (1<<(wIrq-8)));
setvect(wIrq-8+0x70,irq_service);
}
outportb(wBase+5,1); /* enable interrupt (PC0) */
now_int_state=0; /* now ini_signal is low */
outportb(wBase+0x2a,1); /* select the non-inverte */
enable();
}
void interrupt irq_service()
{
if (now_int_state==1) /* now PC0 change to low */
{ /* INT_CHAN_0 = !PC0 */
if ((inportb(wBase+7)&1)==0) /* PC0 still fixed in low */
{ /* need to generate a high pulse */
outportb(wBase+0x2a,1); /* INV0 select noninverted input */
now_int_state=0; /* now PC0=low */
}
else now_int_state=1; /* now PC0=High */
}
else /* now PC0 change to high */
{ /* INT_CHAN_0 = PC0 */
COUNT++;
if ((inportb(wBase+7)&1)==1) /* PC0 still fixed in high */
{ /* need to generate a high pulse */
outportb(wBase+0x2a,0); /* INV0 select inverted input */
now_int_state=1; /* now PC0=high */
}
else now_int_state=0; /* now PC0=low */
}
if (wIrq>=8) outportb(A2_8259,0x20);
outportb(A1_8259,0x20);
}
OME-
PIO-D56/PIO-D24 User Manual (Ver.2.1, Oct/2003, PPH-005-21) ---- 44