void irq_enable(int irq) { uintptr_t regaddr; uint32_t regval; uint32_t bit; if (stm32_irqinfo(irq, ®addr, &bit, NVIC_ENA_OFFSET) == 0) { /* 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. */ if (irq >= STM32_IRQ_FIRST) { putreg32(bit, regaddr); } else { regval = getreg32(regaddr); regval |= bit; putreg32(regval, regaddr); } } }
void up_disable_irq(int irq) { uintptr_t regaddr; uint32_t regval; uint32_t bit; if (stm32_irqinfo(irq, ®addr, &bit, NVIC_CLRENA_OFFSET) == 0) { /* 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 >= STM32_IRQ_FIRST) { putreg32(bit, regaddr); } else { regval = getreg32(regaddr); regval &= ~bit; putreg32(regval, regaddr); } } // stm32_dumpnvic("disable", irq); }
void up_enable_irq(int irq) { uint32_t regaddr; uint32_t regval; uint32_t bit; if (stm32_irqinfo(irq, ®addr, &bit) == 0) { /* Set the appropriate bit in the register to enable the interrupt */ regval = getreg32(regaddr); regval |= bit; putreg32(regval, regaddr); } stm32_dumpnvic("enable", irq); }
void up_enable_irq(int irq) { uintptr_t regaddr; uint32_t regval; uint32_t bit; if (stm32_irqinfo(irq, ®addr, &bit, NVIC_ENA_OFFSET) == 0) { /* 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. */ if (irq >= STM32_IRQ_FIRST) { putreg32(bit, regaddr); } else { regval = getreg32(regaddr); regval |= bit; putreg32(regval, regaddr); } } #ifdef CONFIG_STM32H7_GPIO_IRQ else { /* Maybe it is a (derived) GPIO IRQ */ stm32_gpioirqenable(irq); } #endif #if 0 /* Might be useful in early bring-up */ stm32_dumpnvic("enable", irq); #endif }