Omega OME-PIO-D144 User Manual
Page 46
for (;;)
{
printf("\n(CNT_L, CNT_H) = (%d,%d) (%d,%d) (%d,%d) (%d,%d) %x",
CNT_L1,CNT_H1,CNT_L2,CNT_H2,CNT_L3,CNT_H3,CNT_L4,CNT_H4,
int_num);
if (kbhit()!=0) {getch(); break;}
}
outp(wBase+5,0);
/* disable all interrupt */
PIO_DriverClose();
}
/* ------------------------------------------------------------ */
/* Use PC0 as external interrupt signal
*/
WORD init_low()
{
DWORD dwVal;
disable();
outp(wBase+5,0);
/* disable all interrupt */
if (wIrq<8)
{
irqmask=inp(A1_8259+1);
outp(A1_8259+1,irqmask & (0xff ^ (1 << wIrq)));
setvect(wIrq+8, irq_service);
}
else
{
irqmask=inp(A1_8259+1);
outp(A1_8259+1,irqmask & 0xfb);
/* IRQ2 */
outp(A1_8259+1,irqmask & (0xff ^ (1 << wIrq)));
irqmask=inp(A2_8259+1);
outp(A2_8259+1,irqmask & (0xff ^ (1 << (wIrq-8))));
setvect(wIrq-8+0x70, irq_service);
}
invert=0x05;
outp(wBase+0x2a,invert);
/* CN1_PC0 = non-inverte input */
/* CN1_PC1 = inverte input */
/* CN1_PC2 = non-inverte input */
/* CN1_PC3 = non-inverte input */
now_int_state=0x0a;
/* Now CN1_PC0 = low
*/
/* CN1_PC1 = high
*/
/* CN1_PC2 = low
*/
/* CN1_PC3 = high
*/
CNT_L1=CNT_L2=CNT_L3=CNT_L4=0; /* low pulse count */
CNT_H1=CNT_H2=CNT_H3=CNT_H4=0; /* high pulse count */
int_num=0;
outp(wBase+5,0x0f);
/* enable interrupt PC0,PC1,PC2,PC3 of CN1 */
enable();
}
void interrupt irq_service()
{
char cc;
int_num++;
new_int_state=inp(wBase+0x07)&0xff;
int_c=new_int_state ^ now_int_state;
OME-PIO-D144 User’s Manual (Ver.2.1, Sep/2001)
---- 44