/* demo 3 : Count high pulse of P2C0 */ /* (initial Low & active High) */ /* step 1 : run DEMO3.EXE */ /* -------------------------------------------------------------- */ #include "PIO.H" #define A1_8259 0x20 #define A2_8259 0xA0 #define EOI 0x20 WORD init_low(); WORD wBase,wIrq; static void interrupt irq_service(); int COUNT_L,COUNT_H,irqmask,now_int_state; int main() { int i,j; WORD wBoards,wRetVal,t1,t2,t3,t4,t5,t6; WORD wSubVendor,wSubDevice,wSubAux,wSlotBus,wSlotDevice; char c; _clearscreen(0); /* step1 : find address-mapping of PIO/PISO cards */ wRetVal=PIO_DriverInit(&wBoards,0x80,0x01,0x10); /* for PIO-D96 */ printf("\n(1) Threr are %d PIO-D96 Cards in this PC",wBoards); if ( wBoards==0 ) exit(0); printf("\n\n-------------- The Configuration Space --------------"); for(i=0;i "); ShowPioPiso(wSubVendor,wSubDevice,wSubAux); } PIO_GetConfigAddressSpace(0,&wBase,&wIrq,&t1,&t2,&t3,&t4,&t5); /* select card_0 */ /* step2 : enable all D/I/O port */ outp(wBase,1); /* /RESET -> 1 */ /* step3 : configure I/O direction */ outp(wBase+0xcc,0x00); /* set CN1 as D/I ports */ init_low(); printf("\n\n***** show the count of High_pulse *****\n"); for (;;) { gotoxy(1,8); printf("\nCOUNT_H=%d",COUNT_H); if (kbhit()!=0) break; } outp(wBase+5,0); /* disable all interrupt */ PIO_DriverClose(); } /* Use P2C0 as external interrupt signal */ WORD init_low() { _disable(); outp(wBase+5,0); /* disable all interrupt */ if (wIrq<8) { irqmask=inp(A1_8259+1); outp(A1_8259+1,irqmask & 0xff ^ (1<=8) outp(A2_8259,0x20); outp(A1_8259,0x20); }