From 9bd15141a3abfbdc15a66d4f7f701c2b5568635f Mon Sep 17 00:00:00 2001
From: Marinus Enzinger <m.enzinger@campus.lmu.de>
Date: Thu, 10 May 2018 22:58:42 +0200
Subject: [PATCH] [w5100] Fixed RX interrupt handling

---
 drivers/w5100/w5100.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/w5100/w5100.c b/drivers/w5100/w5100.c
index e391752fa9..aec5ec2598 100644
--- a/drivers/w5100/w5100.c
+++ b/drivers/w5100/w5100.c
@@ -34,7 +34,6 @@
 #define ENABLE_DEBUG        (0)
 #include "debug.h"
 
-
 #define SPI_CONF            SPI_MODE_0
 #define RMSR_DEFAULT_VALUE  (0x55)
 
@@ -285,14 +284,21 @@ static void isr(netdev_t *netdev)
     uint8_t ir;
     w5100_t *dev = (w5100_t *)netdev;
 
-    /* we only react on RX events, and if we see one, we read from the RX buffer
-     * until it is empty */
+    /* read interrupt register */
     spi_acquire(dev->p.spi, dev->p.cs, SPI_CONF, dev->p.clk);
     ir = rreg(dev, S0_IR);
     spi_release(dev->p.spi);
+
+    /* we only react on RX events, and if we see one, we read from the RX buffer
+     * until it is empty */
     while (ir & IR_RECV) {
         DEBUG("[w5100] netdev RX complete\n");
         netdev->event_callback(netdev, NETDEV_EVENT_RX_COMPLETE);
+
+        /* reread interrupt register */
+        spi_acquire(dev->p.spi, dev->p.cs, SPI_CONF, dev->p.clk);
+        ir = rreg(dev, S0_IR);
+        spi_release(dev->p.spi);
     }
 }
 
-- 
GitLab