diff --git a/src/shared/drivers/WIZ5500/WIZ5500.cpp b/src/shared/drivers/WIZ5500/WIZ5500.cpp index 5019835e25a22d2772f42b7b037b44803c0786d9..d3a9a38f329fa5019ae7999763ed0124c5af2d5a 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 50dd23927a43f9dc732ea0bdac0cdcc6a05c23e7..bdc4172a4516170391a71df0e596515091795534 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 4c37f5f138938066609f95f0fc3272ee809c2c08..432407ef0aa915fd07402059ebca92f7b4132ec8 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});