summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfengzi2003 <[email protected]>2017-09-08 16:15:31 +0800
committerGitHub <[email protected]>2017-09-08 16:15:31 +0800
commit0779b5e90102ba8eacb48dac3bc379d3cf5a3ac0 (patch)
tree109449f8def14a820cea8bce01ab156804cb2881
parent794835dde2c4791747bdf603df4cc3540d3954ed (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.c7
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;