⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socket.lst

📁 W3100A网络调试程序,可进行数据传输
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V6.21  SOCKET                                                                 05/04/2005 09:30:04 PAGE 1   


C51 COMPILER V6.21, COMPILATION OF MODULE SOCKET
OBJECT MODULE PLACED IN .\ROM\SOCKET.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SOCKET.C OPTIMIZE(6,SPEED) BROWSE MODP2 DEFINE(KEIL) DEBUG OBJECTEXTEND COD
                    -E SYMBOLS PRINT(.\Lst\SOCKET.lst) OBJECT(.\ROM\SOCKET.obj) 

stmt level    source

   1          /*
   2          ###############################################################################
   3          File Include Section
   4          ###############################################################################
   5          */
   6          #include "socket_inc.h"
   7          /*
   8          ###############################################################################
   9          Define Part
  10          ###############################################################################
  11          */
  12          //#ifndef _LITTLE_ENDIAN_
  13          //#define DEBUG                        // Add debugging code
  14          
  15          /*
  16          ###############################################################################
  17          Local Variable Declaration Section
  18          ###############################################################################
  19          */
  20          unsigned int xdata Local_Port;                // Designate Local Port
  21          unsigned int xdata SMASK[MAX_SOCK_NUM];      // Variable to store MASK of Tx in each channel, on setting d
             -ynamic memory size.
  22          unsigned int xdata RMASK[MAX_SOCK_NUM];      // Variable to store MASK of Rx in each channel, on setting d
             -ynamic memory size.
  23          unsigned int xdata SSIZE[MAX_SOCK_NUM];         // Maximun Tx memory size by each channel
  24          unsigned int xdata RSIZE[MAX_SOCK_NUM];         // Maximun Rx memory size by each channel
  25          unsigned char xdata* SBUFBASEADDRESS[MAX_SOCK_NUM];     // Maximun Tx memory base address by each channel
  26          unsigned char xdata* RBUFBASEADDRESS[MAX_SOCK_NUM];     // Maximun Rx memory base address by each channel
  27          
  28          /*
  29          ###############################################################################
  30          Function Implementation Section
  31          ###############################################################################
  32          */
  33          
  34          void Int0(void) interrupt 0
  35          {
  36   1              EX0 = 0;                          // INT0 DISABLE
  37   1              EX0 = 1;
  38   1      }
  39          
  40          void iinchip_init(void)
  41          {
  42   1          Local_Port = 1000;          // This default value will be set if you didn't designate it when you crea
             -te a socket
  43   1                                      // If you don't designate port number and create a socket continuously,
  44   1                                      // the port number will be assigned with incremented by one to Local_Port
  45   1              *((volatile unsigned char xdata*)(TMODE)) = TMODE_SWRESET;
  46   1      }
  47          
  48          void sysinit(unsigned char sbufsize, unsigned char rbufsize)
  49          {
  50   1              unsigned char i;
  51   1              unsigned int ssum,rsum;
C51 COMPILER V6.21  SOCKET                                                                 05/04/2005 09:30:04 PAGE 2   

  52   1      
  53   1              IINCHIP_WRITE(TX_DMEM_SIZE, sbufsize); // Set Tx memory size for each channel
  54   1              IINCHIP_WRITE(RX_DMEM_SIZE, rbufsize); // Set Rx memory size for each channel
  55   1      
  56   1              ssum = 0;
  57   1              rsum = 0;
  58   1              SBUFBASEADDRESS[0] = SEND_DATA_BUF;      // Set Base Address of Tx memory for channel #0
  59   1              RBUFBASEADDRESS[0] = RECV_DATA_BUF;      // Set Base Address of Rx memory for channel #0
  60   1      
  61   1              for(i = 0 ; i < MAX_SOCK_NUM; i++)               // Set maximum memory size for Tx and Rx, mask, base add
             -ress of memory by each channel
  62   1              {
  63   2                      SSIZE[i] = 0;
  64   2                      RSIZE[i] = 0;
  65   2                      if(ssum < 8192)
  66   2                      {
  67   3                              switch((sbufsize >> i*2) & 0x03) // Set maximum Tx memory size
  68   3                              {
  69   4                              case 0:
  70   4                                      SSIZE[i] = 1024;
  71   4                                      SMASK[i] = 0x03FF;
  72   4                                      break;
  73   4                              case 1:
  74   4                                      SSIZE[i] = 2048;
  75   4                                      SMASK[i] = 0x07FF;
  76   4                                      break;
  77   4                              case 2:
  78   4                                      SSIZE[i] = 4096;
  79   4                                      SMASK[i] = 0x0FFF;
  80   4                                      break;
  81   4                              default:
  82   4                                      SSIZE[i] = 8192;
  83   4                                      SMASK[i] = 0x1FFF;
  84   4                                      break;
  85   4                              }
  86   3                      }
  87   2                      if(rsum < 8192)
  88   2                      {
  89   3                              switch((rbufsize>> i*2) & 0x03)  // Set maximum Rx memory size
  90   3                              {
  91   4                              case 0:
  92   4                                      RSIZE[i] = 1024;
  93   4                                      RMASK[i] = 0x03FF;
  94   4                                      break;
  95   4                              case 1:
  96   4                                      RSIZE[i] = 2048;
  97   4                                      RMASK[i] = 0x07FF;
  98   4                                      break;
  99   4                              case 2:
 100   4                                      RSIZE[i] = 4096;
 101   4                                      RMASK[i] = 0x0FFF;
 102   4                                      break;
 103   4                              default:
 104   4                                      RSIZE[i] = 8192;
 105   4                                      RMASK[i] = 0x1FFF;
 106   4                                      break;
 107   4                              }
 108   3                      }
 109   2                      ssum += SSIZE[i];
 110   2                      rsum += RSIZE[i];
 111   2                      if(i != 0) // Set base address of Tx and Rx memory for channel #1,#2,#3
 112   2                      {
C51 COMPILER V6.21  SOCKET                                                                 05/04/2005 09:30:04 PAGE 3   

 113   3                              SBUFBASEADDRESS[i] = SBUFBASEADDRESS[i-1] + SSIZE[i-1];
 114   3                              RBUFBASEADDRESS[i] = RBUFBASEADDRESS[i-1] + RSIZE[i-1];
 115   3                      }
 116   2      #ifdef DEBUG
                              printf("%bd : %d %d", i, SSIZE[i], RSIZE[i]);
              #endif
 119   2              }
 120   1              wait_1us(1);
 121   1      }
 122          
 123          void setMACAddr(unsigned char * addr)
 124          {
 125   1              unsigned char i;
 126   1      
 127   1              for (i = 0; i < 6; i++) {
 128   2                      IINCHIP_WRITE((SRC_HA_PTR + i), addr[i]);
 129   2              }
 130   1      }
 131          
 132          void setgateway(unsigned char * addr)
 133          {
 134   1              unsigned char i;
 135   1      
 136   1              for (i = 0; i < 4; i++) {
 137   2                      IINCHIP_WRITE((GATEWAY_PTR + i), addr[i]);
 138   2              }
 139   1      }
 140          
 141          void setIP(unsigned char * addr)
 142          {
 143   1              unsigned char i;
 144   1      
 145   1              for (i = 0; i < 4; i++) {
 146   2                      IINCHIP_WRITE((SRC_IP_PTR + i), addr[i]);
 147   2              }
 148   1      }
 149          
 150          void setsubmask(unsigned char * addr)
 151          {
 152   1              unsigned char i;
 153   1      
 154   1              for (i = 0; i < 4; i++) {
 155   2                      IINCHIP_WRITE((SUBNET_MASK_PTR + i), addr[i]);
 156   2              }
 157   1      }
 158          
 159          /*---------------*/
 160          #ifdef __IP_RAW__
              void setIPprotocol(unsigned char s, unsigned char ipprotocol)
              {
                      IINCHIP_WRITE(IP_PROTOCOL(s), ipprotocol);
              }
              #endif
 166          
 167          /*---------------*/
 168          #ifdef  __OPT__
              void setINTMask(unsigned char mask)
              {
                      IINCHIP_WRITE(INTMASK, mask);
              }
              
              void settimeout(unsigned char * val)
C51 COMPILER V6.21  SOCKET                                                                 05/04/2005 09:30:04 PAGE 4   

              {
                      unsigned char i;
                      for (i = 0; i < 3; i++) {
                              IINCHIP_WRITE((TIMEOUT_PTR + i), val[i]);
                      }
              }
              
              void getDestAddr(unsigned char ch, unsigned char * addr)
              {
                      addr[0] = IINCHIP_READ(DST_IP_PTR(ch));
                      addr[1] = IINCHIP_READ(DST_IP_PTR(ch)+1);
                      addr[2] = IINCHIP_READ(DST_IP_PTR(ch)+2);
                      addr[3] = IINCHIP_READ(DST_IP_PTR(ch)+3);
              }
              
              void Send_KeepalivePacket(unsigned char s)
              {
                      IINCHIP_WRITE(COMMAND(s),CSENDKEEPALIVE);                       /* SEND command */      
              }
              
              #endif
 196          
 197          /*---------------*/
 198          #ifdef _DEF_IINCHIP_PPP
 199          void getLocalAddr(unsigned char * addr)
 200          {
 201   1              addr[0] = IINCHIP_READ(SRC_IP_PTR);
 202   1              addr[1] = IINCHIP_READ(SRC_IP_PTR+1);
 203   1              addr[2] = IINCHIP_READ(SRC_IP_PTR+2);
 204   1              addr[3] = IINCHIP_READ(SRC_IP_PTR+3);
 205   1      }
 206          void getDestMAC(unsigned char ch, unsigned char * addr)
 207          {
 208   1              addr[0] = IINCHIP_READ(DST_HA_PTR(ch));
 209   1              addr[1] = IINCHIP_READ(DST_HA_PTR(ch)+1);
 210   1              addr[2] = IINCHIP_READ(DST_HA_PTR(ch)+2);
 211   1              addr[3] = IINCHIP_READ(DST_HA_PTR(ch)+3);
 212   1              addr[4] = IINCHIP_READ(DST_HA_PTR(ch)+4);
 213   1              addr[5] = IINCHIP_READ(DST_HA_PTR(ch)+5);
 214   1      }
 215          unsigned int getDestPort(unsigned char ch)
 216          {
 217   1              unsigned int ret;
 218   1      #ifndef _LITTLE_ENDIAN_
 219   1              ret = IINCHIP_READ(DST_PORT_PTR(ch));
 220   1              ret = (ret << 8) + IINCHIP_READ(DST_PORT_PTR(ch) + 1);
 221   1      #else
                      ret = IINCHIP_READ(DST_PORT_PTR(ch)+1);
                      ret = (ret << 8) + IINCHIP_READ(DST_PORT_PTR(ch));
              #endif
 225   1              return ret;
 226   1      }
 227          #endif
 228          /*---------------*/
 229          
 230          /**
 231          * return : 
 232          *               1 => success
 233          *               0 => fail
 234          */
 235          unsigned char socket(unsigned char s, unsigned char protocol, unsigned int port, unsigned char flag)
 236          {
C51 COMPILER V6.21  SOCKET                                                                 05/04/2005 09:30:04 PAGE 5   

 237   1              unsigned char ret;
 238   1              if ((protocol == SOCK_STREAM) || (protocol == SOCK_DGRAM) || (protocol == SOCK_ICMPM) || (protocol == SOC
             -K_IPL_RAWM) || (protocol == SOCK_MACL_RAWM) || (protocol == SOCK_PPPOEM))
 239   1              {
 240   2                      // 1. first, CLOSE
 241   2                      IINCHIP_WRITE(COMMAND(s),CCLOSE);
 242   2                      // 2. write protocol
 243   2                      IINCHIP_WRITE(OPT_PROTOCOL(s),protocol | flag);
 244   2                      // 3. write Port number
 245   2                      if (port != 0) {
 246   3      #ifndef _LITTLE_ENDIAN_
 247   3                              IINCHIP_WRITE(SRC_PORT_PTR(s),(unsigned char)((port & 0xff00) >> 8));
 248   3                              IINCHIP_WRITE((SRC_PORT_PTR(s) + 1),(unsigned char)(port & 0x00ff));
 249   3      #else
                                      IINCHIP_WRITE((SRC_PORT_PTR(s)+1),(unsigned char)((port & 0xff00) >> 8));
                                      IINCHIP_WRITE(SRC_PORT_PTR(s),(unsigned char)(port & 0x00ff));
              #endif
 253   3                      } else {
 254   3                              Local_Port++; // if don't set the source port, set Local_Port number.
 255   3      #ifndef _LITTLE_ENDIAN_
 256   3                              IINCHIP_WRITE(SRC_PORT_PTR(s),(unsigned char)((Local_Port & 0xff00) >> 8));
 257   3                              IINCHIP_WRITE((SRC_PORT_PTR(s) + 1),(unsigned char)(Local_Port & 0x00ff));
 258   3      #else
                                      IINCHIP_WRITE((SRC_PORT_PTR(s)+1),(unsigned char)((Local_Port & 0xff00) >> 8));
                                      IINCHIP_WRITE(SRC_PORT_PTR(s),(unsigned char)(Local_Port & 0x00ff));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -