[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/