diff --git a/README.md b/README.md index a1ccaa0..50e694a 100644 --- a/README.md +++ b/README.md @@ -312,7 +312,6 @@ You can update these values at any time without creating a new instance: - `LINK_WIRELESS_PUT_ISR_IN_IWRAM`: to put critical functions in IWRAM, which can significantly improve performance due to its faster access. This is disabled by default to conserve IWRAM space, which is limited, but it's enabled in demos to showcase its performance benefits. - If you enable this, make sure that `LinkWireless.cpp` gets compiled! For example, in a Makefile-based project, verify that the file is in your `SRCDIRS` list. - `LINK_WIRELESS_ENABLE_NESTED_IRQ`: to allow `LINK_WIRELESS_ISR_*` functions to be interrupted. This can be useful, for example, if your audio engine requires calling a VBlank handler with precise timing. - - This won't produce any effect if `LINK_WIRELESS_PUT_ISR_IN_IWRAM` is disabled. # 💻 LinkWirelessMultiboot diff --git a/lib/LinkRawWireless.hpp b/lib/LinkRawWireless.hpp index 7edce3c..a7a39ee 100644 --- a/lib/LinkRawWireless.hpp +++ b/lib/LinkRawWireless.hpp @@ -1176,10 +1176,8 @@ class LinkRawWireless { if (!acknowledge()) return -4; -#ifdef LINK_WIRELESS_PUT_ISR_IN_IWRAM #ifdef LINK_WIRELESS_ENABLE_NESTED_IRQ Link::_REG_IME = 1; -#endif #endif sendAsyncCommand(newData, _clockInversionSupport); @@ -1665,11 +1663,9 @@ class LinkRawWireless { } void transferAsync(u32 data, bool fromIRQ) { -#ifdef LINK_WIRELESS_PUT_ISR_IN_IWRAM #ifdef LINK_WIRELESS_ENABLE_NESTED_IRQ if (fromIRQ) Link::_REG_IME = 0; -#endif #endif linkSPI.transfer(data, []() { return false; }, true, true); diff --git a/lib/LinkWireless.cpp b/lib/LinkWireless.cpp index 23732d9..a3618fb 100644 --- a/lib/LinkWireless.cpp +++ b/lib/LinkWireless.cpp @@ -1,8 +1,12 @@ #include "LinkWireless.hpp" #ifdef LINK_WIRELESS_PUT_ISR_IN_IWRAM +#define _LINK_CODE LINK_CODE_IWRAM +#else +#define _LINK_CODE +#endif -LINK_CODE_IWRAM void LinkWireless::_onSerial() { +_LINK_CODE void LinkWireless::_onSerial() { #ifdef LINK_WIRELESS_ENABLE_NESTED_IRQ interrupt = true; LINK_BARRIER; @@ -46,5 +50,3 @@ void LinkWireless::_onTimer() { * - VBLANK interrupts are postponed if SERIAL or TIMER ISRs are running. * - Nobody can interrupt VBLANK ISR. */ - -#endif diff --git a/lib/LinkWireless.hpp b/lib/LinkWireless.hpp index e1c4ef1..40954dd 100644 --- a/lib/LinkWireless.hpp +++ b/lib/LinkWireless.hpp @@ -110,8 +110,6 @@ * enable). * This can be useful, for example, if your audio engine requires calling a * VBlank handler with precise timing. - * \warning This won't produce any effect if `LINK_WIRELESS_PUT_ISR_IN_IWRAM` is - * disabled. */ // #define LINK_WIRELESS_ENABLE_NESTED_IRQ #endif @@ -820,14 +818,12 @@ class LinkWireless { if (!isEnabled) return; -#ifdef LINK_WIRELESS_PUT_ISR_IN_IWRAM #ifdef LINK_WIRELESS_ENABLE_NESTED_IRQ if (interrupt) { pendingVBlank = true; return; } #endif -#endif #ifdef LINK_WIRELESS_PROFILING_ENABLED profileStart(); @@ -1057,13 +1053,10 @@ class LinkWireless { volatile Error lastError = Error::NONE; volatile bool isEnabled = false; -#ifdef LINK_WIRELESS_PUT_ISR_IN_IWRAM #ifdef LINK_WIRELESS_ENABLE_NESTED_IRQ volatile bool interrupt = false, pendingVBlank = false; #endif -#endif -#ifdef LINK_WIRELESS_PUT_ISR_IN_IWRAM #ifdef LINK_WIRELESS_ENABLE_NESTED_IRQ void irqEnd() { Link::_REG_IME = 0; @@ -1074,7 +1067,6 @@ class LinkWireless { pendingVBlank = false; } } -#endif #endif LINK_INLINE void processAsyncCommand(