Omega OME-PIO-D56 User Manual page 50

Pci-bus digital i/o board
Table of Contents

Advertisement

if (wIrq<8)
{
irqmask=inportb(A1_8259+1);
outportb(A1_8259+1,irqmask & 0xff ^ (1<<wIrq));
setvect(wIrq+8,irq_service);
}
else
{
irqmask=inportb(A1_8259+1);
outportb(A1_8259+1,irqmask & 0xfb);
irqmask=inportb(A2_8259+1);
outportb(A2_8259+1,irqmask & 0xff ^ (1<<(wIrq-8)));
setvect(wIrq-8+0x70,irq_service);
}
invert=0x05;
outportb(wBase+0x2a,invert);
now_int_state=0x0a;
CNT_L1=CNT_L2=CNT_L3=CNT_L4=0;
CNT_H1=CNT_H2=CNT_H3=CNT_H4=0;
int_num=0;
outportb(wBase+5,0x0f);
enable();
}
/* -------------------------------------------------------------- */
/* NOTE:1.The hold-time of INT_CHAN_0/1/2/3 must long enough
/*
2.The ISR must read the interrupt status again to the
/*
active interrupt sources.
/*
3.The INT_CHAN_0&INT_CHAN_1 can be active at the same time*/
/* -------------------------------------------------------------- */
void interrupt irq_service()
{
char c;
int_num++;
new_int_state=inportb(wBase+7)&0x0f;
int_c=new_int_state^now_int_state;
if ((int_c&0x1)!=0)
{
if ((new_int_state&0x1)!=0)/* now PC0 is change to high
{
CNT_H1++;
}
else
{
CNT_L1++;
}
invert=invert^1;
}
if ((int_c&0x2)!=0)
{
if ((new_int_state&0x2)!=0)/* now PC1 is change to high
{
CNT_H2++;
}
PIO-D56/PIO-D24 User Manual (Ver.2.1, Oct/2003, PPH-005-21)
/* PC0
/* PC1
/* PC2
/* PC3
/* PC0
/* PC1
/* PC2
/* PC3
/* Low_pulse counter
/* High_pulse counter
/* enable interrupt PC0,PC1
/* PC2,PC3
/* read all interrupt state */
/* compare which interrupt
/* signal be change
/* INT_CHAN_0 is active
/* now PC0 is change to low
/* to generate a high pulse
/* INT_CHAN_1 is active
/* IRQ2 */
= non-inverte input */
=
inverte input */
= non-inverte input */
=
inverte input */
= Low
= High
= Low
= High
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
---- 48

Advertisement

Table of Contents
loading

This manual is also suitable for:

Ome-pio-d24

Table of Contents