4.6 | Demo5: Interrupt demo3 |
|
/* | */ | |
/* demo 5 : four interrupt source | */ | |
/* | CN1_PC0: initial Low, active High | */ |
/* | CN1_PC1: initial High, active Low | */ |
/* | CN1_PC2: initial Low, active High | */ |
/* | CN1_PC3: initial High, active Low | */ |
/* step 1 : run demo5.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 irqmask,now_int_state,invert,new_int_state,int_c,int_num; int CNT_L1,CNT_L2,CNT_L3,CNT_L4;
int CNT_H1,CNT_H2,CNT_H3,CNT_H4;
int main()
{
int i,j;
WORD wBoards,wRetVal;
WORD wBase,wIrq,wSubVendor,wSubDevice,wSubAux,wSlotBus,wSlotDevice; char c;
DWORD dwVal;
clrscr();
PIO_DriverInit(&wBoards,0x80,0x01,0x00);
printf("\n(1) Threr are %d
{
putch(0x07); putch(0x07); putch(0x07);
printf("(1) There are no
exit(0);
}
printf("\n(2) Show the Configuration Space of all
{
PIO_GetConfigAddressSpace(i,&wBase,&wIrq,&wSubVendor,&wSubDevice, &wSubAux,&wSlotBus,&wSlotDevice);
printf("\nCard_%d: wBase=%x,wIrq=%x,subID=[%x,%x,%x],SlotID=[%x,%x]", i,wBase,wIrq,wSubVendor,wSubDevice,wSubAux,wSlotBus,wSlotDevice);
}
/* select card_0 */
PIO_GetConfigAddressSpace(0,&wBase,&wIrq,&wSubVendor,&wSubDevice, &wSubAux,&wSlotBus,&wSlotDevice);
printf("\n(3) *** Card_0, wBaseAddr=%x ***",wBaseAddr);
outp(wBase+0xc8,0xff); | /* CN1 to CN2 port are all input */ |
|
printf("\n(4) *** show the count of High_pulse **\n"); |
| |
init_low(); |
|
|
|
| |
|