Omega Vehicle Security OME-PIO-D56 User Manual
Page 46

irqmask=inportb(A1_8259+1);
outportb(A1_8259+1,irqmask & 0xff ^ (1< setvect(wIrq+8,irq_service); } else { 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 (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