使用 LWIP 示例程序进行轮询时出现问题。
如果我直接使用示例程序、则通过按原样调用 RX/TX ISR 函数进行轮询可以正常工作。
当我尝试将这个完全相同的代码集成到我的程序中时、我被卡在 while 环路中的 RX ISR 中
while(hdkif_swizzle_data(curr_bd->flags_pktlen) & EMAC_BUF_DESC_SOP)
它会立即进入 RX 处理程序、因为 rxintstatraw 已设置为1、但它因为
if((hdkif_swizzle_data(curr_bd->flags_pktlen) & EMAC_BUF_DESC_OWNER)
!= EMAC_BUF_DESC_OWNER)
不满足此 if 语句。 因此、它会跳过 RX ISR 处理程序中的所有代码、并使用以下内容更新 CURR_BD:
curr_bd = rxch->active_head;
但 CURR_BD 未更新、并仍设置为相同的值。 即使我尝试向器件发送以太网请求、器件仍然卡在这个循环中、不会进入 if 语句、也不会退出 while 循环。
我认为 rxintstatraw 寄存器可能存在问题、因此我使用了 MACINVECTOR 寄存器的这种票证启用。 但该寄存器也会被设置、我仍然卡住。
对于我可能做错了什么、是否有任何建议? 我当前使用的是静态 IP 设置、它在 SCI 端口上报告成功
uint8 ip_addr[4] = { 172, 16, 0, 246 };
uint8 netmask[4] = { 255, 255, 0, 0 };
uint8 gateway[4] = { 172, 16, 0, 1 };
ipAddr = lwIPInit(0, emacAddress,
*((uint32_t *)ip_addr),
*((uint32_t *)netmask),
*((uint32_t *)gateway),
IPADDR_USE_STATIC);
我具有与示例程序相同的 lwipots 和 opts.h 设置