913 lines
18 KiB
C
913 lines
18 KiB
C
/*
|
||
* FILE : w5500.c
|
||
* DESCRIPTION : This file is iCore3 files.
|
||
* Author : ysloveivy
|
||
* Copyright :
|
||
*
|
||
* History
|
||
* --------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* --------------------
|
||
*/
|
||
|
||
//--------------------------- Include ---------------------------//
|
||
|
||
#include "spi1.h"
|
||
#include "stm32f4xx_gpio.h"
|
||
#include "w5500.h"
|
||
#include "socket.h"
|
||
|
||
#include <string.h>
|
||
#include <stdlib.h>
|
||
#include <math.h>
|
||
#include <stdio.h>
|
||
//--------------------- Function Prototype ----------------------//
|
||
static void delay(int ms);
|
||
static int initialize(void);
|
||
|
||
//--------------------------- Variable --------------------------//
|
||
W5500_T w5500={
|
||
.initialize=initialize,
|
||
.mac = {0x00,0x98,0xdc,0x42,0x61,0x11},
|
||
.ip = {192,168,1,10},
|
||
.sub = {255,255,255,0},
|
||
.gw = {192,168,1,1}
|
||
};
|
||
|
||
unsigned char txsize[MAX_SOCK_NUM] = {2,2,2,2,2,2,2,2};
|
||
unsigned char rxsize[MAX_SOCK_NUM] = {2,2,2,2,2,2,2,2};
|
||
static unsigned char I_STATUS[MAX_SOCK_NUM];
|
||
static unsigned short int SSIZE[MAX_SOCK_NUM]; /**< Max Tx buffer size by each channel */
|
||
static unsigned short int RSIZE[MAX_SOCK_NUM]; /**< Max Rx buffer size by each channel */
|
||
|
||
//--------------------------- Function --------------------------//
|
||
/*
|
||
* Name : getISR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
unsigned char getISR(unsigned char s)
|
||
{
|
||
return I_STATUS[s];
|
||
}
|
||
/*
|
||
* Name : putISR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void putISR(unsigned char s, unsigned char val)
|
||
{
|
||
I_STATUS[s] = val;
|
||
}
|
||
/*
|
||
* Name : getIINCHIP_RxMAX
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
unsigned short int getIINCHIP_RxMAX(unsigned char s)
|
||
{
|
||
return RSIZE[s];
|
||
}
|
||
/*
|
||
* Name : getIINCHIP_TxMAX
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
unsigned short int getIINCHIP_TxMAX(unsigned char s)
|
||
{
|
||
return SSIZE[s];
|
||
}
|
||
/*
|
||
* Name : IINCHIP_CSoff
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void IINCHIP_CSoff(void)
|
||
{
|
||
SPI1_CS_OFF;
|
||
}
|
||
/*
|
||
* Name : IINCHIP_CSon
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void IINCHIP_CSon(void)
|
||
{
|
||
SPI1_CS_ON;
|
||
}
|
||
/*
|
||
* Name : IINCHIP_SpiSendData
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
unsigned char IINCHIP_SpiSendData(unsigned char dat)
|
||
{
|
||
return(spi1.send_data(dat));
|
||
}
|
||
/*
|
||
* Name : IINCHIP_WRITE
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void IINCHIP_WRITE( unsigned long int addrbsb, unsigned char data)
|
||
{
|
||
SPI1_CS_OFF;
|
||
spi1.send_data( (addrbsb & 0x00FF0000)>>16); // Address byte 1
|
||
spi1.send_data( (addrbsb & 0x0000FF00)>> 8); // Address byte 2
|
||
spi1.send_data( (addrbsb & 0x000000F8) + 4); // Data write command and Write data length 1
|
||
spi1.send_data(data); // Data write (write 1byte data)
|
||
SPI1_CS_ON;
|
||
}
|
||
/*
|
||
* Name : IINCHIP_READ
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
unsigned char IINCHIP_READ(unsigned long int addrbsb)
|
||
{
|
||
unsigned char data = 0;
|
||
|
||
SPI1_CS_OFF;
|
||
spi1.send_data( (addrbsb & 0x00FF0000)>>16); // Address byte 1
|
||
spi1.send_data( (addrbsb & 0x0000FF00)>> 8); // Address byte 2
|
||
spi1.send_data( (addrbsb & 0x000000F8)) ; // Data read command and Read data length 1
|
||
data = spi1.send_data(0x00); // Data read (read 1byte data)
|
||
SPI1_CS_ON;
|
||
|
||
return data;
|
||
}
|
||
/*
|
||
* Name : wiz_write_buf
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
unsigned short int wiz_write_buf(unsigned long int addrbsb,unsigned char* buf,unsigned short int len)
|
||
{
|
||
unsigned short int idx = 0;
|
||
|
||
SPI1_CS_OFF;
|
||
spi1.send_data( (addrbsb & 0x00FF0000)>>16); // Address byte 1
|
||
spi1.send_data( (addrbsb & 0x0000FF00)>> 8); // Address byte 2
|
||
spi1.send_data( (addrbsb & 0x000000F8) + 4); // Data write command and Write data length 1
|
||
for(idx = 0; idx < len; idx++) // Write data in loop
|
||
{
|
||
spi1.send_data(buf[idx]);
|
||
}
|
||
SPI1_CS_ON;
|
||
return len;
|
||
}
|
||
/*
|
||
* Name : wiz_read_buf
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
unsigned short int wiz_read_buf(unsigned long int addrbsb, unsigned char* buf,unsigned short int len)
|
||
{
|
||
unsigned short int idx = 0;
|
||
|
||
SPI1_CS_OFF;
|
||
spi1.send_data( (addrbsb & 0x00FF0000)>>16); // Address byte 1
|
||
spi1.send_data( (addrbsb & 0x0000FF00)>> 8); // Address byte 2
|
||
spi1.send_data( (addrbsb & 0x000000F8)); // Data write command and Write data length 1
|
||
for(idx = 0; idx < len; idx++) // Write data in loop
|
||
{
|
||
buf[idx] = spi1.send_data(0x00);
|
||
}
|
||
SPI1_CS_ON;
|
||
|
||
return len;
|
||
}
|
||
|
||
/*
|
||
* Name : iinchip_init
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void iinchip_init(void)
|
||
{
|
||
setMR( MR_RST );
|
||
}
|
||
/*
|
||
* Name : sysinit
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void sysinit( uint8_t * tx_size, uint8_t * rx_size )
|
||
{
|
||
short int i;
|
||
short int ssum,rsum;
|
||
ssum = 0;
|
||
rsum = 0;
|
||
|
||
for (i = 0 ; i < MAX_SOCK_NUM; i++) // Set the size, masking and base address of Tx & Rx memory by each channel
|
||
{
|
||
IINCHIP_WRITE( (Sn_TXMEM_SIZE(i)), tx_size[i]);
|
||
IINCHIP_WRITE( (Sn_RXMEM_SIZE(i)), rx_size[i]);
|
||
|
||
SSIZE[i] = (int16)(0);
|
||
RSIZE[i] = (int16)(0);
|
||
|
||
|
||
if (ssum <= 16384)
|
||
{
|
||
switch( tx_size[i] )
|
||
{
|
||
case 1:
|
||
SSIZE[i] = (int16)(1024);
|
||
break;
|
||
case 2:
|
||
SSIZE[i] = (int16)(2048);
|
||
break;
|
||
case 4:
|
||
SSIZE[i] = (int16)(4096);
|
||
break;
|
||
case 8:
|
||
SSIZE[i] = (int16)(8192);
|
||
break;
|
||
case 16:
|
||
SSIZE[i] = (int16)(16384);
|
||
break;
|
||
default :
|
||
RSIZE[i] = (int16)(2048);
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (rsum <= 16384)
|
||
{
|
||
switch( rx_size[i] )
|
||
{
|
||
case 1:
|
||
RSIZE[i] = (int16)(1024);
|
||
break;
|
||
case 2:
|
||
RSIZE[i] = (int16)(2048);
|
||
break;
|
||
case 4:
|
||
RSIZE[i] = (int16)(4096);
|
||
break;
|
||
case 8:
|
||
RSIZE[i] = (int16)(8192);
|
||
break;
|
||
case 16:
|
||
RSIZE[i] = (int16)(16384);
|
||
break;
|
||
default :
|
||
RSIZE[i] = (int16)(2048);
|
||
break;
|
||
}
|
||
}
|
||
ssum += SSIZE[i];
|
||
rsum += RSIZE[i];
|
||
|
||
}
|
||
}
|
||
|
||
/*
|
||
* Name : setGAR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void setGAR(unsigned char * addr)
|
||
{
|
||
wiz_write_buf(GAR0, addr, 4);
|
||
}
|
||
|
||
/*
|
||
* Name : getGWIP
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void getGWIP(uint8_t * addr)
|
||
{
|
||
wiz_read_buf(GAR0, addr, 4);
|
||
}
|
||
|
||
/*
|
||
* Name : setSUBR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void setSUBR(unsigned char * addr)
|
||
{
|
||
wiz_write_buf(SUBR0, addr, 4);
|
||
}
|
||
/*
|
||
* Name : setSHAR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void setSHAR(unsigned char * addr)
|
||
{
|
||
wiz_write_buf(SHAR0, addr, 6);
|
||
}
|
||
|
||
/*
|
||
* Name : setSIPR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void setSIPR(unsigned char * addr)
|
||
{
|
||
wiz_write_buf(SIPR0, addr, 4);
|
||
}
|
||
/*
|
||
* Name : getGAR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void getGAR(unsigned char * addr)
|
||
{
|
||
wiz_read_buf(GAR0, addr, 4);
|
||
}
|
||
/*
|
||
* Name : getSUBR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void getSUBR(unsigned char * addr)
|
||
{
|
||
wiz_read_buf(SUBR0, addr, 4);
|
||
}
|
||
/*
|
||
* Name : getSHAR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void getSHAR(unsigned char * addr)
|
||
{
|
||
wiz_read_buf(SHAR0, addr, 6);
|
||
}
|
||
/*
|
||
* Name : getSIPR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void getSIPR(unsigned char * addr)
|
||
{
|
||
wiz_read_buf(SIPR0, addr, 4);
|
||
}
|
||
/*
|
||
* Name : setMR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void setMR(unsigned char val)
|
||
{
|
||
IINCHIP_WRITE(MR,val);
|
||
}
|
||
/*
|
||
* Name : getIR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
uint8_t getIR( void )
|
||
{
|
||
return IINCHIP_READ(IR);
|
||
}
|
||
/*
|
||
* Name : setRTR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void setRTR(unsigned short int timeout)
|
||
{
|
||
IINCHIP_WRITE(RTR0,(unsigned char)((timeout & 0xff00) >> 8));
|
||
IINCHIP_WRITE(RTR1,(unsigned char)(timeout & 0x00ff));
|
||
}
|
||
/*
|
||
* Name : setRCR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void setRCR(unsigned char retry)
|
||
{
|
||
IINCHIP_WRITE(WIZ_RCR,retry);
|
||
}
|
||
/*
|
||
* Name : clearIR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void clearIR(unsigned char mask)
|
||
{
|
||
IINCHIP_WRITE(IR, ~mask | getIR() ); // must be setted 0x10.
|
||
}
|
||
/*
|
||
* Name : setSn_MSS
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void setSn_MSS(SOCKET s, unsigned short int Sn_MSSR)
|
||
{
|
||
IINCHIP_WRITE( Sn_MSSR0(s), (unsigned char)((Sn_MSSR & 0xff00) >> 8));
|
||
IINCHIP_WRITE( Sn_MSSR1(s), (unsigned char)(Sn_MSSR & 0x00ff));
|
||
}
|
||
/*
|
||
* Name : setSn_TTL
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void setSn_TTL(SOCKET s, unsigned char ttl)
|
||
{
|
||
IINCHIP_WRITE( Sn_TTL(s) , ttl);
|
||
}
|
||
/*
|
||
* Name : getSn_IR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
uint8_t getSn_IR(SOCKET s)
|
||
{
|
||
return IINCHIP_READ(Sn_IR(s));
|
||
}
|
||
/*
|
||
* Name : getSn_SR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
uint8_t getSn_SR(SOCKET s)
|
||
{
|
||
return IINCHIP_READ(Sn_SR(s));
|
||
}
|
||
/*
|
||
* Name : getSn_TX_FSR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
unsigned short int getSn_TX_FSR(SOCKET s)
|
||
{
|
||
unsigned short int val=0,val1=0;
|
||
do
|
||
{
|
||
val1 = IINCHIP_READ(Sn_TX_FSR0(s));
|
||
val1 = (val1 << 8) + IINCHIP_READ(Sn_TX_FSR1(s));
|
||
if (val1 != 0)
|
||
{
|
||
val = IINCHIP_READ(Sn_TX_FSR0(s));
|
||
val = (val << 8) + IINCHIP_READ(Sn_TX_FSR1(s));
|
||
}
|
||
} while (val != val1);
|
||
return val;
|
||
}
|
||
/*
|
||
* Name : getSn_RX_RSR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
unsigned short int getSn_RX_RSR(SOCKET s)
|
||
{
|
||
unsigned short int val=0,val1=0;
|
||
do
|
||
{
|
||
val1 = IINCHIP_READ(Sn_RX_RSR0(s));
|
||
val1 = (val1 << 8) + IINCHIP_READ(Sn_RX_RSR1(s));
|
||
if(val1 != 0)
|
||
{
|
||
val = IINCHIP_READ(Sn_RX_RSR0(s));
|
||
val = (val << 8) + IINCHIP_READ(Sn_RX_RSR1(s));
|
||
}
|
||
} while (val != val1);
|
||
return val;
|
||
}
|
||
/*
|
||
* Name : send_data_processing
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void send_data_processing(SOCKET s, unsigned char *data, unsigned short int len)
|
||
{
|
||
unsigned short int ptr = 0;
|
||
unsigned long int addrbsb = 0;
|
||
ptr = IINCHIP_READ( Sn_TX_WR0(s) );
|
||
ptr = ((ptr & 0x00ff) << 8) + IINCHIP_READ(Sn_TX_WR1(s));
|
||
|
||
addrbsb = ((uint32)ptr<<8) + (s<<5) + 0x10;
|
||
wiz_write_buf(addrbsb, data, len);
|
||
|
||
ptr += len;
|
||
IINCHIP_WRITE( Sn_TX_WR0(s) ,(uint8)((ptr & 0xff00) >> 8));
|
||
IINCHIP_WRITE( Sn_TX_WR1(s),(uint8)(ptr & 0x00ff));
|
||
}
|
||
/*
|
||
* Name : recv_data_processing
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void recv_data_processing(SOCKET s, unsigned char *data, unsigned short int len)
|
||
{
|
||
unsigned short int ptr = 0;
|
||
unsigned long int addrbsb = 0;
|
||
|
||
ptr = IINCHIP_READ( Sn_RX_RD0(s) );
|
||
ptr = ((ptr & 0x00ff) << 8) + IINCHIP_READ( Sn_RX_RD1(s) );
|
||
|
||
addrbsb = ((uint32)ptr<<8) + (s<<5) + 0x18;
|
||
wiz_read_buf(addrbsb, data, len);
|
||
ptr += len;
|
||
|
||
IINCHIP_WRITE( Sn_RX_RD0(s), (uint8)((ptr & 0xff00) >> 8));
|
||
IINCHIP_WRITE( Sn_RX_RD1(s), (uint8)(ptr & 0x00ff));
|
||
}
|
||
/*
|
||
* Name : setSn_IR
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
void setSn_IR(unsigned char s, unsigned char val)
|
||
{
|
||
IINCHIP_WRITE(Sn_IR(s), val);
|
||
}
|
||
/*
|
||
* Name : initialize
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
static int initialize(void) //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
{
|
||
delay(2000);
|
||
while((IINCHIP_READ(PHYCFGR)& LINK)==0); //<2F>ȴ<EFBFBD><C8B4><EFBFBD>̫<EFBFBD><CCAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
setMR( MR_RST );
|
||
delay(100);
|
||
|
||
setSHAR(w5500.mac);
|
||
setSUBR(w5500.sub);
|
||
setGAR(w5500.gw);
|
||
setSIPR(w5500.ip);
|
||
|
||
sysinit(txsize,rxsize);
|
||
|
||
setRTR(2000); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ֵ*/
|
||
setRCR(8); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>ʹ<EFBFBD><CDB4><EFBFBD>*/
|
||
|
||
IINCHIP_WRITE( IMR,IM_IR7 | IM_IR6);
|
||
IINCHIP_WRITE( SIMR, S0_IMR);
|
||
IINCHIP_WRITE( Sn_IMR(0), IMR_SENDOK | IMR_TIMEOUT | IMR_RECV | IMR_DISCON | IMR_CON);
|
||
|
||
return 0;
|
||
}
|
||
/*
|
||
* Name : delay
|
||
* Description : ---
|
||
* Author : ysloveivy.
|
||
*
|
||
* History
|
||
* ----------------------
|
||
* Rev : 0.00
|
||
* Date : 12/20/2015
|
||
*
|
||
* create.
|
||
* ----------------------
|
||
*/
|
||
static void delay(int ct) //ms
|
||
{
|
||
int i, j;
|
||
|
||
for (i = 0; i < ct; i++)
|
||
{
|
||
for (j = 0; j < 10000; j++) ;
|
||
}
|
||
}
|
||
|
||
void W5500_Run(void)
|
||
{
|
||
int receive_length;
|
||
unsigned char receive_buffer[1024];
|
||
unsigned char remote_ip[4] = {192,168,0,2};
|
||
unsigned short int local_port;
|
||
//<2F><><EFBFBD><EFBFBD>TCP client<6E><74>Ϣ
|
||
switch(getSn_SR(0)) /*<2A><>ȡsocket0<74><30>״̬*/
|
||
{
|
||
case SOCK_INIT: /*socket<65><74>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||
connect(0, remote_ip ,60001); /*<2A><>TCPģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||
break;
|
||
case SOCK_ESTABLISHED: /*socket<65><74><EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>*/
|
||
if(getSn_IR(0) & Sn_IR_CON)
|
||
{
|
||
setSn_IR(0, Sn_IR_CON); /*Sn_IR<49>ĵ<EFBFBD>0λ<30><CEBB>1*/
|
||
}
|
||
receive_length = getSn_RX_RSR(0); /*lenΪ<6E>ѽ<EFBFBD><D1BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĴ<DDB5>С*/
|
||
if(receive_length > 0)
|
||
{
|
||
memset(receive_buffer,0,sizeof(receive_buffer));
|
||
recv(0,receive_buffer,receive_length); /*W5500<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Sever<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||
// send(0,receive_buffer,receive_length);
|
||
}
|
||
break;
|
||
case SOCK_CLOSE_WAIT: /*socket<65>ȴ<EFBFBD><C8B4>ر<EFBFBD>״̬*/
|
||
disconnect(0);
|
||
break;
|
||
case SOCK_CLOSED: /*socket<65>ر<EFBFBD>*/
|
||
local_port = rand() % 10000 + 50000;
|
||
socket(0,Sn_MR_TCP,local_port,Sn_MR_ND); /*<2A><><EFBFBD><EFBFBD>socket0<74><30>һ<EFBFBD><D2BB><EFBFBD>˿<EFBFBD>*/
|
||
break;
|
||
}
|
||
if((IINCHIP_READ(PHYCFGR)& LINK)==0)
|
||
{
|
||
disconnect(0);
|
||
local_port = rand() % 10000 + 50000;
|
||
socket(0,Sn_MR_TCP,local_port,Sn_MR_ND); /*<2A><><EFBFBD><EFBFBD>socket0<74><30>һ<EFBFBD><D2BB><EFBFBD>˿<EFBFBD>*/
|
||
connect(0, remote_ip ,60001); /*<2A><>TCPģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||
}
|
||
}
|