乐鑫技术交流
直播中

石利军

7年用户 902经验值
私信 关注
[问答]

ESP32如何控制外部中断触发在指定core上?

ESP32如何控制外部中断触发在指定core上?
在gpio_example_main.c历程中 按照参考手册将APP_GPIO_INTERRUPT_APP_MAP_REG寄存器配置为0x0d后 在isr中查询
DPORT_PRO_INTR_STATUS_0_REG寄存器的值为0x30400000
DPORT_APP_INTR_STATUS_0_REG寄存器的值为0x30000000
gpio中断任然触发在PROCORE上

应该如何配置才能使中断触发在APPCORE上
                                                                                                                                                                                                                        
               

回帖(1)

爱与友人

2024-6-21 17:20:13
要实现ESP32在指定core上触发外部中断,您需要按照以下步骤进行配置:

1. 配置GPIO为中断模式:首先,您需要配置GPIO为中断模式。这可以通过调用`gpio_config()`函数实现。例如,如果您要将GPIO 4配置为中断模式,可以这样写:

```c
gpio_config_t io_conf;
io_conf.intr_type = GPIO_PIN_INTR_POSEDGE; // 配置中断类型,这里以上升沿为例
io_conf.mode = GPIO_MODE_INPUT;
io_conf.pin_bit_mask = (1ULL< io_conf.pull_down_en = 0;
io_conf.pull_up_en = 1;
gpio_config(&io_conf);
```

2. 设置中断服务程序(ISR):接下来,您需要设置中断服务程序。这可以通过调用`gpio_install_isr_service()`函数实现。然后,注册ISR函数,例如:

```c
gpio_isr_handle_t gpio_isr_handle;
gpio_install_isr_service(0);
gpio_set_intr_type(GPIO_NUM_4, GPIO_PIN_INTR_POSEDGE);
gpio_isr_register(GPIO_NUM_4, &your_isr_function, NULL, 0, &gpio_isr_handle);
```

3. 配置中断触发在指定core上:要将中断触发在指定core上,您需要设置`APP_GPIO_INTERRUPT_APP_MAP_REG`寄存器。根据您的描述,您已经尝试将该寄存器设置为0x0d,但中断仍然在PRO CPU上触发。这可能是因为您的设置没有生效。请确保在设置寄存器之前,已经正确地安装了ISR服务并注册了ISR函数。

4. 检查中断状态:在ISR中,您可以查询`DPORT_PRO_INTR_STATUS_0_REG`和`DPORT_APP_INTR_STATUS_0_REG`寄存器的值,以确定中断是否在预期的core上触发。如果中断在APP CPU上触发,`DPORT_APP_INTR_STATUS_0_REG`寄存器的值应该不为0。

5. 如果以上步骤仍然无法解决问题,您可以尝试升级ESP-IDF框架到最新版本,或者查看ESP32的官方文档和社区论坛,看看是否有其他开发者遇到了类似的问题。

总之,要实现ESP32在指定core上触发外部中断,您需要正确配置GPIO、安装ISR服务、注册ISR函数,并设置`APP_GPIO_INTERRUPT_APP_MAP_REG`寄存器。如果问题仍然存在,请查阅官方文档或寻求社区支持。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分