コード例 #1
0
ファイル: w5200.c プロジェクト: ConvTeam/WIZlib
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);
}
コード例 #2
0
ファイル: w5200.c プロジェクト: ConvTeam/WIZlib
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));
}
コード例 #3
0
ファイル: w5500.c プロジェクト: HashRatio/w5500_test
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);
}
コード例 #4
0
ファイル: w5200.c プロジェクト: ConvTeam/WIZlib
/*
@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);
}
コード例 #5
0
ファイル: tcp.c プロジェクト: GerarDZG/Embedded-Systems
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;
}
コード例 #6
0
ファイル: w5500.c プロジェクト: HashRatio/w5500_test
/**
@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);
}
コード例 #7
0
ファイル: w5300.c プロジェクト: simahell/HTTPServer
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;
}
コード例 #8
0
ファイル: w5200.c プロジェクト: ConvTeam/WIZlib
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);
}
コード例 #9
0
ファイル: w5300.c プロジェクト: simahell/HTTPServer
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;   
}
コード例 #10
0
ファイル: w5300.c プロジェクト: simahell/HTTPServer
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;   
}
コード例 #11
0
ファイル: w5300.c プロジェクト: simahell/HTTPServer
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;
}
コード例 #12
0
ファイル: w5300.c プロジェクト: simahell/HTTPServer
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;
}
コード例 #13
0
ファイル: w5300.c プロジェクト: simahell/HTTPServer
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;
}
コード例 #14
0
ファイル: util.c プロジェクト: AlexKitov/W5200EVB
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]);
}
コード例 #15
0
ファイル: EthernetDNS.cpp プロジェクト: aiwku1277/beerbug
// 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;
}
コード例 #16
0
ファイル: w5500.c プロジェクト: HashRatio/w5500_test
/**
@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	
}
コード例 #17
0
ファイル: socket.c プロジェクト: Wiznet/W7200
/**
@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
}
コード例 #18
0
ファイル: tcp.c プロジェクト: GerarDZG/Embedded-Systems
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;
}
コード例 #19
0
ファイル: socket.c プロジェクト: Wiznet/W7200
/**
@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;
}
コード例 #20
0
ファイル: w5300.c プロジェクト: simahell/HTTPServer
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   
}
コード例 #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]);
}
コード例 #22
0
ファイル: w5300.c プロジェクト: simahell/HTTPServer
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);
   */
}
コード例 #23
0
ファイル: w5500.c プロジェクト: HashRatio/w5500_test
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);
}
コード例 #24
0
ファイル: w5200.c プロジェクト: ConvTeam/WIZlib
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);
}
コード例 #25
0
ファイル: loopback.c プロジェクト: lisency/hmi-w7100a
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;
    }
}
コード例 #26
0
ファイル: socket.c プロジェクト: Wiznet/W7200
/**
@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;
}
コード例 #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;
  }
}
コード例 #28
0
ファイル: socket.c プロジェクト: Wiznet/W7200
/**
@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
    }
}
コード例 #29
0
ファイル: w5500.c プロジェクト: 12019/tiaozhanbei
/**
@brief  This function gets Interrupt register in common register.
 */
uint8 getIR( void )
{
   return IINCHIP_READ(IR);
}
コード例 #30
0
ファイル: w5500.c プロジェクト: 12019/tiaozhanbei
/**
@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];

  }
}