bsp/lpc32xx: Fix interrupt controller suppport

Enable/Disable vector routines now check for a valid vector. Without
these guards, the Enable/Disable vector routines will not work with the
interrupt server.
This commit is contained in:
Kevin Kirspel
2017-01-23 08:51:27 -05:00
committed by Sebastian Huber
parent c0151e6c64
commit 2f8f951b42

4
c/src/lib/libbsp/arm/lpc32xx/irq/irq.c Normal file → Executable file
View File

@@ -267,24 +267,28 @@ void bsp_interrupt_dispatch(void)
rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number vector) rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number vector)
{ {
if (lpc32xx_irq_is_valid(vector)) {
rtems_interrupt_level level; rtems_interrupt_level level;
rtems_interrupt_disable(level); rtems_interrupt_disable(level);
lpc32xx_irq_set_bit_in_register(vector, LPC32XX_IRQ_OFFSET_ER); lpc32xx_irq_set_bit_in_register(vector, LPC32XX_IRQ_OFFSET_ER);
lpc32xx_irq_set_bit_in_field(vector, &lpc32xx_irq_enable); lpc32xx_irq_set_bit_in_field(vector, &lpc32xx_irq_enable);
rtems_interrupt_enable(level); rtems_interrupt_enable(level);
}
return RTEMS_SUCCESSFUL; return RTEMS_SUCCESSFUL;
} }
rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector) rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector)
{ {
if (lpc32xx_irq_is_valid(vector)) {
rtems_interrupt_level level; rtems_interrupt_level level;
rtems_interrupt_disable(level); rtems_interrupt_disable(level);
lpc32xx_irq_clear_bit_in_field(vector, &lpc32xx_irq_enable); lpc32xx_irq_clear_bit_in_field(vector, &lpc32xx_irq_enable);
lpc32xx_irq_clear_bit_in_register(vector, LPC32XX_IRQ_OFFSET_ER); lpc32xx_irq_clear_bit_in_register(vector, LPC32XX_IRQ_OFFSET_ER);
rtems_interrupt_enable(level); rtems_interrupt_enable(level);
}
return RTEMS_SUCCESSFUL; return RTEMS_SUCCESSFUL;
} }