stm32/i2c: Move I2C IRQ handlers from stm32_it.c to i2c.c.

And add MP_STATIC_ASSERT to statically check that the IRQ names are correct
on the MCU that it's compiled for.

Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
Damien George 2025-05-27 11:06:08 +10:00
parent 1b578fe2c0
commit 9b1778fc77
2 changed files with 68 additions and 61 deletions

View file

@ -590,4 +590,72 @@ int i2c_find_peripheral(mp_obj_t id) {
return i2c_id; return i2c_id;
} }
#if MICROPY_PY_PYB_LEGACY
#if defined(MICROPY_HW_I2C1_SCL)
void I2C1_EV_IRQHandler(void) {
MP_STATIC_ASSERT(I2C1_EV_IRQn > 0);
IRQ_ENTER(I2C1_EV_IRQn);
i2c_ev_irq_handler(1);
IRQ_EXIT(I2C1_EV_IRQn);
}
void I2C1_ER_IRQHandler(void) {
MP_STATIC_ASSERT(I2C1_ER_IRQn > 0);
IRQ_ENTER(I2C1_ER_IRQn);
i2c_er_irq_handler(1);
IRQ_EXIT(I2C1_ER_IRQn);
}
#endif // defined(MICROPY_HW_I2C1_SCL)
#if defined(MICROPY_HW_I2C2_SCL)
void I2C2_EV_IRQHandler(void) {
MP_STATIC_ASSERT(I2C2_EV_IRQn > 0);
IRQ_ENTER(I2C2_EV_IRQn);
i2c_ev_irq_handler(2);
IRQ_EXIT(I2C2_EV_IRQn);
}
void I2C2_ER_IRQHandler(void) {
MP_STATIC_ASSERT(I2C2_ER_IRQn > 0);
IRQ_ENTER(I2C2_ER_IRQn);
i2c_er_irq_handler(2);
IRQ_EXIT(I2C2_ER_IRQn);
}
#endif // defined(MICROPY_HW_I2C2_SCL)
#if defined(MICROPY_HW_I2C3_SCL)
void I2C3_EV_IRQHandler(void) {
MP_STATIC_ASSERT(I2C3_EV_IRQn > 0);
IRQ_ENTER(I2C3_EV_IRQn);
i2c_ev_irq_handler(3);
IRQ_EXIT(I2C3_EV_IRQn);
}
void I2C3_ER_IRQHandler(void) {
MP_STATIC_ASSERT(I2C3_ER_IRQn > 0);
IRQ_ENTER(I2C3_ER_IRQn);
i2c_er_irq_handler(3);
IRQ_EXIT(I2C3_ER_IRQn);
}
#endif // defined(MICROPY_HW_I2C3_SCL)
#if defined(MICROPY_HW_I2C4_SCL)
void I2C4_EV_IRQHandler(void) {
MP_STATIC_ASSERT(I2C4_EV_IRQn > 0);
IRQ_ENTER(I2C4_EV_IRQn);
i2c_ev_irq_handler(4);
IRQ_EXIT(I2C4_EV_IRQn);
}
void I2C4_ER_IRQHandler(void) {
MP_STATIC_ASSERT(I2C4_ER_IRQn > 0);
IRQ_ENTER(I2C4_ER_IRQn);
i2c_er_irq_handler(4);
IRQ_EXIT(I2C4_ER_IRQn);
}
#endif // defined(MICROPY_HW_I2C4_SCL)
#endif // MICROPY_PY_PYB_LEGACY
#endif // MICROPY_HW_ENABLE_HW_I2C #endif // MICROPY_HW_ENABLE_HW_I2C

View file

@ -80,7 +80,6 @@
#include "uart.h" #include "uart.h"
#include "storage.h" #include "storage.h"
#include "dma.h" #include "dma.h"
#include "i2c.h"
#include "usb.h" #include "usb.h"
#if defined(MICROPY_HW_USB_FS) #if defined(MICROPY_HW_USB_FS)
@ -987,63 +986,3 @@ void LPUART2_IRQHandler(void) {
IRQ_EXIT(LPUART2_IRQn); IRQ_EXIT(LPUART2_IRQn);
} }
#endif #endif
#if MICROPY_PY_PYB_LEGACY
#if defined(MICROPY_HW_I2C1_SCL)
void I2C1_EV_IRQHandler(void) {
IRQ_ENTER(I2C1_EV_IRQn);
i2c_ev_irq_handler(1);
IRQ_EXIT(I2C1_EV_IRQn);
}
void I2C1_ER_IRQHandler(void) {
IRQ_ENTER(I2C1_ER_IRQn);
i2c_er_irq_handler(1);
IRQ_EXIT(I2C1_ER_IRQn);
}
#endif // defined(MICROPY_HW_I2C1_SCL)
#if defined(MICROPY_HW_I2C2_SCL)
void I2C2_EV_IRQHandler(void) {
IRQ_ENTER(I2C2_EV_IRQn);
i2c_ev_irq_handler(2);
IRQ_EXIT(I2C2_EV_IRQn);
}
void I2C2_ER_IRQHandler(void) {
IRQ_ENTER(I2C2_ER_IRQn);
i2c_er_irq_handler(2);
IRQ_EXIT(I2C2_ER_IRQn);
}
#endif // defined(MICROPY_HW_I2C2_SCL)
#if defined(MICROPY_HW_I2C3_SCL)
void I2C3_EV_IRQHandler(void) {
IRQ_ENTER(I2C3_EV_IRQn);
i2c_ev_irq_handler(3);
IRQ_EXIT(I2C3_EV_IRQn);
}
void I2C3_ER_IRQHandler(void) {
IRQ_ENTER(I2C3_ER_IRQn);
i2c_er_irq_handler(3);
IRQ_EXIT(I2C3_ER_IRQn);
}
#endif // defined(MICROPY_HW_I2C3_SCL)
#if defined(MICROPY_HW_I2C4_SCL)
void I2C4_EV_IRQHandler(void) {
IRQ_ENTER(I2C4_EV_IRQn);
i2c_ev_irq_handler(4);
IRQ_EXIT(I2C4_EV_IRQn);
}
void I2C4_ER_IRQHandler(void) {
IRQ_ENTER(I2C4_ER_IRQn);
i2c_er_irq_handler(4);
IRQ_EXIT(I2C4_ER_IRQn);
}
#endif // defined(MICROPY_HW_I2C4_SCL)
#endif // MICROPY_PY_PYB_LEGACY