diff --git a/bsp/raspberry-pi/raspi4-32/driver/drv_eth.c b/bsp/raspberry-pi/raspi4-32/driver/drv_eth.c index 20ae855b6cc4145806779876ee47c9efaec163cf..1def980194bea1879d87ac878d307f0baffb429e 100644 --- a/bsp/raspberry-pi/raspi4-32/driver/drv_eth.c +++ b/bsp/raspberry-pi/raspi4-32/driver/drv_eth.c @@ -635,12 +635,13 @@ rt_err_t rt_eth_tx(rt_device_t device, struct pbuf *p) /* lock eth device */ if (link_flag == 1) { + rt_base_t level = rt_hw_interrupt_disable();; rt_sem_take(&sem_lock, RT_WAITING_FOREVER); pbuf_copy_partial(p, (void *)&send_cache_pbuf[0], p->tot_len, 0); rt_memcpy((void *)sendbuf, send_cache_pbuf, p->tot_len); - bcmgenet_gmac_eth_send((void *)sendbuf, p->tot_len); rt_sem_release(&sem_lock); + rt_hw_interrupt_enable(level); } return RT_EOK; } @@ -653,6 +654,7 @@ struct pbuf *rt_eth_rx(rt_device_t device) struct pbuf *pbuf = RT_NULL; if (link_flag == 1) { + rt_base_t level = rt_hw_interrupt_disable(); rt_sem_take(&sem_lock, RT_WAITING_FOREVER); recv_len = bcmgenet_gmac_eth_recv((rt_uint8_t **)&addr_point[0]); if (recv_len > 0) @@ -663,6 +665,7 @@ struct pbuf *rt_eth_rx(rt_device_t device) rt_memcpy(pbuf->payload, (char *)addr_point[0], recv_len); } rt_sem_release(&sem_lock); + rt_hw_interrupt_enable(level); } return pbuf; }