summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Kirspel <kevin-kirspel@idexx.com>2017-01-23 08:51:27 -0500
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-01-24 07:09:55 +0100
commit2f8f951b42ce7a6a2e23bc126f7d26578cade089 (patch)
tree0f7aba66eab9767bd57c06042820a5841e096bd5
parentnfsclient: Fix suspicious condition (diff)
downloadrtems-2f8f951b42ce7a6a2e23bc126f7d26578cade089.tar.bz2
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.
-rwxr-xr-x[-rw-r--r--]c/src/lib/libbsp/arm/lpc32xx/irq/irq.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/c/src/lib/libbsp/arm/lpc32xx/irq/irq.c b/c/src/lib/libbsp/arm/lpc32xx/irq/irq.c
index 77a0c19b3a..37080f4de2 100644..100755
--- a/c/src/lib/libbsp/arm/lpc32xx/irq/irq.c
+++ b/c/src/lib/libbsp/arm/lpc32xx/irq/irq.c
@@ -267,24 +267,28 @@ void bsp_interrupt_dispatch(void)
rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number vector)
{
- rtems_interrupt_level level;
+ if (lpc32xx_irq_is_valid(vector)) {
+ rtems_interrupt_level level;
- rtems_interrupt_disable(level);
- lpc32xx_irq_set_bit_in_register(vector, LPC32XX_IRQ_OFFSET_ER);
- lpc32xx_irq_set_bit_in_field(vector, &lpc32xx_irq_enable);
- rtems_interrupt_enable(level);
+ rtems_interrupt_disable(level);
+ lpc32xx_irq_set_bit_in_register(vector, LPC32XX_IRQ_OFFSET_ER);
+ lpc32xx_irq_set_bit_in_field(vector, &lpc32xx_irq_enable);
+ rtems_interrupt_enable(level);
+ }
return RTEMS_SUCCESSFUL;
}
rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector)
{
- rtems_interrupt_level level;
+ if (lpc32xx_irq_is_valid(vector)) {
+ rtems_interrupt_level level;
- rtems_interrupt_disable(level);
- lpc32xx_irq_clear_bit_in_field(vector, &lpc32xx_irq_enable);
- lpc32xx_irq_clear_bit_in_register(vector, LPC32XX_IRQ_OFFSET_ER);
- rtems_interrupt_enable(level);
+ rtems_interrupt_disable(level);
+ lpc32xx_irq_clear_bit_in_field(vector, &lpc32xx_irq_enable);
+ lpc32xx_irq_clear_bit_in_register(vector, LPC32XX_IRQ_OFFSET_ER);
+ rtems_interrupt_enable(level);
+ }
return RTEMS_SUCCESSFUL;
}