EBRU
Beginn
Digitaler Eingang
als Interruptquelle
PCI Interrupt
freigeben und
Handler zuweisen
Steht der Zähler auf 100?
PCI-Interrupt
sperren und
Handler löschen
Ist ein Fehler aufgetreten ?
Fehlerbehandlung
Ende
Beginn
Interrupthandler
void Inthandler(void)
Karteninterrupt
{
einlesen
Hat der richtige Kanal einen
Interrupt ?
}
Zähler
inkrementieren
Ende
PCIADIO – PCI Karte mit galv. getrennten analogen und digitalen IOs
pciadio-de-um-1v2.doc
...
unsigned char g_ucIntCounter[16];/* Globaler Zähler für Eingangs IRQ's */
...
unsigned char l_ucActIndex;
boolean l_bReturn;
...
/* Interrupteingang konfigurieren */
l_bReturn = pciadioDISetIrqChannelConfiguration(l_ucActIndex,1,1,1);
if(l_bReturn == TRUE)
{
g_ucIntCounter[0]=0;
/* PCI Interrupt freigeben und Handler übergeben */
l_bReturn= pciadioEnableIrq(l_ucActIndex,&Inthandler);
if(l_bReturn==0)
{
while(g_ucIntCounter[0]<100)
{
Sleep(1);
}
/* Eingangsinterrupt sperren */
l_bReturn = pciadioDISetIrqChannelConfiguration(l_ucActIndex,1,0,1);
if(l_bReturn==FALSE)
{
/* Fehlertext auslesen */
pciadioGetErrorMsg(l_strErrorTxt);
}
/* PCI-Interrupt sperren */
l_bReturn=pciadioDisableIrq(l_ucActIndex);
}
}
/* Ist ein Fehler aufgetreten ? */
if(l_bReturn==FALSE)
{
/* Fehlertext auslesen */
pciadioGetErrorMsg(l_strErrorTxt);
}
unsigned char l_ucActIndex;
PCIADIO_INT_STATE l_Int_State;
...
/* Auslesen des Karteninterrupts */
pciadioGetIrq(l_ucActIndex,& l_Int_State);
...
if((IntState.IRQIO_1_16 & ((unsigned long)0x01<<i))!=0)
{
g_ucIntCounter [i]++;
}
pciadioResetIRQ(ucActIndex);
...
Benutzerhandbuch
06.06.2011
Rev. 1.2
Seite 28 von 75