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

📄 tcpip.lst

📁 msp430 cs8900a msp430 servermsp430 servermsp430 servermsp430 servermsp430 server
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \                                 In segment CODE, align 2
    201          void DoNetworkStuff(void)
   \                     DoNetworkStuff:
    202          {
   \   000000   0A12         PUSH.W  R10
    203            unsigned int ActRxEvent;                       // copy of cs8900's RxEvent-Register
    204          
    205            Write8900(ADD_PORT, PP_RxEvent);               // point to RxEvent
   \   000002   3E402401     MOV.W   #0x124, R14
   \   000006   7C400A00     MOV.B   #0xa, R12
   \   00000A   B012....     CALL    #Write8900
    206            ActRxEvent = Read8900(DATA_PORT);              // read, implied skip of last frame
   \   00000E   7C400C00     MOV.B   #0xc, R12
   \   000012   B012....     CALL    #Read8900
   \   000016   0A4C         MOV.W   R12, R10
    207          
    208            if (ActRxEvent & RX_OK)
   \   000018   3AB00001     BIT.W   #0x100, R10
   \   00001C   0A28         JNC     ??DoNetworkStuff_0
    209            {
    210              if (ActRxEvent & RX_IA) ProcessEthIAFrame();
   \   00001E   3AB00004     BIT.W   #0x400, R10
   \   000022   0228         JNC     ??DoNetworkStuff_1
   \   000024   B012....     CALL    #ProcessEthIAFrame
    211              if (ActRxEvent & RX_BROADCAST) ProcessEthBroadcastFrame();
   \                     ??DoNetworkStuff_1:
   \   000028   3AB00008     BIT.W   #0x800, R10
   \   00002C   0228         JNC     ??DoNetworkStuff_0
   \   00002E   B012....     CALL    #ProcessEthBroadcastFrame
    212            }
    213          
    214            if (TCPFlags & TCP_TIMER_RUNNING)
   \                     ??DoNetworkStuff_0:
   \   000032   E2B2....     BIT.B   #0x4, &TCPFlags
   \   000036   2028         JNC     ??DoNetworkStuff_2
    215              if (TCPFlags & TIMER_TYPE_RETRY)
   \   000038   F2B2....     BIT.B   #0x8, &TCPFlags
   \   00003C   1328         JNC     ??DoNetworkStuff_3
    216              {
    217                if (TCPTimer > RETRY_TIMEOUT)
   \   00003E   F2900900.... CMP.B   #0x9, &TCPTimer
   \   000044   1928         JNC     ??DoNetworkStuff_2
    218                {
    219                  TCPRestartTimer();                       // set a new timeout
   \   000046   B012....     CALL    #TCPRestartTimer
    220          
    221                  if (RetryCounter)
   \   00004A   C293....     CMP.B   #0x0, &RetryCounter
   \   00004E   0524         JEQ     ??DoNetworkStuff_4
    222                  {
    223                    TCPHandleRetransmission();             // resend last frame
   \   000050   B012....     CALL    #TCPHandleRetransmission
    224                    RetryCounter--;
   \   000054   F253....     ADD.B   #0xff, &RetryCounter
   \   000058   0F3C         JMP     ??DoNetworkStuff_2
    225                  }
    226                  else
    227                  {
    228                    TCPStopTimer();
   \                     ??DoNetworkStuff_4:
   \   00005A   B012....     CALL    #TCPStopTimer
    229                    TCPHandleTimeout();
   \   00005E   B012....     CALL    #TCPHandleTimeout
   \   000062   0A3C         JMP     ??DoNetworkStuff_2
    230                  }
    231                }
    232              }
    233              else if (TCPTimer > FIN_TIMEOUT)
   \                     ??DoNetworkStuff_3:
   \   000064   F2900300.... CMP.B   #0x3, &TCPTimer
   \   00006A   0628         JNC     ??DoNetworkStuff_2
    234              {
    235                TCPStateMachine = CLOSED;
   \   00006C   C243....     MOV.B   #0x0, &TCPStateMachine
    236                TCPFlags = 0;                              // reset all flags, stop retransmission...
   \   000070   C243....     MOV.B   #0x0, &TCPFlags
    237                SocketStatus &= SOCK_DATA_AVAILABLE;       // clear all flags but data available
   \   000074   E2F2....     AND.B   #0x4, &SocketStatus
    238              }
    239          
    240            switch (TCPStateMachine)
   \                     ??DoNetworkStuff_2:
   \   000078   5E42....     MOV.B   &TCPStateMachine, R14
   \   00007C   4E83         SUB.B   #0x0, R14
   \   00007E   0A24         JEQ     ??DoNetworkStuff_5
   \   000080   5E83         SUB.B   #0x1, R14
   \   000082   0824         JEQ     ??DoNetworkStuff_5
   \   000084   6E83         SUB.B   #0x2, R14
   \   000086   3824         JEQ     ??DoNetworkStuff_6
   \   000088   5E83         SUB.B   #0x1, R14
   \   00008A   3624         JEQ     ??DoNetworkStuff_6
   \   00008C   7E800300     SUB.B   #0x3, R14
   \   000090   5D24         JEQ     ??DoNetworkStuff_7
   \   000092   813C         JMP     ??DoNetworkStuff_8
    241            {
    242              case CLOSED :
    243              case LISTENING :
    244                if (TCPFlags & TCP_ACTIVE_OPEN)            // stack has to open a connection?
   \                     ??DoNetworkStuff_5:
   \   000094   D2B3....     BIT.B   #0x1, &TCPFlags
   \   000098   7E28         JNC     ??DoNetworkStuff_8
    245                  if (TCPFlags & IP_ADDR_RESOLVED)         // IP resolved?
   \   00009A   E2B3....     BIT.B   #0x2, &TCPFlags
   \   00009E   7B28         JNC     ??DoNetworkStuff_8
    246                    if (!(TransmitControl & SEND_FRAME2))  // buffer free?
   \   0000A0   E2B3....     BIT.B   #0x2, &TransmitControl
   \   0000A4   782C         JC      ??DoNetworkStuff_8
    247                    {
    248                      TCPSeqNr = ((unsigned long)ISNGenHigh << 16) | TAR; // set local ISN
   \   0000A6   1E427001     MOV.W   &0x170, R14
   \   0000AA   1F42....     MOV.W   &ISNGenHigh, R15
   \   0000AE   824E....     MOV.W   R14, &TCPSeqNr
   \   0000B2   824F....     MOV.W   R15, &TCPSeqNr + 2
    249                      TCPUNASeqNr = TCPSeqNr;
   \   0000B6   9242........ MOV.W   &TCPSeqNr, &TCPUNASeqNr
   \   0000BC   9242........ MOV.W   &TCPSeqNr + 2, &TCPUNASeqNr + 2
    250                      TCPAckNr = 0;                                       // we don't know what to ACK!
   \   0000C2   8243....     MOV.W   #0x0, &TCPAckNr
   \   0000C6   8243....     MOV.W   #0x0, &TCPAckNr + 2
    251                      TCPUNASeqNr++;                                      // count SYN as a byte
   \   0000CA   9253....     ADD.W   #0x1, &TCPUNASeqNr
   \   0000CE   8263....     ADDC.W  #0x0, &TCPUNASeqNr + 2
    252                      PrepareTCP_FRAME(TCPSeqNr, TCPAckNr, TCP_CODE_SYN); // send SYN frame
   \   0000D2   2312         PUSH.W  #0x2
   \   0000D4   1E42....     MOV.W   &TCPAckNr, R14
   \   0000D8   1F42....     MOV.W   &TCPAckNr + 2, R15
   \   0000DC   1C42....     MOV.W   &TCPSeqNr, R12
   \   0000E0   1D42....     MOV.W   &TCPSeqNr + 2, R13
   \   0000E4   B012....     CALL    #PrepareTCP_FRAME
    253                      LastFrameSent = TCP_SYN_FRAME;
   \   0000E8   D243....     MOV.B   #0x1, &LastFrameSent
    254                      TCPStartRetryTimer();                               // we NEED a retry-timeout
   \   0000EC   B012....     CALL    #TCPStartRetryTimer
    255                      TCPStateMachine = SYN_SENT;
   \   0000F0   E243....     MOV.B   #0x2, &TCPStateMachine
   \   0000F4   2153         ADD.W   #0x2, SP
   \   0000F6   4F3C         JMP     ??DoNetworkStuff_8
    256                    }
    257                break;
    258              case SYN_RECD :
    259              case ESTABLISHED :
    260                if (TCPFlags & TCP_CLOSE_REQUESTED)                  // user has user initated a close?
   \                     ??DoNetworkStuff_6:
   \   0000F8   F2B01000.... BIT.B   #0x10, &TCPFlags
   \   0000FE   4B28         JNC     ??DoNetworkStuff_8
    261                  if (!(TransmitControl & (SEND_FRAME2 | SEND_FRAME1)))   // buffers free?
   \   000100   F2B00300.... BIT.B   #0x3, &TransmitControl
   \   000106   4720         JNE     ??DoNetworkStuff_8
    262                    if (TCPSeqNr == TCPUNASeqNr)                          // all data ACKed?
   \   000108   9292........ CMP.W   &TCPUNASeqNr, &TCPSeqNr
   \   00010E   4320         JNE     ??DoNetworkStuff_8
   \   000110   9292........ CMP.W   &TCPUNASeqNr + 2, &TCPSeqNr + 2
   \   000116   3F20         JNE     ??DoNetworkStuff_8
    263                    {
    264                      TCPUNASeqNr++;
   \   000118   9253....     ADD.W   #0x1, &TCPUNASeqNr
   \   00011C   8263....     ADDC.W  #0x0, &TCPUNASeqNr + 2
    265                      PrepareTCP_FRAME(TCPSeqNr, TCPAckNr, TCP_CODE_FIN | TCP_CODE_ACK);
   \   000120   30121100     PUSH.W  #0x11
   \   000124   1E42....     MOV.W   &TCPAckNr, R14
   \   000128   1F42....     MOV.W   &TCPAckNr + 2, R15
   \   00012C   1C42....     MOV.W   &TCPSeqNr, R12
   \   000130   1D42....     MOV.W   &TCPSeqNr + 2, R13
   \   000134   B012....     CALL    #PrepareTCP_FRAME
    266                      LastFrameSent = TCP_FIN_FRAME;
   \   000138   F2400300.... MOV.B   #0x3, &LastFrameSent
    267                      TCPStartRetryTimer();
   \   00013E   B012....     CALL    #TCPStartRetryTimer
    268                      TCPStateMachine = FIN_WAIT_1;
   \   000142   F2400500.... MOV.B   #0x5, &TCPStateMachine
   \   000148   2153         ADD.W   #0x2, SP
   \   00014A   253C         JMP     ??DoNetworkStuff_8
    269                    }
    270                break;
    271              case CLOSE_WAIT :
    272                if (!(TransmitControl & (SEND_FRAME2 | SEND_FRAME1)))     // buffers free?
   \                     ??DoNetworkStuff_7:
   \   00014C   F2B00300.... BIT.B   #0x3, &TransmitControl
   \   000152   2120         JNE     ??DoNetworkStuff_8
    273                  if (TCPSeqNr == TCPUNASeqNr)                            // all data ACKed?
   \   000154   9292........ CMP.W   &TCPUNASeqNr, &TCPSeqNr
   \   00015A   1D20         JNE     ??DoNetworkStuff_8
   \   00015C   9292........ CMP.W   &TCPUNASeqNr + 2, &TCPSeqNr + 2
   \   000162   1920         JNE     ??DoNetworkStuff_8
    274                  {
    275                    TCPUNASeqNr++;                                        // count FIN as a byte
   \   000164   9253....     ADD.W   #0x1, &TCPUNASeqNr
   \   000168   8263....     ADDC.W  #0x0, &TCPUNASeqNr + 2
    276                    PrepareTCP_FRAME(TCPSeqNr, TCPAckNr, TCP_CODE_FIN | TCP_CODE_ACK);  // we NEED a retry-timeout
   \   00016C   30121100     PUSH.W  #0x11
   \   000170   1E42....     MOV.W   &TCPAckNr, R14
   \   000174   1F42....     MOV.W   &TCPAckNr + 2, R15
   \   000178   1C42....     MOV.W   &TCPSeqNr, R12
   \   00017C   1D42....     MOV.W   &TCPSeqNr + 2, R13
   \   000180   B012....     CALL    #PrepareTCP_FRAME
    277                    LastFrameSent = TCP_FIN_FRAME;                        // time to say goodbye...
   \   000184   F2400300.... MOV.B   #0x3, &LastFrameSent
    278                    TCPStartRetryTimer();
   \   00018A   B012....     CALL    #TCPStartRetryTimer
    279                    TCPStateMachine = LAST_ACK;
   \   00018E   F2400900.... MOV.B   #0x9, &TCPStateMachine
   \   000194   2153         ADD.W   #0x2, SP
    280                  }
    281                break;
    282            }
    283          
    284            if (TransmitControl & SEND_FRAME2)
   \                     ??DoNetworkStuff_8:
   \   000196   E2B3....     BIT.B   #0x2, &TransmitControl
   \   00019A   1C28         JNC     ??DoNetworkStuff_9
    285            {
    286              RequestSend(TxFrame2Size);
   \   00019C   5C42....     MOV.B   &TxFrame2Size, R12
   \   0001A0   3CF0FF00     AND.W   #0xff, R12
   \   0001A4   B012....     CALL    #RequestSend
    287          
    288              if (Rdy4Tx())                                // NOTE: when using a very fast MCU,
   \   0001A8   B012....     CALL    #Rdy4Tx
   \   0001AC   0C93         CMP.W   #0x0, R12
   \   0001AE   0924         JEQ     ??DoNetworkStuff_10
    289              {                                            // maybe the CS8900 isn't ready yet
    290                CopyToFrame8900((unsigned char *)TxFrame2Mem, TxFrame2Size);
   \   0001B0   5E42....     MOV.B   &TxFrame2Size, R14
   \   0001B4   3EF0FF00     AND.W   #0xff, R14
   \   0001B8   3C40....     MOV.W   #TxFrame2Mem, R12
   \   0001BC   B012....     CALL    #CopyToFrame8900
   \   0001C0   073C         JMP     ??DoNetworkStuff_11
    291              }
    292              else
    293              {
    294                TCPStateMachine = CLOSED;
   \                     ??DoNetworkStuff_10:
   \   0001C2   C243....     MOV.B   #0x0, &TCPStateMachine
    295                SocketStatus = SOCK_ERR_ETHERNET;          // indicate an error to user
   \   0001C6   F2405000.... MOV.B   #0x50, &SocketStatus
    296                TCPFlags = 0;                              // clear all flags, stop timers etc.
   \   0001CC   C243....     MOV.B   #0x0, &TCPFlags
    297              }
    298          
    299              TransmitControl &= ~SEND_FRAME2;             // clear tx-flag

⌨️ 快捷键说明

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