diff --git a/bsp/Infineon/libraries/HAL_Drivers/drv_gpio.c b/bsp/Infineon/libraries/HAL_Drivers/drv_gpio.c index e4d7cddf25f..327fcd230b0 100644 --- a/bsp/Infineon/libraries/HAL_Drivers/drv_gpio.c +++ b/bsp/Infineon/libraries/HAL_Drivers/drv_gpio.c @@ -6,6 +6,7 @@ * Change Logs: * Date Author Notes * 2022-07-1 Rbb666 first version + * 2025-04-24 Passionate0424 fix ifx_pin_irq_enable */ #include "drv_gpio.h" @@ -320,7 +321,7 @@ static rt_err_t ifx_pin_irq_enable(struct rt_device *device, rt_base_t pin, irqmap = &pin_irq_map[gpio_port]; #if !defined(COMPONENT_CAT1C) - IRQn_Type irqn = (IRQn_Type)(irqmap->irqno + PORT_GET(irqmap->port)); + IRQn_Type irqn = irqmap->irqno; irq_cb_data[irqn].callback = irq_callback; irq_cb_data[irqn].callback_arg = (rt_uint16_t *)&pin_irq_map[gpio_port].port; cyhal_gpio_register_callback(gpio_pin, &irq_cb_data[irqn]); @@ -353,10 +354,15 @@ static rt_err_t ifx_pin_irq_enable(struct rt_device *device, rt_base_t pin, { level = rt_hw_interrupt_disable(); - Cy_GPIO_Port_Deinit(CYHAL_GET_PORTADDR(gpio_pin)); + irqmap = &pin_irq_map[gpio_port]; #if !defined(COMPONENT_CAT1C) - IRQn_Type irqn = (IRQn_Type)(irqmap->irqno + PORT_GET(irqmap->port)); + IRQn_Type irqn = irqmap->irqno; + if (irqn < 0 || irqn >= PIN_IFXPORT_MAX) + { + rt_hw_interrupt_enable(level); + return -RT_EINVAL; + } _cyhal_irq_disable(irqn); #endif rt_hw_interrupt_enable(level);