[rtems commit] bsp/lpc32xx: Fix interrupt controller suppport

Sebastian Huber sebh at rtems.org
Tue Jan 24 06:10:12 UTC 2017


Module:    rtems
Branch:    master
Commit:    2f8f951b42ce7a6a2e23bc126f7d26578cade089
Changeset: http://git.rtems.org/rtems/commit/?id=2f8f951b42ce7a6a2e23bc126f7d26578cade089

Author:    Kevin Kirspel <kevin-kirspel at idexx.com>
Date:      Mon Jan 23 08:51:27 2017 -0500

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.

---

 c/src/lib/libbsp/arm/lpc32xx/irq/irq.c | 24 ++++++++++++++----------
 1 file 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
old mode 100644
new mode 100755
index 77a0c19..37080f4
--- 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;
 }




More information about the vc mailing list