|

楼主 |
发表于 2021-11-5 08:58:18
|
显示全部楼层
处理了,用注释掉的中断模式发送函数正常,只是偶尔会有丢包现象。函数如下:
err_t low_level_output(struct netif *netif, struct pbuf *p)
{
uint32_t i=0;
struct pbuf *q;
err_t errval=ERR_OK;
ETH_BufferTypeDef Txbuffer[ETH_TX_DESC_CNT];
memset(Txbuffer, 0 , ETH_TX_DESC_CNT*sizeof(ETH_BufferTypeDef));
for(q=p;q!=NULL;q=q->next)
{
if(i>=ETH_TX_DESC_CNT)
return ERR_IF;
Txbuffer[i].buffer=q->payload;
Txbuffer[i].len=q->len;
if(i>0)
{
Txbuffer[i-1].next=&Txbuffer[i];
}
if(q->next == NULL)
{
Txbuffer[i].next=NULL;
}
i++;
}
TxConfig.Length = p->tot_len;
TxConfig.TxBuffer=Txbuffer;
SCB_CleanInvalidateDCache(); //无效化并清除Dcache
// errval = HAL_ETH_Transmit_IT(Ð_Handle,&TxConfig);
errval = HAL_ETH_Transmit(Ð_Handle,&TxConfig, 20);
if(HAL_OK != errval )
{
printf("low_level_output error: %d\r\n",errval);
}
return errval;
} |
|