diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2014-01-15 15:26:32 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2014-01-15 15:26:32 -0600 |
commit | fb8316094157de2df6b613de6914dadbd8ff3476 (patch) | |
tree | 6aee0957a9dc6c920479a31d2ee1b1007086d303 /nuttx/arch/arm/src/kinetis | |
parent | aaa9d752a88b5fe03846364c6d6418ef0e229409 (diff) | |
download | nuttx-fb8316094157de2df6b613de6914dadbd8ff3476.tar.gz nuttx-fb8316094157de2df6b613de6914dadbd8ff3476.tar.bz2 nuttx-fb8316094157de2df6b613de6914dadbd8ff3476.zip |
Fix error in last ARMv7-M up_disable_irq checkin
Diffstat (limited to 'nuttx/arch/arm/src/kinetis')
-rw-r--r-- | nuttx/arch/arm/src/kinetis/kinetis_irq.c | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/nuttx/arch/arm/src/kinetis/kinetis_irq.c b/nuttx/arch/arm/src/kinetis/kinetis_irq.c index 9e6ab4e04..3ab9d3cba 100644 --- a/nuttx/arch/arm/src/kinetis/kinetis_irq.c +++ b/nuttx/arch/arm/src/kinetis/kinetis_irq.c @@ -450,28 +450,22 @@ void up_disable_irq(int irq) if (kinetis_irqinfo(irq, ®addr, &bit, NVIC_CLRENA_OFFSET) == 0) { - /* Modify the appropriate bit in the register to disable the interrupt */ - - regval = getreg32(regaddr); - - /* This is awkward... For normal interrupts, we need to set the bit - * in the associated Interrupt Clear Enable register. For other - * exceptions, we need to clear the bit in the System Handler Control - * and State Register. + /* Modify the appropriate bit in the register to disable the interrupt. + * For normal interrupts, we need to set the bit in the associated + * Interrupt Clear Enable register. For other exceptions, we need to + * clear the bit in the System Handler Control and State Register. */ if (irq >= KINETIS_IRQ_EXTINT) { - regval |= bit; + putreg32(bit, regaddr); } else { + regval = getreg32(regaddr); regval &= ~bit; + putreg32(regval, regaddr); } - - /* Save the appropriately modified register */ - - putreg32(regval, regaddr); } kinetis_dumpnvic("disable", irq); @@ -493,11 +487,22 @@ void up_enable_irq(int irq) if (kinetis_irqinfo(irq, ®addr, &bit, NVIC_ENA_OFFSET) == 0) { - /* Set the appropriate bit in the register to enable the interrupt */ + /* Modify the appropriate bit in the register to enable the interrupt. + * For normal interrupts, we need to set the bit in the associated + * Interrupt Set Enable register. For other exceptions, we need to + * set the bit in the System Handler Control and State Register. + */ - regval = getreg32(regaddr); - regval |= bit; - putreg32(regval, regaddr); + if (irq >= KINETIS_IRQ_EXTINT) + { + putreg32(bit, regaddr); + } + else + { + regval = getreg32(regaddr); + regval |= bit; + putreg32(regval, regaddr); + } } kinetis_dumpnvic("enable", irq); |