diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2022-06-07 15:45:04 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2022-06-08 10:25:41 +0200 |
commit | 8d6190129a1fe56289ea9c8c9a9f0b67b1b6be82 (patch) | |
tree | 2b1ea9270337d7edf56060c87e5d93466afc8a60 /bsps/arm/lpc32xx/irq/irq.c | |
parent | bsp/lpc32xx: bsp_interrupt_is_valid_vector() (diff) | |
download | rtems-8d6190129a1fe56289ea9c8c9a9f0b67b1b6be82.tar.bz2 |
bsp/lpc32xx: bsp_interrupt_vector_enable()
The interrupt enables are used to implement a priority scheme in
bsp_interrupt_dispatch(). Enable interrupts through
bsp_interrupt_vector_enable() only if they are not already enabled to
not interfere with the priority scheme while
bsp_interrupt_vector_enable() is called during interrupt dispatching.
Diffstat (limited to 'bsps/arm/lpc32xx/irq/irq.c')
-rw-r--r-- | bsps/arm/lpc32xx/irq/irq.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/bsps/arm/lpc32xx/irq/irq.c b/bsps/arm/lpc32xx/irq/irq.c index a62eee6dd5..2b047be559 100644 --- a/bsps/arm/lpc32xx/irq/irq.c +++ b/bsps/arm/lpc32xx/irq/irq.c @@ -334,8 +334,12 @@ rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number vector) bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector)); 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); + + if (!lpc32xx_irq_is_bit_set_in_field(vector, &lpc32xx_irq_enable)) { + lpc32xx_irq_set_bit_in_field(vector, &lpc32xx_irq_enable); + lpc32xx_irq_set_bit_in_register(vector, LPC32XX_IRQ_OFFSET_ER); + } + rtems_interrupt_enable(level); return RTEMS_SUCCESSFUL; |