Skip to content

Commit c63bee6

Browse files
committed
STM32H7: dual core: handle interrupts on CM4
1 parent cf72a29 commit c63bee6

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

targets/TARGET_STM/gpio_irq_api.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,9 +149,13 @@ static void handle_interrupt_in(uint32_t irq_index, uint32_t max_num_pin_line)
149149
#else /* TARGET_STM32L5 */
150150

151151
// Clear interrupt flag
152+
#if defined(DUAL_CORE) && defined(CORE_CM4)
153+
if (__HAL_GPIO_EXTID2_GET_FLAG(pin) != RESET) {
154+
__HAL_GPIO_EXTID2_CLEAR_FLAG(pin);
155+
#else
152156
if (__HAL_GPIO_EXTI_GET_FLAG(pin) != RESET) {
153157
__HAL_GPIO_EXTI_CLEAR_FLAG(pin);
154-
158+
#endif
155159
if (gpio_channel->channel_ids[gpio_idx] == 0) {
156160
continue;
157161
}
@@ -501,6 +505,10 @@ void gpio_irq_enable(gpio_irq_t *obj)
501505

502506
LL_EXTI_EnableIT_0_31(1 << pin_index);
503507

508+
#if defined(DUAL_CORE) && defined(CORE_CM4)
509+
LL_C2_EXTI_EnableIT_0_31(1 << pin_index);
510+
#endif
511+
504512
/* Restore previous edge interrupt configuration if applicable */
505513
if (obj->event & IRQ_RISE) {
506514
LL_EXTI_EnableRisingTrig_0_31(1 << STM_PIN(obj->pin));
@@ -525,6 +533,10 @@ void gpio_irq_disable(gpio_irq_t *obj)
525533
LL_EXTI_DisableFallingTrig_0_31(1 << pin_index);
526534
LL_EXTI_DisableIT_0_31(1 << pin_index);
527535

536+
#if defined(DUAL_CORE) && defined(CORE_CM4)
537+
LL_C2_EXTI_DisableIT_0_31(1 << pin_index);
538+
#endif
539+
528540
uint32_t pin = (uint32_t)(1 << (gpio_channel->channel_pin[gpio_idx]));
529541

530542
// Clear interrupt flag

0 commit comments

Comments
 (0)