Omega Vehicle Security OME-PIO-D56 manual Initialhigh, activelow Interrupt source, Countl++

Models: OME-PIO-D56

1 53
Download 53 pages 55.1 Kb
Page 16
Image 16

2.4.3Initial_high, active_low Interrupt source

If the PC0 is a initial_high, active_low signal, the interrupt service routine should use INV0 to invert/non-invert the PC0 for high_pulse generation as follows: (Refer to DEMO4.C)

Initial setting:

 

 

now_int_state=1;

/* initial state for PC0

*/

 

 

 

 

 

 

 

 

outportb(wBase+0x2a,0);

/* select the inverted PC0 */

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

void interrupt irq_service()

 

 

 

 

 

 

 

 

 

{

 

 

 

 

 

/* now PC0 is changed to LOW

 

 

*/(a)

if (now_int_state==1)

 

 

 

{

 

 

 

/* --> 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

*/(b)

 

 

 

 

 

 

/*

INT_CHAN_0=PC0=LOW -->

 

 

*/

 

 

 

 

now_int_state=0;

 

/*

INT_CHAN_0 generate a high_pulse

*/

 

 

 

 

 

/* now PC0=LOW

 

 

 

 

*/

 

 

}

 

 

 

/* now PC0=HIGH

 

 

 

 

*/

 

 

 

 

else now_int_state=1;

 

 

 

 

 

 

}

 

 

 

/* don’t have to generate high_pulse

*/

 

 

 

 

 

/* now PC0 is changed to HIGH

 

 

*/(c)

else

 

 

 

{

 

 

 

/* --> 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 */(d)

 

 

 

 

 

 

/* INT_CHAN_0=!PC0=LOW -->

 

 

*/

 

 

 

 

now_int_state=1;

 

/* INT_CHAN_0 generate a high_pulse

*/

 

 

 

 

 

/* now PC0=HIGH

 

 

 

 

*/

 

 

}

 

 

 

/* now PC0=LOW

 

 

 

 

*/

 

 

 

 

else now_int_state=0;

 

 

 

 

 

 

}

 

 

 

/* don’t have to generate high_pulse

*/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

outportb(A1_8259,0x20);

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(a)

(b)

 

 

(c)

(d)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PC0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

INV0

INT_CHAN_0

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

---- 14

Page 16
Image 16
Omega Vehicle Security OME-PIO-D56 manual Initialhigh, activelow Interrupt source, Countl++