[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[microblaze-uclinux] microblaze interrupts



hi
 Seems that the macro's in microblaze_intc.h are incorrect:

/* Test if an IRQ is edge or level sensitive */
#define IRQ_LEVEL_SENSITIVE(irq,IRQ_KINDOFINTR)			\
        ((1 << irq) & IRQ_KINDOFINTR)

 IRQ_EDGE_SENSITIVE(irq,IRQ_KINDOFINTR)			\ 
	(!IRQ_LEVEL_SENSITIVE(irq,IRQ_KINDOFINTR)) */


The opb_intc data sheet has that 
XILINX_INTC_0_KIND_OF_INTR = 1  for edge and 0 for level.


Also the interrupt end routine:

void microblaze_intc_end(unsigned irq)
{
	if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) {
		microblaze_intc_enable_irq(irq);
		/* Level sensitive interrupts are acked after handling */
		if(IRQ_LEVEL_SENSITIVE(irq,CONFIG_XILINX_INTC_0_KIND_OF_INTR))
			microblaze_intc_ack_irq(irq);
	}
}

 Shouldn't one ack the existing interrupt before enabling the irq's
again. 
 Thoughts???

gesmith


-- 
George Smith
VP Engineering
Linear Acoustic, Inc

___________________________
microblaze-uclinux mailing list
microblaze-uclinux@itee.uq.edu.au
Project Home Page : http://www.itee.uq.edu.au/~jwilliams/mblaze-uclinux
Mailing List Archive : http://www.itee.uq.edu.au/~listarch/microblaze-uclinux/