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