diff options
| author | fengzi2003 <[email protected]> | 2017-09-08 16:15:31 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-09-08 16:15:31 +0800 |
| commit | 0779b5e90102ba8eacb48dac3bc379d3cf5a3ac0 (patch) | |
| tree | 109449f8def14a820cea8bce01ab156804cb2881 | |
| parent | 794835dde2c4791747bdf603df4cc3540d3954ed (diff) | |
Update stm32_eth.c
Fix some exception handling,such as when rt_sem_take failed in tx,transmission cannot be resumed。
| -rw-r--r-- | bsp/stm32f107/drivers/stm32_eth.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/bsp/stm32f107/drivers/stm32_eth.c b/bsp/stm32f107/drivers/stm32_eth.c index d9d1ef9e53..13ddb8deb7 100644 --- a/bsp/stm32f107/drivers/stm32_eth.c +++ b/bsp/stm32f107/drivers/stm32_eth.c @@ -3206,7 +3206,12 @@ rt_err_t rt_stm32_eth_tx( rt_device_t dev, struct pbuf* p) { rt_err_t result; result = rt_sem_take(&tx_buf_free, 2); - if (result != RT_EOK) return -RT_ERROR; + if (result != RT_EOK) + { + ETH_FlushTransmitFIFO(); // clear fifo + ETH_ResumeDMATransmission(); // resume dma + return -RT_ERROR; + } } offset = 0; |
