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

📄 udp.lis

📁 AVR单片机系统开发经典实例部分源程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 0280                   .dbline 145
 0280 6FEF              ldi R22,65535
 0282 7FEF              ldi R23,255
 0284           L33:
 0284                   .dbline 146
 0284           ;       UDP_Header->Checksum = htons(w);                                                                                                        //
 0284 8B01              movw R16,R22
 0286 0E940000          xcall _htons
 028A E0910000          lds R30,_UDP_Header
 028E F0910100          lds R31,_UDP_Header+1
 0292 1783              std z+7,R17
 0294 0683              std z+6,R16
 0296                   .dbline 148
 0296           ;                                                                                                                                                                               //
 0296           ;       IP_EndPacket();                                                                                                                                         //
 0296 0E940000          xcall _IP_EndPacket
 029A                   .dbline 150
 029A           ;                                                                                                                                                                               //
 029A           ;       if (!PPP_SendPacket(false)) return false;                                                                                       // send it
 029A 0027              clr R16
 029C 0E940000          xcall _PPP_SendPacket
 02A0 0023              tst R16
 02A2 11F4              brne L35
 02A4                   .dbline 150
 02A4 0027              clr R16
 02A6 0EC0              xjmp L32
 02A8           L35:
 02A8                   .dbline 153
 02A8           ;                                                                                                                                                                               //
 02A8           ;       #ifdef Debug                                                                                                                                            //
 02A8           ;               IP_DisplayProtocol(true, (int)w2);                                                                                              //
 02A8 9A01              movw R18,R20
 02AA 01E0              ldi R16,1
 02AC 0E940000          xcall _IP_DisplayProtocol
 02B0                   .dbline 154
 02B0           ;               IP_DisplayHeader(4, (int)w2);                                                                                                   //
 02B0 9A01              movw R18,R20
 02B2 04E0              ldi R16,4
 02B4 10E0              ldi R17,0
 02B6 0E940000          xcall _IP_DisplayHeader
 02BA                   .dbline 155
 02BA           ;               UDP_DisplayHeader(4 + sizeof(T_IP_Header), (int)w2);                                                    //
 02BA 9A01              movw R18,R20
 02BC 08E1              ldi R16,24
 02BE 10E0              ldi R17,0
 02C0 9FDE              xcall _UDP_DisplayHeader
 02C2                   .dbline 158
 02C2           ;       #endif                                                                                                                                                          //
 02C2           ;                                                                                                                                                                               //
 02C2           ;       return true;                                                                                                                                            //
 02C2 01E0              ldi R16,1
 02C4                   .dbline -2
 02C4           L32:
 02C4 0E940000          xcall pop_gset2
 02C8                   .dbline 0 ; func end
 02C8 0895              ret
 02CA                   .dbsym r w 22 s
 02CA                   .dbsym r w2 20 s
 02CA                   .dbend
 02CA                   .dbfunc e UDP_In _UDP_In fV
 02CA           ;              w -> R22,R23
 02CA           ;            len -> R20,R21
                        .even
 02CA           _UDP_In::
 02CA 0E940000          xcall push_gset2
 02CE                   .dbline -1
 02CE                   .dbline 165
 02CE           ; }
 02CE           ; 
 02CE           ; //*********************************************************************************************************************
 02CE           ; // this is called when we have received a UDP packet
 02CE           ; 
 02CE           ; void UDP_In(void)
 02CE           ; {
 02CE                   .dbline 168
 02CE           ;       u16 len, w;
 02CE           ; 
 02CE           ;       len = MainBufferWr_Rx - MainBufferRd_Rx;                                                                        // length of data left
 02CE 20900000          lds R2,_MainBufferRd_Rx
 02D2 30900100          lds R3,_MainBufferRd_Rx+1
 02D6 40910000          lds R20,_MainBufferWr_Rx
 02DA 50910100          lds R21,_MainBufferWr_Rx+1
 02DE 4219              sub R20,R2
 02E0 5309              sbc R21,R3
 02E2                   .dbline 173
 02E2           ; 
 02E2           ;       // *******************
 02E2           ;       // UDP header
 02E2           ; 
 02E2           ;       UDP_Header = (T_UDP_Header*)(MainBuffer + MainBufferRd_Rx);                                             // point to the UDP header
 02E2 80E0              ldi R24,<_MainBuffer
 02E4 90E0              ldi R25,>_MainBuffer
 02E6 280E              add R2,R24
 02E8 391E              adc R3,R25
 02EA 30920100          sts _UDP_Header+1,R3
 02EE 20920000          sts _UDP_Header,R2
 02F2                   .dbline 175
 02F2           ;                                                                                                                                                                       //
 02F2           ;       if ((!UDP_Header->Checksum) || (IP_Checksum2((char*)UDP_Header, len)))                  //
 02F2 F101              movw R30,R2
 02F4 2680              ldd R2,z+6
 02F6 3780              ldd R3,z+7
 02F8 2220              tst R2
 02FA 11F4              brne X2
 02FC 3320              tst R3
 02FE 51F0              breq L40
 0300           X2:
 0300 9A01              movw R18,R20
 0302 00910000          lds R16,_UDP_Header
 0306 10910100          lds R17,_UDP_Header+1
 030A 0E940000          xcall _IP_Checksum2
 030E 0030              cpi R16,0
 0310 0107              cpc R16,R17
 0312 29F0              breq L38
 0314           X3:
 0314           L40:
 0314                   .dbline 176
 0314           ;       {                                                                                                                                                               // invalid checksum
 0314                   .dbline 178
 0314           ;               #ifdef Debug
 0314           ;                       SendDebugRStr(udp_str7);                                                                                                //
 0314 00E0              ldi R16,<_udp_str7
 0316 10E0              ldi R17,>_udp_str7
 0318 0E940000          xcall _SendDebugRStr
 031C                   .dbline 180
 031C           ;               #endif
 031C           ;               return;                                                                                                                                         //
 031C 32C0              xjmp L37
 031E           L38:
 031E                   .dbline 183
 031E           ;       }
 031E           ;                                                                                                                                                                       //
 031E           ;       w = ntohs(UDP_Header->Length);                                                                                                  //
 031E E0910000          lds R30,_UDP_Header
 0322 F0910100          lds R31,_UDP_Header+1
 0326 0481              ldd R16,z+4
 0328 1581              ldd R17,z+5
 032A 0E940000          xcall _ntohs
 032E B801              movw R22,R16
 0330                   .dbline 184
 0330           ;       if (w < sizeof(T_UDP_Header)) return;                                                                                   // hmmmmm
 0330 0830              cpi R16,8
 0332 E0E0              ldi R30,0
 0334 1E07              cpc R17,R30
 0336 08F4              brsh L41
 0338                   .dbline 184
 0338 24C0              xjmp L37
 033A           L41:
 033A                   .dbline 185
 033A           ;       if (w > len) return;                                                                                                                    // hmmmmm
 033A 4617              cp R20,R22
 033C 5707              cpc R21,R23
 033E 08F4              brsh L43
 0340                   .dbline 185
 0340 20C0              xjmp L37
 0342           L43:
 0342                   .dbline 188
 0342 20910000          lds R18,_MainBufferWr_Rx
 0346 30910100          lds R19,_MainBufferWr_Rx+1
 034A 00910000          lds R16,_MainBufferRd_Rx
 034E 10910100          lds R17,_MainBufferRd_Rx+1
 0352 56DE              xcall _UDP_DisplayHeader
 0354                   .dbline 191
 0354 80910000          lds R24,_MainBufferRd_Rx
 0358 90910100          lds R25,_MainBufferRd_Rx+1
 035C 0896              adiw R24,8
 035E 90930100          sts _MainBufferRd_Rx+1,R25
 0362 80930000          sts _MainBufferRd_Rx,R24
 0366                   .dbline 192
 0366 40910000          lds R20,_MainBufferWr_Rx
 036A 50910100          lds R21,_MainBufferWr_Rx+1
 036E 481B              sub R20,R24
 0370 590B              sbc R21,R25
 0372                   .dbline 196
 0372 0E940000          xcall _IP_FireWalled
 0376 0023              tst R16
 0378 21F0              breq L45
 037A                   .dbline 197
 037A                   .dbline 199
 037A 00E0              ldi R16,<_udp_str6
 037C 10E0              ldi R17,>_udp_str6
 037E 0E940000          xcall _SendDebugRStr
 0382                   .dbline 201
 0382           L45:
 0382                   .dbline -2
 0382           L37:
 0382 0E940000          xcall pop_gset2
 0386                   .dbline 0 ; func end
 0386 0895              ret
 0388                   .dbsym r w 22 s
 0388                   .dbsym r len 20 s
 0388                   .dbend
 0388                   .dbfunc e UDP_10ms_Timer _UDP_10ms_Timer fV
                        .even
 0388           _UDP_10ms_Timer::
 0388                   .dbline -1
 0388                   .dbline 221
 0388           ;                                                                                                                                                                       //
 0388           ;       #ifdef Debug
 0388           ;               UDP_DisplayHeader((int)MainBufferRd_Rx, (int)MainBufferWr_Rx);                  //
 0388           ;       #endif
 0388           ; 
 0388           ;       MainBufferRd_Rx += sizeof(T_UDP_Header);                                                                        // update index
 0388           ;       len = MainBufferWr_Rx - MainBufferRd_Rx;                                                                        // length of data left
 0388           ;                                                                                                                                                               //
 0388           ;       // *******************
 0388           ; 
 0388           ;       if (IP_FireWalled())
 0388           ;       {
 0388           ;               #ifdef Debug
 0388           ;                       SendDebugRStr(udp_str6);
 0388           ;               #endif
 0388           ;               return;                                                                                                                                 // firewalled
 0388           ;       }
 0388           ; 
 0388           ;       // *******************
 0388           ;       // data
 0388           ; 
 0388           ;       #ifdef IncludeNTP
 0388           ;       if (ntohs(UDP_Header->DestPort) == 123)
 0388           ;       {       // most likely an NTP reply then
 0388           ;               if (len >= sizeof(T_NTP)) NTP_DecodeSNTP(IP_Header->SourceIP.ip32, (T_NTP*)(MainBuffer + MainBufferRd_Rx));
 0388           ;               return;
 0388           ;       }
 0388           ;       #endif
 0388           ; 
 0388           ;       // *******************
 0388           ; }
 0388           ; // **************************************************************************
 0388           ; // this is called every 10ms from the IP module
 0388           ; 
 0388           ; void UDP_10ms_Timer(void)
 0388           ; {
 0388                   .dbline -2
 0388           L47:
 0388                   .dbline 0 ; func end
 0388 0895              ret
 038A                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\AVR\AT-Modem__PPP__UDP__IC\udp.c
 0000           _UDP_len::
 0000                   .blkb 2
 0002                   .dbsym e UDP_len _UDP_len s
                        .area data(ram, con, rel)
 0002                   .dbfile C:\AVR\AT-Modem__PPP__UDP__IC\udp.c
 0002           L22:
 0002                   .blkb 4
                        .area idata
 0002 25750A00          .byte 37,'u,10,0
                        .area data(ram, con, rel)
 0006                   .dbfile C:\AVR\AT-Modem__PPP__UDP__IC\udp.c
 0006           L17:
 0006                   .blkb 5
                        .area idata
 0006 2530347800        .byte 37,48,52,'x,0
                        .area data(ram, con, rel)
 000B                   .dbfile C:\AVR\AT-Modem__PPP__UDP__IC\udp.c
 000B           L4:
 000B                   .blkb 3
                        .area idata
 000B 257500            .byte 37,'u,0
                        .area data(ram, con, rel)
 000E                   .dbfile C:\AVR\AT-Modem__PPP__UDP__IC\udp.c

⌨️ 快捷键说明

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