Exemple #1
0
void getSUBR(uint8 *addr)
{
  addr[0] = IINCHIP_READ(WIZC_SUBR0);
  addr[1] = IINCHIP_READ(WIZC_SUBR1);
  addr[2] = IINCHIP_READ(WIZC_SUBR2);
  addr[3] = IINCHIP_READ(WIZC_SUBR3);
}
Exemple #2
0
void getDIPR(uint8 s, uint8 *addr)
{
  addr[0] = IINCHIP_READ(WIZ_SOCK_REG(s, WIZS_DIPR0));
  addr[1] = IINCHIP_READ(WIZ_SOCK_REG(s, WIZS_DIPR1));
  addr[2] = IINCHIP_READ(WIZ_SOCK_REG(s, WIZS_DIPR2));
  addr[3] = IINCHIP_READ(WIZ_SOCK_REG(s, WIZS_DIPR3));
}
Exemple #3
0
void getSIPR(uint8 * addr)
{
	addr[0] = IINCHIP_READ(SIPR);
	addr[1] = IINCHIP_READ(SIPR+1);
	addr[2] = IINCHIP_READ(SIPR+2);
	addr[3] = IINCHIP_READ(SIPR+3);
}
Exemple #4
0
/*
@brief  This function sets up Source IP address.
*/
void getGAR(uint8 *addr)
{
  addr[0] = IINCHIP_READ(WIZC_GAR0);
  addr[1] = IINCHIP_READ(WIZC_GAR1);
  addr[2] = IINCHIP_READ(WIZC_GAR2);
  addr[3] = IINCHIP_READ(WIZC_GAR3);
}
Exemple #5
0
uint8_t process_request(TCP_CONFIG *config)
{
	uint16_t bytes_to_send =0;
	uint8_t rets=0;

	if(bytesReceived>tcp_data_buffer_size)
		return 0; // Content overflow

	// Assuming GIT request, read and parse if you with to use urls for anything
	recv_data_processing(config->s, tcp_data_buffer, bytesReceived); // Data from the GIT request
	sprintf(website,"HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n\
			<html>\n<head>\n<center><h1>%d</h1></center>\n<meta http-equiv=\"refresh\" content=\"1.5\" >",ADCRead(0));

	bytes_to_send = strlen((char *)website);
	rets = send(config->s, website,bytes_to_send , 0); // Send Response with html
	bytesReceived=0;

	IINCHIP_WRITE(Sn_CR(config->s), Sn_CR_DISCON); 	// Shut down connection
	while (IINCHIP_READ(Sn_CR(config->s)));			//
	IINCHIP_WRITE(Sn_CR(config->s), Sn_CR_CLOSE);	//
	while (IINCHIP_READ(Sn_CR(config->s)));			//
	IINCHIP_WRITE(Sn_IR(config->s), 0xFF);			//

	return 1;
}
Exemple #6
0
/**
@brief	This function sets up Source IP address.
*/
void getGAR(uint8 * addr)
{
	addr[0] = IINCHIP_READ(GAR);
	addr[1] = IINCHIP_READ(GAR+1);
	addr[2] = IINCHIP_READ(GAR+2);
	addr[3] = IINCHIP_READ(GAR+3);
}
Exemple #7
0
uint32   getSn_TX_WRSR(SOCKET s)
{
   uint32 tx_write_size=0;
   tx_write_size = IINCHIP_READ(Sn_TX_WRSR(s));
   tx_write_size = (tx_write_size << 16) + IINCHIP_READ(Sn_TX_WRSR2(s));
   return tx_write_size;
}
Exemple #8
0
void getSIPR(uint8 *addr)
{
  addr[0] = IINCHIP_READ(WIZC_SIPR0);
  addr[1] = IINCHIP_READ(WIZC_SIPR1);
  addr[2] = IINCHIP_READ(WIZC_SIPR2);
  addr[3] = IINCHIP_READ(WIZC_SIPR3);
}
Exemple #9
0
void     getUIPR(uint8* addr)
{
	vuint16 tmp;
   	tmp = IINCHIP_READ(UIPR);
   addr[0] = (uint8)(tmp >> 8);
   addr[1] = (uint8)tmp;
   tmp = IINCHIP_READ(UIPR2);
   addr[2] = (uint8)(tmp >> 8);
   addr[3] = (uint8)tmp;   
}
Exemple #10
0
void     getSn_DIPR(SOCKET s, uint8* addr)
{
	vuint16 tmp;
   	tmp = IINCHIP_READ(Sn_DIPR(s));
   addr[0] = (uint8)(tmp>>8);
   addr[1] = (uint8)tmp;
   tmp = IINCHIP_READ(Sn_DIPR2(s));
   addr[2] = (uint8)(tmp>>8);
// M_15052008 : Replace Sn_DHAR2 with Sn_DIPR.   
// addr[3] = (uint8)IINCHIP_READ(Sn_DHAR2(s));   
   addr[3] = (uint8)tmp;   
}
Exemple #11
0
void     getSn_DHAR(SOCKET s, uint8* addr)
{
	vuint16 tmp;
   	tmp = IINCHIP_READ(Sn_DHAR(s));
   addr[0] = (uint8)(tmp>>8);
   addr[1] = (uint8)tmp;
   tmp = IINCHIP_READ(Sn_DHAR2(s));
   addr[2] = (uint8)(tmp>>8);
   addr[3] = (uint8)tmp;
   tmp = IINCHIP_READ(Sn_DHAR4(s));
   addr[4] = (uint8)(tmp>>8);
   addr[5] = (uint8)tmp;
}
Exemple #12
0
void     getPDHAR(uint8* addr)
{
	vuint16 tmp;
   	tmp = IINCHIP_READ(PDHAR);
   addr[0] = (uint8)(tmp >> 8);
   addr[1] = (uint8)tmp;
   tmp = IINCHIP_READ(PDHAR2);
   addr[2] = (uint8)(tmp >> 8);
   addr[3] = (uint8)tmp;
   tmp = IINCHIP_READ(PDHAR4);
   addr[4] = (uint8)(tmp >> 8);
   addr[5] = (uint8)tmp;
}
Exemple #13
0
uint8    getSn_SSR(SOCKET s)
{
   uint8 ssr, ssr1;
   ssr = (uint8)IINCHIP_READ(Sn_SSR(s));     // first read

   while(1)
   {
      ssr1 = (uint8)IINCHIP_READ(Sn_SSR(s)); // second read
      if(ssr == ssr1) break;                 // if first == sencond, Sn_SSR value is valid.
      ssr = ssr1;                            // if first <> second, save second value into first.
   }
   return ssr;
}
Exemple #14
0
void Set_network(void)
{
        uint8 tmp_array[6];       
        uint8 i;
        
        // MAC ADDRESS
        for (i = 0 ; i < 6; i++) Config_Msg.Mac[i] = MAC[i];
        // Local IP ADDRESS
        Config_Msg.Lip[0] = IP[0]; Config_Msg.Lip[1] = IP[1]; Config_Msg.Lip[2] = IP[2]; Config_Msg.Lip[3] = IP[3];
        // GateWay ADDRESS
        Config_Msg.Gw[0] = GateWay[0]; Config_Msg.Gw[1] = GateWay[1]; Config_Msg.Gw[2] = GateWay[2]; Config_Msg.Gw[3] = GateWay[3];
        // Subnet Mask ADDRESS
        Config_Msg.Sub[0] = SubNet[0]; Config_Msg.Sub[1] = SubNet[1]; Config_Msg.Sub[2] = SubNet[2]; Config_Msg.Sub[3] = SubNet[3];
        
        setSHAR(Config_Msg.Mac);
//        setSUBR(Config_Msg.Sub);
        saveSUBR(Config_Msg.Sub);
        setGAR(Config_Msg.Gw);
        setSIPR(Config_Msg.Lip);

        // Set DHCP
        Config_Msg.DHCP = Enable_DHCP;    
        //Destination IP address for TCP Client
        Chconfig_Type_Def.destip[0] = Dest_IP[0]; Chconfig_Type_Def.destip[1] = Dest_IP[1];
        Chconfig_Type_Def.destip[2] = Dest_IP[2]; Chconfig_Type_Def.destip[3] = Dest_IP[3];
        Chconfig_Type_Def.port = Dest_PORT;

        //Set PTR and RCR register	
        setRTR(6000);
        setRCR(3);

        //Init. TX & RX Memory size
        sysinit(txsize, rxsize); 
        
        printf("\r\n----------------------------------------- \r\n");         		
        printf("W5200E01-M3                       \r\n");        
        printf("Network Configuration Information \r\n");        
        printf("----------------------------------------- ");         		
        
        printf("\r\nMAC : %.2X.%.2X.%.2X.%.2X.%.2X.%.2X", IINCHIP_READ(SHAR0+0),IINCHIP_READ(SHAR0+1),IINCHIP_READ(SHAR0+2),
                                                                                                                                                                   IINCHIP_READ(SHAR0+3),IINCHIP_READ(SHAR0+4),IINCHIP_READ(SHAR0+5));
        
        getSIPR (tmp_array);
        printf("\r\nIP : %d.%d.%d.%d", tmp_array[0],tmp_array[1],tmp_array[2],tmp_array[3]);
        
        getSUBR(tmp_array);
        printf("\r\nSN : %d.%d.%d.%d", tmp_array[0],tmp_array[1],tmp_array[2],tmp_array[3]);
        
        getGAR(tmp_array);
        printf("\r\nGW : %d.%d.%d.%d", tmp_array[0],tmp_array[1],tmp_array[2],tmp_array[3]);
}
Exemple #15
0
// return values:
// 1 on success
// 0 otherwise
int EthernetDNSClass::_startDNSSession()
{
   (void)this->_closeDNSSession();
   
   int i;
   for (i = NUM_SOCKETS-1; i>=0; i--)
      if (SOCK_CLOSED == IINCHIP_READ(Sn_SR(i))) {
         if (socket(i, Sn_MR_UDP, DNS_CLIENT_PORT, 0) > 0) {
            this->_socket = i;
            break;
         }
      }

   if (this->_socket < 0)
      return 0;
	
	uint16 port = DNS_SERVER_PORT;

   for (i=0; i<4; i++)
      IINCHIP_WRITE((Sn_DIPR0(this->_socket) + i), this->_dnsData.serverIpAddr[i]);

   IINCHIP_WRITE(Sn_DPORT0(this->_socket), (uint8)((port & 0xff00) >> 8));
   IINCHIP_WRITE((Sn_DPORT0(this->_socket) + 1), (uint8)(port & 0x00ff));
   
   return 1;
}
Exemple #16
0
/**
@brief	This function is for resetting of the iinchip. Initializes the iinchip to work in whether DIRECT or INDIRECT mode
*/ 
void iinchip_init(void)
{	
	setMR( MR_RST );
#ifdef __DEF_IINCHIP_DBG__	
	printf("MR value is %02x \r\n",IINCHIP_READ(MR));
#endif	
}
Exemple #17
0
/**
@brief  This function is for resetting of the iinchip. Initializes the iinchip to work in whether DIRECT or INDIRECT mode
*/
void wizSWReset()
{
    setMR( MR_RST );
#ifdef __DEF_IINCHIP_DBG__
    printf("MR value is %02x \r\n",IINCHIP_READ(MR));
#endif
}
Exemple #18
0
uint8_t tcp_socket_init(TCP_CONFIG *config)
{

	static bool startup=false;
	if(!startup)
	{
		GPIO_Configuration();
		Reset_W5200();
		WIZ_SPI_Init();
		Set_network(config->Source_IP, config->Gateway, config->MAC, config->Subnet);
		startup=true;
		while (getSn_SR(config->s) != SOCK_CLOSED);
	}

	if(socket(config->s,Sn_MR_TCP,config->Source_Port,0x00)== 0)    /* reinitialize the socket */
	{
		return 0; //TCP socket failed
	}

	while (getSn_SR(config->s) != SOCK_INIT); // Wait for socket to open

	IINCHIP_WRITE(Sn_CR(config->s), Sn_CR_LISTEN); // Start listening on port specified
	while (IINCHIP_READ(Sn_CR(config->s))); // Check status
	while (getSn_SR(config->s) != SOCK_LISTEN); // Wait for listen
	return 1;
}
Exemple #19
0
/**
@brief	This function get the UDP socket status.
@return 	UDP socket status.
*/
int8 GetUDPSocketStatus(SOCKET s)
{
    int8 ret=0;

    switch(getSn_SR(s)) {
    case SOCK_CLOSED:		/**< closed */
        ret = (int8)STATUS_CLOSED;
        break;
    case SOCK_UDP:			/**< udp socket */
        ret = STATUS_UDP;
        break;
#if 0
    case SOCK_IPRAW:		/**< ip raw mode socket */
        ret = 11;
        break;
    case SOCK_MACRAW:		/**< mac raw mode socket */
        ret = 12;
        break;
    case SOCK_PPPOE:		/**< pppoe socket */
        ret = 13;
        break;
#endif
    default:
        if((IINCHIP_READ(Sn_MR(s))&0x0F) != Sn_MR_UDP)	ret = (int8)ERROR_NOT_UDP_SOCKET;
        break;
    }

    return ret;
}
Exemple #20
0
uint8    getSn_IR(SOCKET s)
{
      #ifdef __DEF_IINCHIP_INT__    // In case of using ISR routine of iinchip
      return SOCK_INT[s];
   #else                         // In case of processing directly
      return (uint8)IINCHIP_READ(Sn_IR(s));
   #endif   
}
Exemple #21
0
void printSysCfg(void) {
  uint8 tmp_array[6];
  
  printf("\r\n----------------------------------------- \r\n");
  printf("W5200-Cortex M4                      \r\n");        
  printf("Network Configuration Information \r\n");        
  printf("----------------------------------------- ");         		
  
  printf("\r\nMAC : %.2X.%.2X.%.2X.%.2X.%.2X.%.2X", IINCHIP_READ(SHAR0+0),IINCHIP_READ(SHAR0+1),IINCHIP_READ(SHAR0+2),
                                                                                                                                                             IINCHIP_READ(SHAR0+3),IINCHIP_READ(SHAR0+4),IINCHIP_READ(SHAR0+5));
  
  getSIPR (tmp_array);
  printf("\r\nIP : %d.%d.%d.%d", tmp_array[0],tmp_array[1],tmp_array[2],tmp_array[3]);
  
  getSUBR(tmp_array);
  printf("\r\nSN : %d.%d.%d.%d", tmp_array[0],tmp_array[1],tmp_array[2],tmp_array[3]);
  
  getGAR(tmp_array);
  printf("\r\nGW : %d.%d.%d.%d", tmp_array[0],tmp_array[1],tmp_array[2],tmp_array[3]);
}
Exemple #22
0
void     getSHAR(uint8 * addr)
{
	vuint16 tmp;
   tmp = IINCHIP_READ(SHAR);
   addr[0] = (uint8)(tmp>>8);
   addr[1] = (uint8)tmp;
   tmp = IINCHIP_READ(SHAR2);
   addr[2] = (uint8)(tmp>>8);
   addr[3] = (uint8)tmp;
   tmp = IINCHIP_READ(SHAR4);
   addr[4] = (uint8)(tmp>>8);
   addr[5] = (uint8)tmp;
   /*
   addr[0] = (uint8)(IINCHIP_READ(SHAR)>>8);
   addr[1] = (uint8)IINCHIP_READ(SHAR);
   addr[2] = (uint8)(IINCHIP_READ(SHAR2)>>8);
   addr[3] = (uint8)IINCHIP_READ(SHAR2);
   addr[4] = (uint8)(IINCHIP_READ(SHAR4)>>8);
   addr[5] = (uint8)IINCHIP_READ(SHAR4);
   */
}
Exemple #23
0
void getSHAR(uint8 * addr)
{
	addr[0] = IINCHIP_READ(SHAR);
	addr[1] = IINCHIP_READ(SHAR+1);
	addr[2] = IINCHIP_READ(SHAR+2);
	addr[3] = IINCHIP_READ(SHAR+3);
	addr[4] = IINCHIP_READ(SHAR+4);
	addr[5] = IINCHIP_READ(SHAR+5);
}
Exemple #24
0
void getSHAR(uint8 *addr)
{
  addr[0] = IINCHIP_READ(WIZC_SHAR0);
  addr[1] = IINCHIP_READ(WIZC_SHAR1);
  addr[2] = IINCHIP_READ(WIZC_SHAR2);
  addr[3] = IINCHIP_READ(WIZC_SHAR3);
  addr[4] = IINCHIP_READ(WIZC_SHAR4);
  addr[5] = IINCHIP_READ(WIZC_SHAR5);
}
Exemple #25
0
void loopback_udp(SOCKET s, uint16 port, uint8 xdata *data_buf, uint16 mode)
{
    switch (IINCHIP_READ(Sn_SR(s)))
    {
    case SOCK_UDP:
        loopback_recv(s);
        loopback_send(s);
        break;
    case SOCK_CLOSED:                                  // CLOSED
        close(s);                                       // close the SOCKET
        socket(s, Sn_MR_UDP, port, mode);                  // open the SOCKET with UDP mode
        printf("LOOPBACK_UDPStarted. CH : %bu\r\n", s);
        break;
    default:
        break;
    }
}
Exemple #26
0
/**
@brief	This function get the TCP socket status.
@return 	TCP socket status.
*/
int8 GetTCPSocketStatus(SOCKET s)
{
    int8 ret=0;

    switch(getSn_SR(s)) {
    case SOCK_CLOSED:		/**< closed */
        ret = (int8)STATUS_CLOSED;
        break;
    case SOCK_INIT:			/**< init state */
        ret = STATUS_INIT;
        break;
    case SOCK_LISTEN:		/**< listen state */
        ret = STATUS_LISTEN;
        break;
    case SOCK_SYNSENT:		/**< connection state */
        ret = STATUS_SYNSENT;
        break;
    case SOCK_SYNRECV:		/**< connection state */
        ret = STATUS_SYNRECV;
        break;
    case SOCK_ESTABLISHED:		/**< success to connect */
        ret = STATUS_ESTABLISHED;
        break;
    case SOCK_FIN_WAIT:		/**< closing state */
        ret = STATUS_FIN_WAIT;
        break;
    case SOCK_CLOSING:		/**< closing state */
        ret = STATUS_CLOSING;
        break;
    case SOCK_TIME_WAIT:		/**< closing state */
        ret = STATUS_TIME_WAIT;
        break;
    case SOCK_CLOSE_WAIT:		/**< closing state */
        ret = STATUS_CLOSE_WAIT;
        break;
    case SOCK_LAST_ACK:		/**< closing state */
        ret = STATUS_LAST_ACK;
        break;
    default:
        if((IINCHIP_READ(Sn_MR(s))&0x0F) != Sn_MR_TCP)	ret = (int8)ERROR_NOT_TCP_SOCKET;
        break;
    }

    return ret;
}
Exemple #27
0
/*----------- TCP Server Routine ------------*/
void ProcessTcpServer(SOCKET mSocket, uint16 port) {
  // if len is not volatile, it will overflow
  // and causes 'cstack' overstack error
  volatile uint16_t len;
  
  getSn = getSn_SR(mSocket);
  
  switch (getSn_SR(mSocket)) {
    case SOCK_ESTABLISHED:
      if(ch_status[mSocket] == 0) {
        printf("\r\n------------------------");
        printf("\r\nSocket No. %d : Connected", mSocket);
        
        printf("\r\n - Peer IP : %d.%d.%d.%d", 
               IINCHIP_READ(Sn_DIPR0(mSocket)+0), IINCHIP_READ(Sn_DIPR0(mSocket)+1), 
               IINCHIP_READ(Sn_DIPR0(mSocket)+2), IINCHIP_READ(Sn_DIPR0(mSocket)+3));
        
        printf("\r\n - Peer Port : %d", 
               ( (uint16)(IINCHIP_READ(Sn_DPORT0(mSocket)+0)<<8) + 
                 (uint16)IINCHIP_READ(Sn_DPORT0(mSocket)+1)) );
        
        printf("\r\n - Source Port : %d", IINCHIP_READ(Sn_PORT0(mSocket)));
        
        ch_status[mSocket] = 1;
      }
      
      /* check Rx data and set flags only when there's valid character recognized */
      if ((len = getSn_RX_RSR(mSocket)) > 0) {
        /* if Rx data size is lager than TX_RX_MAX_BUF_SIZE */
        /* the data size to read is MAX_BUF_SIZE. */
        if (len > TX_RX_MAX_BUF_SIZE) len = TX_RX_MAX_BUF_SIZE;
        
        switch(mSocket) {
        case SOCK_ZERO : E1Flag = true; break;  // EQ-DAQ-01 board
        case SOCK_ONE : E2Flag = true; break;   // EQ-DAQ-02 board
        case SOCK_TWO : PCFlag = true; break;   // PC Client
        default : break;
        }
        
        /* prevent from overflowing */
        len = recv(mSocket, RX_BUF, len);
      }
      
      break;
      
  case SOCK_CLOSE_WAIT:
      E1Flag = false; // Reset E1 flag
      E2Flag = false; // Reset E2 flag
      PCFlag = false; // Reset PC flag
      printf("\r\nSocket No. %d : CLOSE_WAIT", mSocket);
      
      // disconnect and set status
      disconnect(mSocket);
      ch_status[mSocket] = 0;
      break;
    
  case SOCK_INIT:
      lis = listen(mSocket);
      break;
      
  case SOCK_CLOSED:      
    //reinitialize the socket
    if(socket(mSocket, Sn_MR_TCP, port ,0x00) == 0) {
      printf("Fail to create socket.");
    } else {
      E1Flag = false; // Reset E1 flag
      E2Flag = false; // Reset E2 flag
      PCFlag = false; // Reset PC flag
      lis = listen(mSocket);
    }
    break;
  }
}
Exemple #28
0
/**
@brief  This function set the transmit & receive buffer size as per the channels
*/
void wizMemInit( uint8 * tx_size, uint8 * rx_size  )
{
    int16 i;
    int16 ssum,rsum;

#ifdef __DEF_IINCHIP_DBG__
    printf("sysinit()\r\n");
#endif

    ssum = 0;
    rsum = 0;

    SBUFBASEADDRESS[0] = (uint16)(__DEF_IINCHIP_MAP_TXBUF__);   /* Set base address of Tx memory for channel #0 */
    RBUFBASEADDRESS[0] = (uint16)(__DEF_IINCHIP_MAP_RXBUF__);   /* Set base address of Rx memory for channel #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]);

#ifdef __DEF_IINCHIP_DBG__
        printf("Sn_TXMEM_SIZE = %d\r\n",IINCHIP_READ(Sn_TXMEM_SIZE(i)));
        printf("Sn_RXMEM_SIZE = %d\r\n",IINCHIP_READ(Sn_RXMEM_SIZE(i)));
#endif

        SSIZE[i] = (int16)(0);
        RSIZE[i] = (int16)(0);

        if (ssum <= 16384)
        {
            switch( tx_size[i] )
            {
            case 1:
                SSIZE[i] = (int16)(1024);
                SMASK[i] = (uint16)(0x03FF);
                break;
            case 2:
                SSIZE[i] = (int16)(2048);
                SMASK[i] = (uint16)(0x07FF);
                break;
            case 4:
                SSIZE[i] = (int16)(4096);
                SMASK[i] = (uint16)(0x0FFF);
                break;
            case 8:
                SSIZE[i] = (int16)(8192);
                SMASK[i] = (uint16)(0x1FFF);
                break;
            case 16:
                SSIZE[i] = (int16)(16384);
                SMASK[i] = (uint16)(0x3FFF);
                break;
            }
        }

        if (rsum <= 16384)
        {
            switch( rx_size[i] )
            {
            case 1:
                RSIZE[i] = (int16)(1024);
                RMASK[i] = (uint16)(0x03FF);
                break;
            case 2:
                RSIZE[i] = (int16)(2048);
                RMASK[i] = (uint16)(0x07FF);
                break;
            case 4:
                RSIZE[i] = (int16)(4096);
                RMASK[i] = (uint16)(0x0FFF);
                break;
            case 8:
                RSIZE[i] = (int16)(8192);
                RMASK[i] = (uint16)(0x1FFF);
                break;
            case 16:
                RSIZE[i] = (int16)(16384);
                RMASK[i] = (uint16)(0x3FFF);
                break;
            }
        }
        ssum += SSIZE[i];
        rsum += RSIZE[i];

        if (i != 0)			// Sets base address of Tx and Rx memory for channel #1,#2,#3
        {
            SBUFBASEADDRESS[i] = SBUFBASEADDRESS[i-1] + SSIZE[i-1];
            RBUFBASEADDRESS[i] = RBUFBASEADDRESS[i-1] + RSIZE[i-1];
        }
#ifdef __DEF_IINCHIP_DBG__
        printf("ch = %d\r\n",i);
        printf("SBUFBASEADDRESS = %d\r\n",(uint16)SBUFBASEADDRESS[i]);
        printf("RBUFBASEADDRESS = %d\r\n",(uint16)RBUFBASEADDRESS[i]);
        printf("SSIZE = %d\r\n",SSIZE[i]);
        printf("RSIZE = %d\r\n",RSIZE[i]);
#endif
    }
}
Exemple #29
0
/**
@brief  This function gets Interrupt register in common register.
 */
uint8 getIR( void )
{
   return IINCHIP_READ(IR);
}
Exemple #30
0
/**
@brief  This function set the transmit & receive buffer size as per the channels is used
Note for TMSR and RMSR bits are as follows\n
bit 1-0 : memory size of channel #0 \n
bit 3-2 : memory size of channel #1 \n
bit 5-4 : memory size of channel #2 \n
bit 7-6 : memory size of channel #3 \n
bit 9-8 : memory size of channel #4 \n
bit 11-10 : memory size of channel #5 \n
bit 12-12 : memory size of channel #6 \n
bit 15-14 : memory size of channel #7 \n
Maximum memory size for Tx, Rx in the W5500 is 16K Bytes,\n
In the range of 16KBytes, the memory size could be allocated dynamically by each channel.\n
Be attentive to sum of memory size shouldn't exceed 8Kbytes\n
and to data transmission and receiption from non-allocated channel may cause some problems.\n
If the 16KBytes memory is already  assigned to centain channel, \n
other 3 channels couldn't be used, for there's no available memory.\n
If two 4KBytes memory are assigned to two each channels, \n
other 2 channels couldn't be used, for there's no available memory.\n
*/
void sysinit( uint8 * tx_size, uint8 * rx_size  )
{
  int16 i;
  int16 ssum,rsum;
#ifdef __DEF_IINCHIP_DBG__
  printf("sysinit()\r\n");
#endif
  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]);
          
#ifdef __DEF_IINCHIP_DBG__
         printf("tx_size[%d]: %d, Sn_TXMEM_SIZE = %d\r\n",i, tx_size[i], IINCHIP_READ(Sn_TXMEM_SIZE(i)));
         printf("rx_size[%d]: %d, Sn_RXMEM_SIZE = %d\r\n",i, rx_size[i], IINCHIP_READ(Sn_RXMEM_SIZE(i)));
#endif
    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];

  }
}