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

📄 udp.lis

📁 AVR单片机系统开发经典实例部分源程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 00E6 10E0              ldi R17,>_ScratchPad
 00E8 0E940000          xcall _sprintf
 00EC                   .dbline 100
 00EC           ;       if (!SendDebugStr((char*)ScratchPad)) return;
 00EC 00E0              ldi R16,<_ScratchPad
 00EE 10E0              ldi R17,>_ScratchPad
 00F0 0E940000          xcall _SendDebugStr
 00F4 0023              tst R16
 00F6 09F4              brne L18
 00F8                   .dbline 100
 00F8 1AC0              xjmp L1
 00FA           L18:
 00FA                   .dbline 104
 00FA           ; 
 00FA           ;       // done
 00FA           ; 
 00FA           ;       if (!SendDebugRStr(udp_str5)) return;
 00FA 00E0              ldi R16,<_udp_str5
 00FC 10E0              ldi R17,>_udp_str5
 00FE 0E940000          xcall _SendDebugRStr
 0102 0023              tst R16
 0104 09F4              brne L20
 0106                   .dbline 104
 0106 13C0              xjmp L1
 0108           L20:
 0108                   .dbline 105
 0108 CB01              movw R24,R22
 010A 0896              adiw R24,8
 010C 1A01              movw R2,R20
 010E 281A              sub R2,R24
 0110 390A              sbc R3,R25
 0112 3982              std y+1,R3
 0114 2882              std y+0,R2
 0116 20E0              ldi R18,<L22
 0118 30E0              ldi R19,>L22
 011A 00E0              ldi R16,<_ScratchPad
 011C 10E0              ldi R17,>_ScratchPad
 011E 0E940000          xcall _sprintf
 0122                   .dbline 106
 0122 00E0              ldi R16,<_ScratchPad
 0124 10E0              ldi R17,>_ScratchPad
 0126 0E940000          xcall _SendDebugStr
 012A 0023              tst R16
 012C 01F4              brne L23
 012E                   .dbline 106
 012E           L23:
 012E                   .dbline -2
 012E           L1:
 012E 2296              adiw R28,2
 0130 0E940000          xcall pop_gset2
 0134                   .dbline 0 ; func end
 0134 0895              ret
 0136                   .dbsym r TotalBytes 20 I
 0136                   .dbsym r HeaderIdx 22 I
 0136                   .dbend
 0136                   .dbfunc e UDP_StartPacket _UDP_StartPacket fc
 0136           ;       DestPort -> y+12
 0136           ;     SourcePort -> y+10
 0136           ;             IP -> y+6
                        .even
 0136           _UDP_StartPacket::
 0136 0E940000          xcall push_arg4
 013A 0E940000          xcall push_gset2
 013E 2297              sbiw R28,2
 0140                   .dbline -1
 0140                   .dbline 114
 0140           ;       sprintf((char*)ScratchPad, "%u\n", TotalBytes - (HeaderIdx + sizeof(T_UDP_Header)));
 0140           ;       if (!SendDebugStr((char*)ScratchPad)) return;
 0140           ; }
 0140           ; 
 0140           ; #endif
 0140           ; 
 0140           ; //*********************************************************************************************************************
 0140           ; 
 0140           ; bool UDP_StartPacket(u32 IP, u16 SourcePort, u16 DestPort)
 0140           ; {
 0140                   .dbline 115
 0140           ;       if (!IP) return false;                                                                                                                          // no IP supplied
 0140 40E0              ldi R20,0
 0142 50E0              ldi R21,0
 0144 60E0              ldi R22,0
 0146 70E0              ldi R23,0
 0148 FE01              movw R30,R28
 014A 2680              ldd R2,z+6
 014C 3780              ldd R3,z+7
 014E 4084              ldd R4,z+8
 0150 5184              ldd R5,z+9
 0152 2416              cp R2,R20
 0154 3506              cpc R3,R21
 0156 4606              cpc R4,R22
 0158 5706              cpc R5,R23
 015A 11F4              brne L26
 015C                   .dbline 115
 015C 0027              clr R16
 015E 57C0              xjmp L25
 0160           L26:
 0160                   .dbline 116
 0160           ;       if (MainBufferWr_Rx > 0) return false;                                                                                          //
 0160 2224              clr R2
 0162 3324              clr R3
 0164 40900000          lds R4,_MainBufferWr_Rx
 0168 50900100          lds R5,_MainBufferWr_Rx+1
 016C 2414              cp R2,R4
 016E 3504              cpc R3,R5
 0170 14F4              brge L28
 0172                   .dbline 116
 0172 0027              clr R16
 0174 4CC0              xjmp L25
 0176           L28:
 0176                   .dbline 117
 0176           ;       if (MainBufferWr_Tx) return false;                                                                                                      //
 0176 20900000          lds R2,_MainBufferWr_Tx
 017A 30900100          lds R3,_MainBufferWr_Tx+1
 017E 2220              tst R2
 0180 11F4              brne X0
 0182 3320              tst R3
 0184 11F0              breq L30
 0186           X0:
 0186                   .dbline 117
 0186 0027              clr R16
 0188 42C0              xjmp L25
 018A           L30:
 018A                   .dbline 119
 018A           ;                                                                                                                                                                               //
 018A           ;       IP_StartPacket(IP_PROTO_UDP, IP);                                                                                                       // start the IP packet off
 018A FE01              movw R30,R28
 018C 2680              ldd R2,z+6
 018E 3780              ldd R3,z+7
 0190 4084              ldd R4,z+8
 0192 5184              ldd R5,z+9
 0194 4882              std y+0,R4
 0196 5982              std y+1,R5
 0198 9101              movw R18,R2
 019A 01E1              ldi R16,17
 019C 0E940000          xcall _IP_StartPacket
 01A0                   .dbline 121
 01A0           ;                                                                                                                                                                               //
 01A0           ;       UDP_len = MainBufferWr_Tx;                                                                                                                      //
 01A0 20900000          lds R2,_MainBufferWr_Tx
 01A4 30900100          lds R3,_MainBufferWr_Tx+1
 01A8 30920100          sts _UDP_len+1,R3
 01AC 20920000          sts _UDP_len,R2
 01B0                   .dbline 123
 01B0           ;                                                                                                                                                                               //
 01B0           ;       UDP_Header = (T_UDP_Header*)(MainBuffer + MainBufferWr_Tx);                                                     // point to the UDP header
 01B0 80E0              ldi R24,<_MainBuffer
 01B2 90E0              ldi R25,>_MainBuffer
 01B4 280E              add R2,R24
 01B6 391E              adc R3,R25
 01B8 30920100          sts _UDP_Header+1,R3
 01BC 20920000          sts _UDP_Header,R2
 01C0                   .dbline 124
 01C0           ;       memset(UDP_Header, 0, sizeof(T_UDP_Header));                                                                            //
 01C0 88E0              ldi R24,8
 01C2 90E0              ldi R25,0
 01C4 9983              std y+1,R25
 01C6 8883              std y+0,R24
 01C8 2227              clr R18
 01CA 3327              clr R19
 01CC 8101              movw R16,R2
 01CE 0E940000          xcall _memset
 01D2                   .dbline 125
 01D2           ;       UDP_Header->SourcePort = htons(SourcePort);                                                                                     //
 01D2 0A85              ldd R16,y+10
 01D4 1B85              ldd R17,y+11
 01D6 0E940000          xcall _htons
 01DA E0910000          lds R30,_UDP_Header
 01DE F0910100          lds R31,_UDP_Header+1
 01E2 1183              std z+1,R17
 01E4 0083              std z+0,R16
 01E6                   .dbline 126
 01E6           ;       UDP_Header->DestPort = htons(DestPort);                                                                                         //
 01E6 0C85              ldd R16,y+12
 01E8 1D85              ldd R17,y+13
 01EA 0E940000          xcall _htons
 01EE E0910000          lds R30,_UDP_Header
 01F2 F0910100          lds R31,_UDP_Header+1
 01F6 1383              std z+3,R17
 01F8 0283              std z+2,R16
 01FA                   .dbline 127
 01FA           ;       MainBufferWr_Tx += sizeof(T_UDP_Header);                                                                                        // update index
 01FA 80910000          lds R24,_MainBufferWr_Tx
 01FE 90910100          lds R25,_MainBufferWr_Tx+1
 0202 0896              adiw R24,8
 0204 90930100          sts _MainBufferWr_Tx+1,R25
 0208 80930000          sts _MainBufferWr_Tx,R24
 020C                   .dbline 129
 020C           ;                                                                                                                                                                               //
 020C           ;       return true;                                                                                                                                            //
 020C 01E0              ldi R16,1
 020E                   .dbline -2
 020E           L25:
 020E 2296              adiw R28,2
 0210 0E940000          xcall pop_gset2
 0214 2496              adiw R28,4
 0216                   .dbline 0 ; func end
 0216 0895              ret
 0218                   .dbsym l DestPort 12 s
 0218                   .dbsym l SourcePort 10 s
 0218                   .dbsym l IP 6 l
 0218                   .dbend
 0218                   .dbfunc e UDP_EndPacket _UDP_EndPacket fc
 0218           ;              w -> R22,R23
 0218           ;             w2 -> R20,R21
                        .even
 0218           _UDP_EndPacket::
 0218 0E940000          xcall push_gset2
 021C                   .dbline -1
 021C                   .dbline 133
 021C           ; }
 021C           ; 
 021C           ; bool UDP_EndPacket(void)
 021C           ; {
 021C                   .dbline 136
 021C           ;       u16     w, w2;                                                                                                                                                  //
 021C           ;                                                                                                                                                                               //
 021C           ;       w2 = MainBufferWr_Tx;                                                                                                                           //
 021C 40910000          lds R20,_MainBufferWr_Tx
 0220 50910100          lds R21,_MainBufferWr_Tx+1
 0224                   .dbline 138
 0224           ;                                                                                                                                                                               //
 0224           ;       UDP_len = MainBufferWr_Tx - UDP_len;                                                                                            //
 0224 20900000          lds R2,_UDP_len
 0228 30900100          lds R3,_UDP_len+1
 022C 2A01              movw R4,R20
 022E 4218              sub R4,R2
 0230 5308              sbc R5,R3
 0232 50920100          sts _UDP_len+1,R5
 0236 40920000          sts _UDP_len,R4
 023A                   .dbline 140
 023A           ;                                                                                                                                                                               //
 023A           ;       IP_Header->TotalLength += UDP_len;                                                                                                      // update the IP header
 023A 80910000          lds R24,_IP_Header
 023E 90910100          lds R25,_IP_Header+1
 0242 0296              adiw R24,2
 0244 FC01              movw R30,R24
 0246 6080              ldd R6,z+0
 0248 7180              ldd R7,z+1
 024A 640C              add R6,R4
 024C 751C              adc R7,R5
 024E 7182              std z+1,R7
 0250 6082              std z+0,R6
 0252                   .dbline 142
 0252           ;                                                                                                                                                                               //
 0252           ;       UDP_Header->Length = htons(UDP_len);                                                                                            //
 0252 00910000          lds R16,_UDP_len
 0256 10910100          lds R17,_UDP_len+1
 025A 0E940000          xcall _htons
 025E E0910000          lds R30,_UDP_Header
 0262 F0910100          lds R31,_UDP_Header+1
 0266 1583              std z+5,R17
 0268 0483              std z+4,R16
 026A                   .dbline 144
 026A           ;                                                                                                                                                                               //
 026A           ;       w = IP_Checksum2((char*)UDP_Header, UDP_len);                                                                           // update the UDP header checksum
 026A 20910000          lds R18,_UDP_len
 026E 30910100          lds R19,_UDP_len+1
 0272 8F01              movw R16,R30
 0274 0E940000          xcall _IP_Checksum2
 0278 B801              movw R22,R16
 027A                   .dbline 145
 027A           ;       if (!w) w = 0xffff;                                                                                                                                     //
 027A 0030              cpi R16,0
 027C 0107              cpc R16,R17
 027E 11F4              brne L33
 0280           X1:

⌨️ 快捷键说明

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