-
Notifications
You must be signed in to change notification settings - Fork 7.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[ESP32S3] v4.4 Interrupt mapping mismatch with reference manual (IDFGH-11724) #12832
Comments
@KonssnoK Hi, you are right that these tables do indeed contain some information that is no longer correct on later chips. Cleaning this up is a high-priority task in our backlog and we should get to it soon. I'll make sure to link and close this issue as well when we create that fix. |
hello @ESP-Marius , we are currently blocked because updating the master branch of v4.4 consumed an additional interrupt which we didnt expect. Or at least tell us if there are more level-trigger interrupts available, like 10, 22. |
This would be the table according to the technical reference manual
EDIT: This means that both the document and the code are wrong.. |
New table based on soc.h Please note that in this table, the amount of interrupts that can be allocated with intr_alloc is the same as the original table, which means you cannot allocate more than 11 interrupts (-3 for RTOS, -2 for WDT).
|
is there any update on this issue? |
Just 2c, I think the TRM might be incorrect here, considering these definitions — they were auto-generated at the time the CPU was configured, and it's unlikely there is a mistake there. Sharing the interrupts between multiple peripherals is probably the best option to try if you are running out of interrupts. For more info, please see this section of the docs: https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/system/intr_alloc.html#troubleshooting-interrupt-allocation. |
sharing interrupts becomes difficult when we use a lot of esp-idf components. Here is a list of our interrupts, to show that we don t really have much custom stuff:
|
in alternative we will have to try to allocate more interrupts on the second core, but that is more architecturally demanding Also please note that the esp-idf drivers do not allow allocation of interrupts higher than level 3, meaning that some available interrupts are not actually used. |
Any update on this? |
In this case, the
This is intentional. On Xtensa arch ESP32 targets, critical sections do not mask out interrupts higher than level 3. Thus they are reserved for either low latency user interrupts written in assembly or internal system use.
If you are unable to share interrupts between various drivers/system services, then this will be the only solution. However, sharing interrupts between drivers/system services is the easier option. Some system services (e.g., TWDT) won't share interrupts due to latency reasons. However, most drivers can be configured to share interrupts on install. Look for the For example
|
thanks @Dazza0 , we will look into the shared interrupts, but the main focus of the issue is on knowing with certainty which are the interrupts of the device we have in production. |
Hello @KonssnoK , This has been fixed on |
thanks @o-marshmallow , i'll check it out. |
Answers checklist.
General issue report
Hello,
following the issue #12830
i started looking at documentation and code for the 32 theoretic interrupts available PER CORE in ESP32-S3
in the doc it is pretty straight-forward:
https://www.espressif.com/sites/default/files/documentation/esp32-s3_technical_reference_manual_en.pdf
If it is not reserved, it s a level-triggered interrupt.
In the code instead:
interrupt_descriptor_table.c
both EDGE and LEVEL interrupts are defined.
I am used to chipset having a register to define if an interrupts should be level or edge, but the esp32s3 doesn t seems to have one.
What is the truth?
Is the documentation wrong or is the code a copypaste from the code of esp32 ?
Thanks
The text was updated successfully, but these errors were encountered: