bsp/virtex: Fix interrupt handling

Some modules like the XPS UART Lite use event triggered interrupts.  If
we acknowledge the interrupts after the interrupt service we may loose
these events.
This commit is contained in:
Sebastian Huber
2013-07-09 16:04:04 +02:00
parent 4fe3ad2f99
commit 296b60d72a

View File

@@ -81,11 +81,13 @@ static void BSP_irq_disable_at_opbintc (rtems_irq_number irqnum)
*/
static void BSP_irq_handle_at_opbintc(void)
{
uint32_t ipr, mask, i, c;
uint32_t ipr, i, c;
/* Get pending interrupts */
ipr = get_ipr();
c = 0;
mask = 0;
/* Acknowledge all pending interrupts now and service them afterwards */
set_iar(ipr);
for (i = 0;
(i < BSP_OPBINTC_PER_IRQ_NUMBER)
@@ -95,17 +97,11 @@ static void BSP_irq_handle_at_opbintc(void)
if ((ipr & c) != 0) {
/* interrupt is asserted */
mask |= c;
ipr &= ~c;
bsp_interrupt_handler_dispatch(i+BSP_OPBINTC_IRQ_LOWEST_OFFSET);
}
}
if (mask) {
/* ack all the interrupts we serviced */
set_iar(mask);
}
}
/*