Adding developer notes about nested irqs

This commit is contained in:
Rodrigo Alfonso
2025-01-13 07:38:30 -03:00
parent 8e0fabdd4d
commit 0c3a3fcf6e

View File

@@ -32,4 +32,19 @@ LINK_CODE_IWRAM void LinkWireless::_onTimer() {
#endif
}
/**
* NOTES:
* When using `LINK_WIRELESS_ENABLE_NESTED_IRQ`:
* - Any user ISR can interrupt the library ISRs.
* - SERIAL ISR can interrupt TIMER ISR.
* -> This doesn't cause data races since TIMER ISR only works when
* there is no active async task.
* -> When TIMER ISR starts an async task (`transferAsync(...)`),
* nested interrupts are disabled (`REG_IME = 0`) and SERIAL cannot
* interrupt anymore.
* - TIMER interrupts are skipped if SERIAL ISR is running.
* - VBLANK interrupts are postponed if SERIAL or TIMER ISRs are running.
* - Nobody can interrupt VBLANK ISR.
*/
#endif