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

📄 tcpip.lst

📁 msp430 cs8900a msp430 servermsp430 servermsp430 servermsp430 servermsp430 server
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \                     RecdIPFrameLength:
   \   000000                DS8 2
     66          
     67          // the next 3 buffers must be word-aligned!

   \                                 In segment DATA16_Z, align 2, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
     68          unsigned int TxFrame1Mem[(ETH_HEADER_SIZE + IP_HEADER_SIZE + TCP_HEADER_SIZE +
   \                     TxFrame1Mem:
   \   000000                DS8 822
     69                                    MAX_TCP_TX_DATA_SIZE + 1) >> 1];

   \                                 In segment DATA16_Z, align 2, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
     70          static unsigned int TxFrame2Mem[(ETH_HEADER_SIZE + MAX_ETH_TX_DATA_SIZE + 1) >> 1];
   \                     TxFrame2Mem:
   \   000000                DS8 74

   \                                 In segment DATA16_Z, align 2, align-sorted
   \   000000                REQUIRE ?cstart_init_zero
     71          unsigned int RxTCPBufferMem[(MAX_TCP_RX_DATA_SIZE + 1) >> 1];  // space for incoming TCP-data
   \                     RxTCPBufferMem:
   \   000000                DS8 536
     72          //------------------------------------------------------------------------------
     73          // Handlers for incoming frames
     74          static void ProcessEthBroadcastFrame(void);
     75          static void ProcessEthIAFrame(void);
     76          static void ProcessICMPFrame(void);
     77          static void ProcessTCPFrame(void);
     78          
     79          // fill TX-buffers
     80          static void PrepareARP_REQUEST(void);
     81          static void PrepareARP_ANSWER(void);
     82          static void PrepareICMP_ECHO_REPLY(void);
     83          
     84          static void PrepareTCP_FRAME(unsigned long seqnr, unsigned long acknr,
     85            unsigned int TCPCode);
     86          static void PrepareTCP_DATA_FRAME(void);
     87          
     88          // general help functions
     89          static void TCPStartRetryTimer(void);
     90          static void TCPStartFinTimer(void);
     91          static void TCPRestartTimer(void);
     92          static void TCPStopTimer(void);
     93          static void TCPHandleRetransmission(void);
     94          static void TCPHandleTimeout(void);
     95          static unsigned int CalcChecksum(void *Start, unsigned int Count,
     96            unsigned char IsTCP);
     97          //------------------------------------------------------------------------------
     98          // easyWEB-API function
     99          // initalizes the LAN-controller, reset flags, starts timer-ISR
    100          //------------------------------------------------------------------------------

   \                                 In segment CODE, align 2
    101          void TCPLowLevelInit(void)
   \                     TCPLowLevelInit:
    102          {
    103            BCSCTL1 &= ~DIVA0;                             // ACLK = XT1 / 4 = 2 MHz
   \   000000   F2C010005700 BIC.B   #0x10, &0x57
    104            BCSCTL1 |= DIVA1;
   \   000006   F2D020005700 BIS.B   #0x20, &0x57
    105            TACTL = ID_3 + TASSEL_1 + MC_2 + TAIE;         // stop timer, use ACLK / 8 = 250 kHz, gen. int.
   \   00000C   B240E2016001 MOV.W   #0x1e2, &0x160
    106                                                           // start timer in continuous up-mode
    107            Init8900();
   \   000012   B012....     CALL    #Init8900
    108            TransmitControl = 0;
   \   000016   C243....     MOV.B   #0x0, &TransmitControl
    109            TCPFlags = 0;
   \   00001A   C243....     MOV.B   #0x0, &TCPFlags
    110            TCPStateMachine = CLOSED;
   \   00001E   C243....     MOV.B   #0x0, &TCPStateMachine
    111            SocketStatus = 0;
   \   000022   C243....     MOV.B   #0x0, &SocketStatus
    112          }
   \   000026   3041         RET
    113          //------------------------------------------------------------------------------
    114          // easyWEB-API function
    115          // does a passive open (listen on 'MyIP:TCPLocalPort' for an incoming
    116          // connection)
    117          //------------------------------------------------------------------------------

   \                                 In segment CODE, align 2
    118          void TCPPassiveOpen(void)
   \                     TCPPassiveOpen:
    119          {
    120            if (TCPStateMachine == CLOSED)
   \   000000   C293....     CMP.B   #0x0, &TCPStateMachine
   \   000004   0620         JNE     ??TCPPassiveOpen_0
    121            {
    122              TCPFlags &= ~TCP_ACTIVE_OPEN;                // let's do a passive open!
   \   000006   D2C3....     BIC.B   #0x1, &TCPFlags
    123              TCPStateMachine = LISTENING;
   \   00000A   D243....     MOV.B   #0x1, &TCPStateMachine
    124              SocketStatus = SOCK_ACTIVE;                  // reset, socket now active
   \   00000E   D243....     MOV.B   #0x1, &SocketStatus
    125            }
    126          }
   \                     ??TCPPassiveOpen_0:
   \   000012   3041         RET
    127          //------------------------------------------------------------------------------
    128          // easyWEB-API function
    129          // does an active open (tries to establish a connection between
    130          // 'MyIP:TCPLocalPort' and 'RemoteIP:TCPRemotePort')
    131          //------------------------------------------------------------------------------

   \                                 In segment CODE, align 2
    132          void TCPActiveOpen(void)
   \                     TCPActiveOpen:
    133          {
    134            if ((TCPStateMachine == CLOSED) || (TCPStateMachine == LISTENING))
   \   000000   C293....     CMP.B   #0x0, &TCPStateMachine
   \   000004   0324         JEQ     ??TCPActiveOpen_0
   \   000006   D293....     CMP.B   #0x1, &TCPStateMachine
   \   00000A   0C20         JNE     ??TCPActiveOpen_1
    135            {
    136              TCPFlags |= TCP_ACTIVE_OPEN;                 // let's do an active open!
   \                     ??TCPActiveOpen_0:
   \   00000C   D2D3....     BIS.B   #0x1, &TCPFlags
    137              TCPFlags &= ~IP_ADDR_RESOLVED;               // we haven't opponents MAC yet
   \   000010   E2C3....     BIC.B   #0x2, &TCPFlags
    138            
    139              PrepareARP_REQUEST();                        // ask for MAC by sending a broadcast
   \   000014   B012....     CALL    #PrepareARP_REQUEST
    140              LastFrameSent = ARP_REQUEST;
   \   000018   C243....     MOV.B   #0x0, &LastFrameSent
    141              TCPStartRetryTimer();
   \   00001C   B012....     CALL    #TCPStartRetryTimer
    142              SocketStatus = SOCK_ACTIVE;                  // reset, socket now active    
   \   000020   D243....     MOV.B   #0x1, &SocketStatus
    143            }
    144          }
   \                     ??TCPActiveOpen_1:
   \   000024   3041         RET
    145          //------------------------------------------------------------------------------
    146          // easyWEB-API function
    147          // closes an open connection
    148          //------------------------------------------------------------------------------

   \                                 In segment CODE, align 2
    149          void TCPClose(void)
   \                     TCPClose:
    150          {
    151            switch (TCPStateMachine)
   \   000000   5E42....     MOV.B   &TCPStateMachine, R14
   \   000004   5E83         SUB.B   #0x1, R14
   \   000006   0724         JEQ     ??TCPClose_0
   \   000008   5E83         SUB.B   #0x1, R14
   \   00000A   0524         JEQ     ??TCPClose_0
   \   00000C   5E83         SUB.B   #0x1, R14
   \   00000E   0A24         JEQ     ??TCPClose_1
   \   000010   5E83         SUB.B   #0x1, R14
   \   000012   0824         JEQ     ??TCPClose_1
   \   000014   3041         RET
    152            {
    153              case LISTENING :
    154              case SYN_SENT :
    155                TCPStateMachine = CLOSED;
   \                     ??TCPClose_0:
   \   000016   C243....     MOV.B   #0x0, &TCPStateMachine
    156                TCPFlags = 0;
   \   00001A   C243....     MOV.B   #0x0, &TCPFlags
    157                SocketStatus = 0;
   \   00001E   C243....     MOV.B   #0x0, &SocketStatus
   \   000022   3041         RET
    158                break;
    159              case SYN_RECD :
    160              case ESTABLISHED :
    161                TCPFlags |= TCP_CLOSE_REQUESTED;
   \                     ??TCPClose_1:
   \   000024   F2D01000.... BIS.B   #0x10, &TCPFlags
    162                break;
    163            }
    164          }
   \   00002A   3041         RET
    165          //------------------------------------------------------------------------------
    166          // easyWEB-API function
    167          // releases the receive-buffer and allows easyWEB to store new data
    168          // NOTE: rx-buffer MUST be released periodically, else the other TCP
    169          //       get no ACKs for the data it sent
    170          //------------------------------------------------------------------------------

   \                                 In segment CODE, align 2
    171          void TCPReleaseRxBuffer(void)
   \                     TCPReleaseRxBuffer:
    172          {
    173            SocketStatus &= ~SOCK_DATA_AVAILABLE;
   \   000000   E2C2....     BIC.B   #0x4, &SocketStatus
    174          }
   \   000004   3041         RET
    175          //------------------------------------------------------------------------------
    176          // easyWEB-API function
    177          // transmitts data stored in 'TCP_TX_BUF'
    178          // NOTE: * number of bytes to transmit must have been written to 'TCPTxDataCount'
    179          //       * data-count MUST NOT exceed 'MAX_TCP_TX_DATA_SIZE'
    180          //------------------------------------------------------------------------------

   \                                 In segment CODE, align 2
    181          void TCPTransmitTxBuffer(void)
   \                     TCPTransmitTxBuffer:
    182          {
    183            if ((TCPStateMachine == ESTABLISHED) || (TCPStateMachine == CLOSE_WAIT))
   \   000000   E292....     CMP.B   #0x4, &TCPStateMachine
   \   000004   0424         JEQ     ??TCPTransmitTxBuffer_0
   \   000006   F2900700.... CMP.B   #0x7, &TCPStateMachine
   \   00000C   1820         JNE     ??TCPTransmitTxBuffer_1
    184              if (SocketStatus & SOCK_TX_BUF_RELEASED)
   \                     ??TCPTransmitTxBuffer_0:
   \   00000E   F2B2....     BIT.B   #0x8, &SocketStatus
   \   000012   1528         JNC     ??TCPTransmitTxBuffer_1
    185              {
    186                SocketStatus &= ~SOCK_TX_BUF_RELEASED;               // occupy tx-buffer
   \   000014   F2C2....     BIC.B   #0x8, &SocketStatus
    187                TCPUNASeqNr += TCPTxDataCount;                       // advance UNA
   \   000018   1E42....     MOV.W   &TCPTxDataCount, R14
   \   00001C   0F43         MOV.W   #0x0, R15
   \   00001E   825E....     ADD.W   R14, &TCPUNASeqNr
   \   000022   826F....     ADDC.W  R15, &TCPUNASeqNr + 2
    188                
    189                TxFrame1Size = ETH_HEADER_SIZE + IP_HEADER_SIZE + TCP_HEADER_SIZE + TCPTxDataCount;
   \   000026   1F42....     MOV.W   &TCPTxDataCount, R15
   \   00002A   3F503600     ADD.W   #0x36, R15
   \   00002E   824F....     MOV.W   R15, &TxFrame1Size
    190                TransmitControl |= SEND_FRAME1;
   \   000032   D2D3....     BIS.B   #0x1, &TransmitControl
    191                
    192                LastFrameSent = TCP_DATA_FRAME;
   \   000036   E242....     MOV.B   #0x4, &LastFrameSent
    193                TCPStartRetryTimer();
   \   00003A   B012....     CALL    #TCPStartRetryTimer
    194              }
    195          }
   \                     ??TCPTransmitTxBuffer_1:
   \   00003E   3041         RET
    196          //------------------------------------------------------------------------------
    197          // easyWEB's 'main()'-function
    198          // must be called from user program periodically (the often - the better)
    199          // handles network, TCP/IP-stack and user events
    200          //------------------------------------------------------------------------------

⌨️ 快捷键说明

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