📄 udp.lis
字号:
.module udp.c
.area text(rom, con, rel)
0000 .dbfile D:\hexok项目\AVRNET项目\AVRNET光盘\icc例子\udp.c
0000 .dbfunc e udp_init _udp_init fV
.even
0000 _udp_init::
0000 .dbline -1
0000 .dbline 9
0000 ; #include "main.h"
0000 ; #include "rtl8019as.h"
0000 ; #include "arp.h"
0000 ; #include "ip.h"
0000 ; #include "icmp.h"
0000 ; #include "udp.h"
0000 ;
0000 ; void udp_init(void)
0000 ; {
0000 .dbline 10
0000 ; udpbuffer_in_p=0;
0000 2224 clr R2
0002 3324 clr R3
0004 30920100 sts _udpbuffer_in_p+1,R3
0008 20920000 sts _udpbuffer_in_p,R2
000C .dbline 11
000C ; udpbuffer_in_rp=0;
000C 30920100 sts _udpbuffer_in_rp+1,R3
0010 20920000 sts _udpbuffer_in_rp,R2
0014 .dbline -2
0014 L1:
0014 .dbline 0 ; func end
0014 0895 ret
0016 .dbend
0016 .dbfunc e udp_packhandle _udp_packhandle fc
0016 ; udp_ok -> R20
0016 ; des_port -> R12,R13
0016 ; i -> R10,R11
0016 ; udplen -> R10,R11
0016 ; udpbegin -> R22,R23
.even
0016 _udp_packhandle::
0016 0E940000 xcall push_gset4
001A 5901 movw R10,R18
001C B801 movw R22,R16
001E .dbline -1
001E .dbline 15
001E ; }
001E ;
001E ; unsigned char udp_packhandle(unsigned char *udpbegin,unsigned int udplen)
001E ; {
001E .dbline 16
001E ; unsigned char udp_ok=0;
001E 4427 clr R20
0020 .dbline 17
0020 ; unsigned int des_port=0;
0020 CC24 clr R12
0022 DD24 clr R13
0024 .dbline 18
0024 ; unsigned int i=0;
0024 AA24 clr R10
0026 BB24 clr R11
0028 .dbline 20
0028 ;
0028 ; to_udpport=*udpbegin;
0028 FB01 movw R30,R22
002A 2080 ldd R2,z+0
002C 3324 clr R3
002E 30920100 sts _to_udpport+1,R3
0032 20920000 sts _to_udpport,R2
0036 .dbline 21
0036 ; to_udpport<<=8;
0036 322C mov R3,R2
0038 2224 clr R2
003A 30920100 sts _to_udpport+1,R3
003E 20920000 sts _to_udpport,R2
0042 .dbline 22
0042 ; to_udpport|=*(udpbegin+1);
0042 2180 ldd R2,z+1
0044 3324 clr R3
0046 40900000 lds R4,_to_udpport
004A 50900100 lds R5,_to_udpport+1
004E 4228 or R4,R2
0050 5328 or R5,R3
0052 50920100 sts _to_udpport+1,R5
0056 40920000 sts _to_udpport,R4
005A .dbline 24
005A ;
005A ; des_port=*(udpbegin+2);
005A FB01 movw R30,R22
005C C280 ldd R12,z+2
005E DD24 clr R13
0060 .dbline 25
0060 ; des_port<<=8;
0060 DC2C mov R13,R12
0062 CC24 clr R12
0064 .dbline 26
0064 ; des_port|=*(udpbegin+3);
0064 FB01 movw R30,R22
0066 2380 ldd R2,z+3
0068 3324 clr R3
006A C228 or R12,R2
006C D328 or R13,R3
006E .dbline 28
006E ;
006E ; udpdatalen=*(udpbegin+4);
006E FB01 movw R30,R22
0070 2480 ldd R2,z+4
0072 3324 clr R3
0074 30920100 sts _udpdatalen+1,R3
0078 20920000 sts _udpdatalen,R2
007C .dbline 29
007C ; udpdatalen<<=8;
007C 322C mov R3,R2
007E 2224 clr R2
0080 30920100 sts _udpdatalen+1,R3
0084 20920000 sts _udpdatalen,R2
0088 .dbline 30
0088 ; udpdatalen|=*(udpbegin+5);
0088 FB01 movw R30,R22
008A 2580 ldd R2,z+5
008C 3324 clr R3
008E 40900000 lds R4,_udpdatalen
0092 50900100 lds R5,_udpdatalen+1
0096 4228 or R4,R2
0098 5328 or R5,R3
009A 50920100 sts _udpdatalen+1,R5
009E 40920000 sts _udpdatalen,R4
00A2 .dbline 31
00A2 ; udpdatalen-=8;
00A2 C201 movw R24,R4
00A4 0897 sbiw R24,8
00A6 90930100 sts _udpdatalen+1,R25
00AA 80930000 sts _udpdatalen,R24
00AE .dbline 36
00AE ;
00AE ; //*(udpbegin+6)=0;
00AE ; //*(udpbegin+7)=0;
00AE ;
00AE ; switch(des_port)
00AE C601 movw R24,R12
00B0 8031 cpi R24,16
00B2 E0E0 ldi R30,0
00B4 9E07 cpc R25,R30
00B6 81F0 breq L5
00B8 8131 cpi R24,17
00BA E0E0 ldi R30,0
00BC 9E07 cpc R25,R30
00BE 09F4 brne X3
00C0 53C0 xjmp L18
00C2 X3:
00C2 8231 cpi R24,18
00C4 E0E0 ldi R30,0
00C6 9E07 cpc R25,R30
00C8 09F4 brne X4
00CA 57C0 xjmp L19
00CC X4:
00CC 8331 cpi R24,19
00CE E0E0 ldi R30,0
00D0 9E07 cpc R25,R30
00D2 09F4 brne X5
00D4 56C0 xjmp L4
00D6 X5:
00D6 55C0 xjmp L3
00D8 X0:
00D8 .dbline 37
00D8 ; {
00D8 L5:
00D8 .dbline 39
00D8 80E0 ldi R24,1024
00DA 94E0 ldi R25,4
00DC 20900000 lds R2,_udpdatalen
00E0 30900100 lds R3,_udpdatalen+1
00E4 8215 cp R24,R2
00E6 9305 cpc R25,R3
00E8 38F5 brsh L11
00EA .dbline 39
00EA .dbline 39
00EA 042F mov R16,R20
00EC 4BC0 xjmp L2
00EE X1:
00EE .dbline 39
00EE ; case localport_udp_port00: //端口0 使用内部RAM
00EE ; if(udpdatalen>1024){return udp_ok;break;}
00EE .dbline 40
00EE ; for(;i<udpdatalen;i++)
00EE L8:
00EE .dbline 41
00EE ; {
00EE .dbline 42
00EE ; udpbuffer_in[udpbuffer_in_p]=*(udpbegin+8+i);
00EE CB01 movw R24,R22
00F0 0896 adiw R24,8
00F2 F501 movw R30,R10
00F4 E80F add R30,R24
00F6 F91F adc R31,R25
00F8 2080 ldd R2,z+0
00FA 80E0 ldi R24,<_udpbuffer_in
00FC 90E0 ldi R25,>_udpbuffer_in
00FE E0910000 lds R30,_udpbuffer_in_p
0102 F0910100 lds R31,_udpbuffer_in_p+1
0106 E80F add R30,R24
0108 F91F adc R31,R25
010A 2082 std z+0,R2
010C .dbline 43
010C ; udpbuffer_in_p++;
010C 80910000 lds R24,_udpbuffer_in_p
0110 90910100 lds R25,_udpbuffer_in_p+1
0114 0196 adiw R24,1
0116 90930100 sts _udpbuffer_in_p+1,R25
011A 80930000 sts _udpbuffer_in_p,R24
011E .dbline 44
011E ; if(udpbuffer_in_p>=1024){udpbuffer_in_p=0;}
011E 8030 cpi R24,0
0120 E4E0 ldi R30,4
0122 9E07 cpc R25,R30
0124 30F0 brlo L12
0126 .dbline 44
0126 .dbline 44
0126 2224 clr R2
0128 3324 clr R3
012A 30920100 sts _udpbuffer_in_p+1,R3
012E 20920000 sts _udpbuffer_in_p,R2
0132 .dbline 44
0132 L12:
0132 .dbline 45
0132 L9:
0132 .dbline 40
0132 C501 movw R24,R10
0134 0196 adiw R24,1
0136 5C01 movw R10,R24
0138 L11:
0138 .dbline 40
0138 20900000 lds R2,_udpdatalen
013C 30900100 lds R3,_udpdatalen+1
0140 A214 cp R10,R2
0142 B304 cpc R11,R3
0144 A0F2 brlo L8
0146 .dbline 46
0146 ; }
0146 ; udp_ok=1;
0146 41E0 ldi R20,1
0148 .dbline 47
0148 ; break;
0148 1CC0 xjmp L4
014A X2:
014A .dbline 50
014A ;
014A ; case localport_udp_port01: //端口1 使用外部RAM
014A ; for(;i<udpdatalen;i++)
014A L15:
014A .dbline 51
014A .dbline 52
014A CB01 movw R24,R22
014C 0896 adiw R24,8
014E F501 movw R30,R10
0150 E80F add R30,R24
0152 F91F adc R31,R25
0154 2080 ldd R2,z+0
0156 80E0 ldi R24,<_udpbuffer_ex
0158 90E0 ldi R25,>_udpbuffer_ex
015A F501 movw R30,R10
015C E80F add R30,R24
015E F91F adc R31,R25
0160 2082 std z+0,R2
0162 .dbline 53
0162 L16:
0162 .dbline 50
0162 C501 movw R24,R10
0164 0196 adiw R24,1
0166 5C01 movw R10,R24
0168 L18:
0168 .dbline 50
0168 20900000 lds R2,_udpdatalen
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -