dsp控制W5300使用UDP与PC收发数据。W5300的UDP发送没问题,但无法接收PC传来的UDP报文。代码如下。 在CCS4.2里调试,正常连续运行时rxlen(接收缓冲区收到字符长度)始终为0; 如果在 "rxlen = 0x0fff & getSn_RX_RSR(s);"前加断点,rxlen是有接收值的,且接收字符个数也正确。 简单说就是: dsp连续运行,getSn_SSR(s)返回0; dsp单步运行,getSn_SSR(s)才有返回值。 这是什么原因,请大侠给分析一下。
socket(s, Sn_MR_UDP, port, mode); switch((0x00ff & getSn_SSR(s))) { case SOCK_UDP: rxlen = 0x0fff & getSn_RX_RSR(s); if(rxlen > 0) { rxlen = recvfrom(s, (uint8*)rxbuf, rxlen, gw, &rxport); } if(len !=sendto(s,p,len,gw,port)) // send the data to the destination { } break; ........... } 你的getSn_SSR()函数以什么样的频率被调用阿? 接收方式是轮询还是中断? 是说加个断点停一下,然后继续执行就对了?那你可以在这里加个延时,是不是芯片反应速度慢 rxlen = 0x0fff & getSn_RX_RSR(s); 连续执行是这里返回0 查询方式读寄存器经常死机,会是字长的原因么? 改用中断方式,效果好些。
|