Skip to content

Commit 858433a

Browse files
Old-DingRbb666
authored andcommitted
bsp: fm33lc026: Fix GPIO IRQ map lookup
Keep pin2irqindex within the pin_irq_map bounds and handle the first map entry without reading index -1. Pass encoded pin values to the IRQ map lookup path, and validate the lookup result before indexing the map. Generated-by: OpenAI Codex Signed-off-by: Old-Ding <35417409+Old-Ding@users.noreply.github.com>
1 parent 560fa88 commit 858433a

1 file changed

Lines changed: 6 additions & 5 deletions

File tree

‎bsp/fm33lc026/libraries/HAL_Drivers/drv_gpio.c‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -220,9 +220,10 @@ static void fm33_pin_mode(rt_device_t dev, rt_base_t pin, rt_uint8_t mode)
220220
rt_inline rt_int32_t pin2irqindex(rt_uint32_t pin)
221221
{
222222
rt_uint8_t irqindex;
223-
for (irqindex = 4 * PIN_PORT(pin); irqindex <= ITEM_NUM(pin_irq_map); irqindex++)
223+
for (irqindex = 4 * PIN_PORT(pin); irqindex < ITEM_NUM(pin_irq_map); irqindex++)
224224
{
225-
if (pin_irq_map[irqindex].pin >= pin && pin_irq_map[irqindex - 1].pin < pin)
225+
if (pin_irq_map[irqindex].pin >= pin &&
226+
(irqindex == 0 || pin_irq_map[irqindex - 1].pin < pin))
226227
{
227228
return irqindex;
228229
}
@@ -291,7 +292,7 @@ static rt_err_t fm33_pin_dettach_irq(struct rt_device *device, rt_base_t pin)
291292
return -RT_ENOSYS;
292293
}
293294

294-
irqindex = pin2irqindex(PIN_STPIN(pin));
295+
irqindex = pin2irqindex(pin);
295296
if (irqindex < 0 || irqindex >= ITEM_NUM(pin_irq_map))
296297
{
297298
return -RT_ENOSYS;
@@ -334,12 +335,12 @@ static rt_err_t fm33_pin_irq_enable(struct rt_device *device, rt_base_t pin,
334335

335336
if (enabled == PIN_IRQ_ENABLE)
336337
{
338+
irqindex = pin2irqindex(pin);
337339
if (irqindex < 0 || irqindex >= ITEM_NUM(pin_irq_map))
338340
{
339341
return -RT_ENOSYS;
340342
}
341343

342-
irqindex = pin2irqindex(pin);
343344
irqmap = &pin_irq_map[irqindex];
344345

345346
level = rt_hw_interrupt_disable();
@@ -384,7 +385,7 @@ static rt_err_t fm33_pin_irq_enable(struct rt_device *device, rt_base_t pin,
384385
}
385386
else if (enabled == PIN_IRQ_DISABLE)
386387
{
387-
irqmap = get_pin_irq_map(PIN_STPIN(pin));
388+
irqmap = get_pin_irq_map(pin);
388389
if (irqmap == RT_NULL)
389390
{
390391
return -RT_ENOSYS;

0 commit comments

Comments
 (0)