]> granicus.if.org Git - esp-idf/commitdiff
component/emac: fix process rx err
authorshangke <shangke@espressif.com>
Wed, 15 Nov 2017 03:04:32 +0000 (11:04 +0800)
committershangke <shangke@espressif.com>
Wed, 15 Nov 2017 03:04:32 +0000 (11:04 +0800)
components/ethernet/emac_main.c

index 044c0337bdde43c9c2b643f0f61d54bf6a7ab70c..c58c1315400ef15e88c0e142d69e42889ad093f7 100644 (file)
@@ -481,6 +481,10 @@ static void emac_process_rx_unavail(void)
 
     while (emac_config.cnt_rx < DMA_RX_BUF_NUM) {
 
+        if (emac_config.dma_erx[emac_config.dirty_rx].basic.desc0 == EMAC_DESC_RX_OWN) {
+            break;
+        }
+
         emac_config.cnt_rx++;
         if (emac_config.cnt_rx > DMA_RX_BUF_NUM) {
             ESP_LOGE(TAG, "emac rx unavail buf err !!\n");
@@ -530,6 +534,10 @@ static void emac_process_rx(void)
             if ((emac_config.dma_erx[emac_config.dirty_rx].basic.desc0 & EMAC_DESC_RX_OWN) == 0) {
                 while (emac_config.cnt_rx < DMA_RX_BUF_NUM) {
 
+                    if (emac_config.dma_erx[emac_config.dirty_rx].basic.desc0 == EMAC_DESC_RX_OWN) {
+                        break;
+                    }
+
                     emac_config.cnt_rx++;
                     if (emac_config.cnt_rx > DMA_RX_BUF_NUM) {
                         ESP_LOGE(TAG, "emac rx buf err!!!\n");