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.