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 OME-PIO-D144 Cards in this PC",wBoards); if ( wBoards==0 )

{

putch(0x07); putch(0x07); putch(0x07);

printf("(1) There are no OME-PIO-D144 card in this PC !!!\n");

exit(0);

}

printf("\n(2) Show the Configuration Space of all OME-PIO-D144:"); for(i=0; i<wBoards; i++)

{

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();

 

 

 

 

OME-PIO-D144 User’s Manual (Ver.2.1, Sep/2001)

----- 43

Page 45
Image 45
Omega OME-PIO-D144 manual Demo5 Interrupt demo3