programming ISR

Hi,

I have some problems in realizing an interrupt handler.
Maybe, someone can help me.




#include <stdio.h>
#include <sys/neutrino.h>
#include <hw/inout.h>

#define IRQ 5

extern int DATA_RECEIVED;

int id;

extern const sigevent *serint ( void *, int);

void serint();

/----------------------------------------------------------------------/

void IRQ_Enable()
{
id=InterruptAttach ( IRQ, serint, Null, 0, 0 );

oldmask1 = inp(0x21); /* old bitmasks from IRQ register*/

oldmask2 = inp(0xa1);

outp(0x21,0xdd); /* mask IRQ0,2,3,4,6,7
/
outp(0xa1,0xff); /
mask IRQ8,9,10,11,12,13,14,15
/
/
only 1:keyboard 5:board !
*/



return;
}

/----------------------------------------------------------------------/

void IRQ_Disable()
{
outp(0x21,oldmask1); /restore “normal” IRQ/
outp(0xa1,oldmask2); /restore “normal” IRQ/

InterruptDetach(id);


return;
}

/----------------------------------------------------------------------/

int serint (void)
{
/* toggle bit for dual channel DMA */
static int dma = 0;

/* clear DMA enable bit (see manual 6-12) in ADCCR (base+2) /
/
reprogramming not necessary → AUTOINIT ! /
out32((baseADCCR),(in32(baseADCCR) & 0xfb));


DATA_RECEIVED = 1; /
set DATA_RECEIVED flag */

}




Regards
Ron.