Page 1 of 2

关于 中断的 疑问

Posted: Thu Jul 15, 2021 7:55 am
by yogi_yi
ESP32S2 有六级中断, 如何设置中断优先级? 比如在GPIO例程里 ,这种中断优先级是如何设置的呢?
中断寄存器列表里 ,只有简称,哪里能获取这个名称所对应的功能??

Re: 关于 中断的 疑问

Posted: Tue Jul 20, 2021 6:27 am
by ESP_Eavo
您好,可参考文档设置:https://docs.espressif.com/projects/esp ... alloc.html

Re: 关于 中断的 疑问

Posted: Tue Jul 20, 2021 12:23 pm
by ESP_Gargamel
可以通过设置 flag,ESP_INTR_FLAG_LEVELx,当前可设置低 level 中断,即 1-3。

Re: 关于 中断的 疑问

Posted: Fri Jul 23, 2021 11:27 am
by yogi_yi
1、我始终没有发现 即 1-3 这个 中断级别是在哪里加入的 ,还是随机分配的呢 。可否帮我摘录IDF 中的 一段 代码。

2、esp_intr_mark_shared(int intno, int cpu, bool is_in_iram)
Mark an interrupt as a shared interrupt.

This will mark a certain interrupt on the specified CPU as an interrupt that can be used to hook shared interrupt handlers to.

GPIO 例程里 只用了一个 hanlers ,是不是就是这里说的共享 ,但我又没发现调用该函数。

3、ESPS32S2中 在介绍中断 写道 分配多个外部中断源 Source_Xn 至 CPU 外部中断 指的是 esp_intr_alloc 函数中 If this is ESP_INTR_FLAG_SHARED, it will allocate a shared interrupt of level 1. ???

Re: 关于 中断的 疑问

Posted: Fri Jul 23, 2021 12:48 pm
by ESP_Gargamel
1、有个描述中断属性的表:interrupt_descriptor_table,每个中断的 level 是固定的,软件会根据你设定的 level 到这里来找,找到合适的就使用那个 int,具体你看下函数 get_available_int
2、不是 share 的,gpio 的 isr 在 gpio_intr_service 里,会根据获取到的 gpio 的状态,再用 gpio_isr_handler_add 里注册的 handler 来处理
3、ESP_INTR_FLAG_SHARED 意思是说同一个 source 的中断,可以有多个 handler,中断发生后,可以依次处理这些 handler

Re: 关于 中断的 疑问

Posted: Mon Jul 26, 2021 6:47 am
by yogi_yi
看郁闷了 ,
我现在很希望知道 ,我不看API 函数,单 想将某个 IO 口 设置成 输入 ,上升沿 中断。
应该涉及操作哪几个寄存器。并注释下作用吧

Re: 关于 中断的 疑问

Posted: Mon Jul 26, 2021 7:53 am
by ESP_Gargamel
如果你对 GPIO 不是太熟悉,不建议直接操作寄存器。你现在使用相关 API 有什么问题?希望达到什么目的?

Re: 关于 中断的 疑问

Posted: Mon Jul 26, 2021 8:08 am
by yogi_yi
我想对你们的芯片认真熟悉,怎么都不为过的。
我现在已经知道GPIO的中断配置是在GPIO对应的寄存器里。
但我对 ESP32S2中提到的 中断优先级 ,如何设置 一直处于 迷茫中。
你们 文档 48 页 提到的 94个中断源 ,只有简称 ,其对应的功能 ,在哪里获知?

Re: 关于 中断的 疑问

Posted: Mon Jul 26, 2021 8:39 am
by ESP_Gargamel
需要有探究的精神。
是否有详细阅读 TRM?https://www.espressif.com/sites/default ... ual_cn.pdf 的 中断矩阵 (INTERRUPT) 章节,当前 TRM 最新版本为 1.0。
你所说的 文档 48 页 ,是哪个文档的哪个版本?

Re: 关于 中断的 疑问

Posted: Mon Jul 26, 2021 9:05 am
by yogi_yi
ESP32-S2 技术参考手册 的 48 页。
可参考文档设置:https://docs.espressif.com/projects/esp ... alloc.html。
esp_intr_alloc_intrstatus函数中 写道
An ORred mask of the ESP_INTR_FLAG_* defines. These restrict the choice of interrupts that this routine can choose from. If this value is 0, it will default to allocating a non-shared interrupt of level 1, 2 or 3.

该函数中 对 1,2,3 优先级的 设置 是 如何实现的 ,是具体指定,还是 随机? 或是某种判断机制