gd32f450 lwip DMA失败

[复制链接]
5175|17
 楼主| ramboboxin 发表于 2024-9-13 10:35 | 显示全部楼层 |阅读模式
ErrStatus enet_software_reset(void)
{
    uint32_t timeout = 0U;
    ErrStatus enet_state = ERROR;
    uint32_t dma_flag;

    /* reset all core internal registers located in CLK_TX and CLK_RX */
    ENET_DMA_BCTL |= ENET_DMA_BCTL_SWR;

    /* wait for reset operation complete */
    do{
        dma_flag = (ENET_DMA_BCTL & ENET_DMA_BCTL_SWR);
        timeout++;
    }while((RESET != dma_flag) && (ENET_DELAY_TO != timeout));

    /* reset operation complete */   
    if(RESET == (ENET_DMA_BCTL & ENET_DMA_BCTL_SWR)){
        enet_state = SUCCESS;
    }

    return enet_state;
}

gd32f4xx_enet.c这个老是失败,led闪灯例程没有毛病
 楼主| ramboboxin 发表于 2024-9-13 12:44 | 显示全部楼层
xionghaoyun 发表于 2024-9-14 08:29 | 显示全部楼层
开局就是代码 问题全靠猜
Chad1989 发表于 2024-9-14 08:42 | 显示全部楼层
不出意外是代码问题,自己慢慢调试啊
陈吉Ch 发表于 2024-9-14 09:21 | 显示全部楼层
最好能够把自己的调试过程写的详细一点,展示一下,还能帮忙分析分析,
szt1993 发表于 2024-9-24 14:10 | 显示全部楼层
DMA失效很正常的,需要不断提高总结
laocuo1142 发表于 2024-9-25 16:57 | 显示全部楼层
DMA控制器或其配置的通道可能存在硬件故障或配置错误。
flycamelaaa 发表于 2024-9-25 17:56 | 显示全部楼层
与DMA传输相关的硬件连接可能松动或损坏,导致信号传输不稳定。
powerantone 发表于 2024-9-25 19:23 | 显示全部楼层
DMA传输完成后,如果中断处理程序未能正确响应或处理,可能导致DMA传输失败。
stormwind123 发表于 2024-9-25 20:00 | 显示全部楼层
DMA缓冲区的地址或大小设置不正确,或缓冲区被其他进程占用
probedog 发表于 2024-9-25 21:00 | 显示全部楼层
lwIP协议栈的配置可能与GD32F450的硬件特性不匹配
classroom 发表于 2024-9-25 21:45 | 显示全部楼层
驱动程序或固件中的软件错误,如逻辑错误、资源冲突等
王派oo 发表于 2024-9-30 13:29 来自手机 | 显示全部楼层
检查DMA和以太网的配置是否正确,寄存器设置之类的。
而服务器人 发表于 2024-9-30 13:37 | 显示全部楼层
如果超时值设置过小,可以尝试增加ENET_DELAY_TO的值,才能有足够时间等待复位完成。
而服务器人 发表于 2024-9-30 13:48 | 显示全部楼层
如果使用RTOS,以太网和DMA的中断优先级必须合理,避免被其他任务阻塞。
而服务器人 发表于 2024-9-30 13:49 | 显示全部楼层
可以通过在循环中添加调试信息,检查dma_flag和timeout的状态
发货后已经wi 发表于 2024-9-30 21:42 来自手机 | 显示全部楼层
查看GD32F450的参考手册,确认寄存器和位定义是否正确
lifeforrent 发表于 2024-10-14 18:14 | 显示全部楼层
你好,用户手册中ENET_DMA_BCTL_SWR这一位解释如下,如果该位没有复位成功,可能原因是MAC时钟不对!

在所有时钟域的复位操作完成之后,该位将由硬件清零
注意:在写任何 MAC 的寄存器前,应当确保该位为’0’
0:MAC 内部寄存器正常工作
1:复位 MAC 所有内核寄存器
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部