From 92210b28421c53a3fe5045ddbbe62166c98e1701 Mon Sep 17 00:00:00 2001 From: Davide Mor <davide.mor@skywarder.eu> Date: Sat, 17 May 2025 15:10:38 +0200 Subject: [PATCH] [wiz5500] Added separate variable for INTn handler, to allow for proper synchronization --- src/shared/drivers/WIZ5500/WIZ5500.cpp | 9 ++++++--- src/shared/drivers/WIZ5500/WIZ5500.h | 3 +++ src/tests/drivers/test-wiz5500.cpp | 1 - 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/shared/drivers/WIZ5500/WIZ5500.cpp b/src/shared/drivers/WIZ5500/WIZ5500.cpp index 5019835e2..d3a9a38f3 100644 --- a/src/shared/drivers/WIZ5500/WIZ5500.cpp +++ b/src/shared/drivers/WIZ5500/WIZ5500.cpp @@ -127,14 +127,16 @@ void Wiz5500::reset() void Wiz5500::handleINTn() { - if (interrupt_service_thread) + if (intn_thread) { - interrupt_service_thread->IRQwakeup(); - if (interrupt_service_thread->IRQgetPriority() > + intn_thread->IRQwakeup(); + if (intn_thread->IRQgetPriority() > miosix::Thread::IRQgetCurrentThread()->IRQgetPriority()) { miosix::Scheduler::IRQfindNextThread(); } + + intn_thread = nullptr; } } @@ -443,6 +445,7 @@ TimedWaitResult Wiz5500::waitForINTn(Lock<FastMutex>& l, long long until) Unlock<FastMutex> ul(l); FastInterruptDisableLock il; + intn_thread = Thread::IRQgetCurrentThread(); while (intn.value() != 0 && result == TimedWaitResult::NoTimeout) { long long now = getTime(); diff --git a/src/shared/drivers/WIZ5500/WIZ5500.h b/src/shared/drivers/WIZ5500/WIZ5500.h index 50dd23927..bdc4172a4 100644 --- a/src/shared/drivers/WIZ5500/WIZ5500.h +++ b/src/shared/drivers/WIZ5500/WIZ5500.h @@ -275,7 +275,10 @@ private: void spiWriteIp(uint8_t block, uint16_t address, WizIp data); void spiWriteMac(uint8_t block, uint16_t address, WizMac data); + // Thread currently servicing interrupts miosix::Thread* interrupt_service_thread = nullptr; + // Thread currently waiting for an INTn + miosix::Thread* intn_thread = nullptr; struct ThreadWaitInfo { diff --git a/src/tests/drivers/test-wiz5500.cpp b/src/tests/drivers/test-wiz5500.cpp index 4c37f5f13..432407ef0 100644 --- a/src/tests/drivers/test-wiz5500.cpp +++ b/src/tests/drivers/test-wiz5500.cpp @@ -290,7 +290,6 @@ int main() std::cout << ip << ":" << port << std::endl; }); - wiz->setOnIpConflict([]() { printf("[wiz5500] Ip conflict\n"); }); wiz->setGatewayIp({192, 168, 1, 1}); -- GitLab