4.4DEMO3
/* 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; |
|
|
| |
clrscr(); |
|
|
| |
/* step1 : find | */ | |||
| . |
|
| |
| . | /* select card_0 */ | ||
/* step2 : enable all D/I/O port | ||||
/* /RESET | */ | |||
outportb(wBase,1); | */ | |||
/* step3 : configure I/O direction |
| */ | ||
outportb(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; |
|
| ||
} |
| /* disable all interrupt */ | ||
outportb(wBase+5,0); | ||||
PIO_DriverClose(); |
|
| ||
} |
|
|
| |
/* Use P2C0 as external interrupt signal |
| */ | ||
WORD init_low() |
|
| ||
{ |
|
|
| |
disable(); |
| /* disable all interrupt */ | ||
outportb(wBase+5,0); | ||||
if (wIrq<8) |
|
|
| |
{ |
|
|
| |
irqmask=inportb(A1_8259+1); |
|
| ||
outportb(A1_8259+1,irqmask & 0xff ^ (1<<wIrq)); |
| |||
setvect(wIrq+8,irq_service); |
|
| ||
} |
|
|
| |
else |
|
|
| |
|