Data Sheet
© Copyright 2013 WIZnet Co.,Ltd. All rights reserved. 
51
iEthernet 
W5200
{ 
/* first, get the free TX memory size */ 
FREESIZE: 
freesize = Sn_TX_FSR; 
if (freesize<len) goto FREESIZE;      // len is send size 
/* calculate offset address */ 
dst_mask= Sn_TX_WR0 &gSn_TX_MASK;        // dst_mask is offset address 
/* calculate start address(physical address) */ 
dst_ptr = gSn_TX_BASE + dst_mask;        // destination_address is physical start address 
/* if overflow SOCKETTX memory */ 
if ( (dst_mask + len) > (gSn_TX_MASK + 1) ) 
{ 
/* copy upper_size bytes of source_addr to destination_address */ 
upper_size = (gSn_TX_MASK + 1) – dst_mask; 
memcpy(src_addr, dst_ptr, upper_size); 
/* update source_addr*/ 
source_addr += upper_size; 
/* copy left_size bytes of source_addr to gSn_TX_BASE */ 
left_size = len – upper_size; 
memecpy(source_addr, gSn_TX_BASE, left_size); 
} 
else 
{ 
/* copy len bytes of source_addr to destination_address */ 
memcpy(source_addr, dst_ptr, len);   
} 
/* increase Sn_TX_WR as length of len */ 
Sn_TX_WR0 += send_size; 
/* set SEND command */ 
Sn_CR = SEND; 
/* return real packet size */ 
return ( read_ptr_after_send - read_ptr_befor_send ) 
/* if return value is not equal len (len is send size), 
  retry send left data without copying data*/ 
} 










