diff options
author | Kevin Kirspel <kevin-kirspel@idexx.com> | 2017-01-23 08:51:27 -0500 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-01-24 07:09:55 +0100 |
commit | 2f8f951b42ce7a6a2e23bc126f7d26578cade089 (patch) | |
tree | 0f7aba66eab9767bd57c06042820a5841e096bd5 | |
parent | nfsclient: Fix suspicious condition (diff) | |
download | rtems-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.c | 24 |
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; } |