📄 udp.lis
字号:
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 + -