forked from Imagelibrary/rtems
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:
committed by
Sebastian Huber
parent
c0151e6c64
commit
2f8f951b42
4
c/src/lib/libbsp/arm/lpc32xx/irq/irq.c
Normal file → Executable file
4
c/src/lib/libbsp/arm/lpc32xx/irq/irq.c
Normal file → Executable 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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user