我现在捣鼓新定义板子驱动SPI接口W5500网口,读写寄存器都成功了。 拼下位机也能拼通。可是无法收发数据。 我仿真了一下: /******************************************************************************** 函数名 : Detect_Gateway* 描述 : 检查网关服务器* 输入 : 无* 输出 : 无* 返回值 : 成功返回TRUE(0xFF),失败返回FALSE(0x00)* 说明 : 无*******************************************************************************/unsigned char Detect_Gateway(void){ unsigned char ip_adde[4]; ip_adde[0]=IP_Addr[0]+1; ip_adde[1]=IP_Addr[1]+1; ip_adde[2]=IP_Addr[2]+1; ip_adde[3]=IP_Addr[3]+1; //检查网关及获取网关的物理地址 Write_W5500_SOCK_4Byte(0,Sn_DIPR,ip_adde);//向目的地址寄存器写入与本机IP不同的IP值 Write_W5500_SOCK_1Byte(0,Sn_MR,MR_TCP);//设置socket为TCP模式 Write_W5500_SOCK_1Byte(0,Sn_CR,OPEN);//打开Socket Delay(50);//延时5ms if(Read_W5500_SOCK_1Byte(0,Sn_SR) != SOCK_INIT)//如果socket打开失败 { Write_W5500_SOCK_1Byte(0,Sn_CR,CLOSE);//打开不成功,关闭Socket return FALSE;//返回FALSE(0x00) } Write_W5500_SOCK_1Byte(0,Sn_CR,CONNECT);//设置Socket为Connect模式 do { u8 j=0; j=Read_W5500_SOCK_1Byte(0,Sn_IR);//读取Socket0中断标志寄存器 if(j!=0) Write_W5500_SOCK_1Byte(0,Sn_IR,j); Delay(50);//延时5ms if((j&IR_TIMEOUT) == IR_TIMEOUT) { return FALSE; } else if(Read_W5500_SOCK_1Byte(0,Sn_DHAR) != 0xff) { Write_W5500_SOCK_1Byte(0,Sn_CR,CLOSE);//关闭Socket return TRUE; } }while(1);}发现老是超时,进入if((j&IR_TIMEOUT) == IR_TIMEOUT) { return FALSE; } 返回FALSE。 请问高手,哪里出现了问题?谢谢!
|