4 initial_low, active_high interrupt source – Omega Vehicle Security OME-PIO-D56 User Manual

Page 17

Advertising
background image

2.4.4 Initial_low, active_high Interrupt source

If the PC0 is a initial_low, active_high signal, the interrupt service routine

should use INV0 to inverted/non-inverted the PC0 for high_pulse generation as
follows: (Refer to DEMO3.C)
Initial setting:


now_int_state=0; /* initial state for PC0 */
outportb(wBase+0x2a,1); /* select the non-inverted PC0 */

void interrupt irq_service()

{

if (now_int_state==1) /* now PC0 is changed to LOW */(c)

{ /* --> INT_CHAN_0=!PC0=HIGH now */

COUNT_L++; /* find a LOW_pulse (PC0) */
If((inport(wBase+7)&1)==0)/* the PC0 is still fixed in LOW */
{ /*
Æ need to generate a high_pulse */
outportb(wBase+0x2a,1);/* INV0 select the non-inverted input */(d)

/* INT_CHAN_0=PC0=LOW --> */

/* INT_CHAN_0 generate a high_pulse */

now_int_state=0; /* now PC0=LOW */

}

else now_int_state=1; /* now PC0=HIGH */

/* don’t have to generate high_pulse */

}

else /* now PC0 is changed to HIGH */(a)

{ /* --> INT_CHAN_0=PC0=HIGH now */

COUNT_H++; /* find a High_pulse (PC0) */
If((inport(wBase+7)&1)==1)/* the PC0 is still fixed in HIGH */
{ /* need to generate a high_pulse */
outportb(wBase+0x2a,0);/* INV0 select the inverted input */(b)

/* INT_CHAN_0=!PC0=LOW --> */

/* INT_CHAN_0 generate a high_pulse */

now_int_state=1; /* now PC0=HIGH */

}

else now_int_state=0; /* now PC0=LOW */

/* don’t have to generate high_pulse */

}

if (wIrq>=8) outportb(A2_8259,0x20);

outportb(A1_8259,0x20);

}

PC0

INV0

INT_CHAN_0

(a)

(b)

(c)

(d)

OME-PIO-D56/OME-PIO-D24 User Manual (Ver.2.1, Oct/2003)

---- 15

Advertising