diff --git a/lib/LinkWireless.cpp b/lib/LinkWireless.cpp index 1272099..dd6305d 100644 --- a/lib/LinkWireless.cpp +++ b/lib/LinkWireless.cpp @@ -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