📄 avrnet.lss
字号:
aa8: 8a e0 ldi r24, 0x0A ; 10
aaa: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
aae: 6a e1 ldi r22, 0x1A ; 26
ab0: 8b e0 ldi r24, 0x0B ; 11
ab2: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
ab6: 64 e2 ldi r22, 0x24 ; 36
ab8: 84 e0 ldi r24, 0x04 ; 4
aba: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
abe: 6a e1 ldi r22, 0x1A ; 26
ac0: 85 e0 ldi r24, 0x05 ; 5
ac2: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
ac6: 60 e0 ldi r22, 0x00 ; 0
ac8: 86 e0 ldi r24, 0x06 ; 6
aca: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
ace: 60 e2 ldi r22, 0x20 ; 32
ad0: 87 e0 ldi r24, 0x07 ; 7
ad2: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
ad6: 6d e0 ldi r22, 0x0D ; 13
ad8: 80 ec ldi r24, 0xC0 ; 192
ada: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
ade: 62 e3 ldi r22, 0x32 ; 50
ae0: 82 ec ldi r24, 0xC2 ; 194
ae2: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
ae6: 60 e4 ldi r22, 0x40 ; 64
ae8: 83 ec ldi r24, 0xC3 ; 195
aea: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
aee: 6f e3 ldi r22, 0x3F ; 63
af0: 89 ec ldi r24, 0xC9 ; 201
af2: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
af6: 62 e1 ldi r22, 0x12 ; 18
af8: 86 ec ldi r24, 0xC6 ; 198
afa: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
afe: 6c e0 ldi r22, 0x0C ; 12
b00: 87 ec ldi r24, 0xC7 ; 199
b02: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
b06: 6e ee ldi r22, 0xEE ; 238
b08: 8a ec ldi r24, 0xCA ; 202
b0a: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
b0e: 65 e0 ldi r22, 0x05 ; 5
b10: 8b ec ldi r24, 0xCB ; 203
b12: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
b16: f7 01 movw r30, r14
b18: 60 81 ld r22, Z
b1a: 84 ee ldi r24, 0xE4 ; 228
b1c: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
b20: f7 01 movw r30, r14
b22: 61 81 ldd r22, Z+1 ; 0x01
b24: 85 ee ldi r24, 0xE5 ; 229
b26: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
b2a: f7 01 movw r30, r14
b2c: 62 81 ldd r22, Z+2 ; 0x02
b2e: 82 ee ldi r24, 0xE2 ; 226
b30: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
b34: f7 01 movw r30, r14
b36: 63 81 ldd r22, Z+3 ; 0x03
b38: 83 ee ldi r24, 0xE3 ; 227
b3a: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
b3e: f7 01 movw r30, r14
b40: 64 81 ldd r22, Z+4 ; 0x04
b42: 80 ee ldi r24, 0xE0 ; 224
b44: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
b48: f7 01 movw r30, r14
b4a: 65 81 ldd r22, Z+5 ; 0x05
b4c: 81 ee ldi r24, 0xE1 ; 225
b4e: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
b52: 60 e0 ldi r22, 0x00 ; 0
b54: 71 e0 ldi r23, 0x01 ; 1
b56: 80 e1 ldi r24, 0x10 ; 16
b58: 0e 94 3c 04 call 0x878 ; 0x878 <enc28j60PhyWrite>
b5c: 62 e7 ldi r22, 0x72 ; 114
b5e: 74 e0 ldi r23, 0x04 ; 4
b60: 84 e1 ldi r24, 0x14 ; 20
b62: 0e 94 3c 04 call 0x878 ; 0x878 <enc28j60PhyWrite>
b66: 60 eb ldi r22, 0xB0 ; 176
b68: 88 e3 ldi r24, 0x38 ; 56
b6a: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
b6e: 6f e3 ldi r22, 0x3F ; 63
b70: 88 e2 ldi r24, 0x28 ; 40
b72: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
b76: 60 e3 ldi r22, 0x30 ; 48
b78: 89 e2 ldi r24, 0x29 ; 41
b7a: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
b7e: 69 ef ldi r22, 0xF9 ; 249
b80: 80 e3 ldi r24, 0x30 ; 48
b82: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
b86: 67 ef ldi r22, 0xF7 ; 247
b88: 81 e3 ldi r24, 0x31 ; 49
b8a: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
b8e: 62 e1 ldi r22, 0x12 ; 18
b90: 84 ec ldi r24, 0xC4 ; 196
b92: 0e 94 0d 04 call 0x81a ; 0x81a <enc28j60Write>
b96: 8f e1 ldi r24, 0x1F ; 31
b98: 0e 94 de 03 call 0x7bc ; 0x7bc <enc28j60SetBank>
b9c: 40 ec ldi r20, 0xC0 ; 192
b9e: 6b e1 ldi r22, 0x1B ; 27
ba0: 80 e8 ldi r24, 0x80 ; 128
ba2: 0e 94 d3 03 call 0x7a6 ; 0x7a6 <enc28j60WriteOp>
ba6: 44 e0 ldi r20, 0x04 ; 4
ba8: 6f e1 ldi r22, 0x1F ; 31
baa: 80 e8 ldi r24, 0x80 ; 128
bac: 0e 94 d3 03 call 0x7a6 ; 0x7a6 <enc28j60WriteOp>
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
bb0: c8 01 movw r24, r16
bb2: 01 97 sbiw r24, 0x01 ; 1
bb4: f1 f7 brne .-4 ; 0xbb2 <enc28j60_init+0x17e>
bb6: 1f 91 pop r17
bb8: 0f 91 pop r16
bba: ff 90 pop r15
bbc: ef 90 pop r14
bbe: 08 95 ret
00000bc0 <software_reset>:
//*****************************************************************************************
#ifndef REMOVE_BOOTLOADER_SUPPORT
void software_reset(void) __attribute__ ((naked));
void software_reset(void)
{
bc0: 88 e1 ldi r24, 0x18 ; 24
bc2: 90 e0 ldi r25, 0x00 ; 0
bc4: 28 e0 ldi r18, 0x08 ; 8
bc6: 0f b6 in r0, 0x3f ; 63
bc8: f8 94 cli
bca: a8 95 wdr
bcc: 81 bd out 0x21, r24 ; 33
bce: 0f be out 0x3f, r0 ; 63
bd0: 21 bd out 0x21, r18 ; 33
bd2: ff cf rjmp .-2 ; 0xbd2 <software_reset+0x12>
00000bd4 <client_process>:
wdt_enable(WDTO_15MS);
for(;;);
}
#endif
// end added in V1.1 ======================================================================
//*****************************************************************************************
//
// Function : server_process
// Description : Run web server and listen on port 80
//
//*****************************************************************************************
void server_process ( void )
{
MAC_ADDR client_mac;
IP_ADDR client_ip;
// you can change rx,tx buffer size in includes.h
BYTE rxtx_buffer[MAX_RXTX_BUFFER];
WORD plen;
if ( flag1.bits.syn_is_sent )
return;
// get new packet
plen = enc28j60_packet_receive( (BYTE*)&rxtx_buffer, MAX_RXTX_BUFFER );
//plen will ne unequal to zero if there is a valid packet (without crc error)
if(plen==0)
return;
// copy client mac address from buffer to client mac variable
memcpy ( (BYTE*)&client_mac, &rxtx_buffer[ ETH_SRC_MAC_P ], sizeof(MAC_ADDR) );
// check arp packet if match with avr ip let's send reply
if ( arp_packet_is_arp( rxtx_buffer, (WORD_BYTES){ARP_OPCODE_REQUEST_V} ) )
{
arp_send_reply ( (BYTE*)&rxtx_buffer, (BYTE*)&client_mac );
return;
}
// get client ip address
memcpy ( (BYTE*)&client_ip, &rxtx_buffer[ IP_SRC_IP_P ], sizeof(IP_ADDR) );
// check ip packet send to avr or not?
if ( ip_packet_is_ip ( (BYTE*)&rxtx_buffer ) == 0 )
{
return;
}
// check ICMP packet, if packet is icmp packet let's send icmp echo reply
if ( icmp_send_reply ( (BYTE*)&rxtx_buffer, (BYTE*)&client_mac, (BYTE*)&client_ip ) )
{
return;
}
// check UDP packet
if (udp_receive ( (BYTE *)&rxtx_buffer, (BYTE *)&client_mac, (BYTE *)&client_ip ))
{
// added in V1.1 ***********************************
#ifndef REMOVE_BOOTLOADER_SUPPORT
if( flag2.bits.software_reset )
software_reset();
#endif
// end added in V1.1 *******************************
return;
}
// tcp start here
// start web server at port 80, see http.c
http_webserver_process ( (BYTE*)rxtx_buffer, (BYTE*)&client_mac, (BYTE*)&client_ip );
}
//*****************************************************************************************
//
// Function : client_process
// Description : send temparature to web server, this option is disabled by default.
// YOU MUST install webserver and server script before enable this option,
// I recommented Apache webserver and PHP script.
// More detail about Apache and PHP installation please visit http://www.avrportal.com/
//
//*****************************************************************************************
void client_process ( void )
{
bd4: 4f 92 push r4
bd6: 5f 92 push r5
bd8: 6f 92 push r6
bda: 7f 92 push r7
bdc: 8f 92 push r8
bde: 9f 92 push r9
be0: af 92 push r10
be2: bf 92 push r11
be4: cf 92 push r12
be6: df 92 push r13
be8: ef 92 push r14
bea: 0f 93 push r16
bec: 1f 93 push r17
bee: cf 93 push r28
bf0: df 93 push r29
bf2: cd b7 in r28, 0x3d ; 61
bf4: de b7 in r29, 0x3e ; 62
bf6: ce 5e subi r28, 0xEE ; 238
bf8: d5 40 sbci r29, 0x05 ; 5
bfa: 0f b6 in r0, 0x3f ; 63
bfc: f8 94 cli
bfe: de bf out 0x3e, r29 ; 62
c00: 0f be out 0x3f, r0 ; 63
c02: cd bf out 0x3d, r28 ; 61
WORD dlength;
// you can change rx,tx buffer size in includes.h
BYTE rxtx_buffer[MAX_RXTX_BUFFER];
// wait for send temparature flag is set, this flag set by time_base function (menu.c)
if ( flag1.bits.send_temp == 0 )
c04: 80 91 02 01 lds r24, 0x0102
c08: 84 ff sbrs r24, 4
c0a: be c0 rjmp .+380 ; 0xd88 <client_process+0x1b4>
return;
// AVR busy now and wait untill transfer data to web browser completed.
if ( flag1.bits.syn_is_received )
c0c: 86 fd sbrc r24, 6
c0e: bc c0 rjmp .+376 ; 0xd88 <client_process+0x1b4>
return;
// AVR sent temparature to web server but not found web server on port 80
//if ( flag1.bits.not_found_server )
// return;
// send SYN to initial connection
if ( flag1.bits.syn_is_sent == 0 )
c10: 85 fd sbrc r24, 5
c12: 2e c0 rjmp .+92 ; 0xc70 <client_process+0x9c>
{
// start arp
// server ip was not found on network
if ( arp_who_is ( rxtx_buffer, (BYTE*)&server_mac, (BYTE*)&server_ip ) == 0 )
c14: 09 e0 ldi r16, 0x09 ; 9
c16: 11 e0 ldi r17, 0x01 ; 1
c18: a8 01 movw r20, r16
c1a: 61 e1 ldi r22, 0x11 ; 17
c1c: 71 e0 ldi r23, 0x01 ; 1
c1e: 2e 01 movw r4, r28
c20: 08 94 sec
c22: 41 1c adc r4, r1
c24: 51 1c adc r5, r1
c26: c2 01 movw r24, r4
c28: 0e 94 cf 0c call 0x199e ; 0x199e <arp_who_is>
c2c: 88 23 and r24, r24
c2e: 21 f4 brne .+8 ; 0xc38 <client_process+0x64>
{
flag1.bits.send_temp = 0;
c30: 80 91 02 01 lds r24, 0x0102
c34: 8f 7e andi r24, 0xEF ; 239
c36: 2c c0 rjmp .+88 ; 0xc90 <client_process+0xbc>
return;
}
// send SYN packet to initial connection
tcp_send_packet (
c38: 1f 93 push r17
c3a: 0f 93 push r16
c3c: e1 e1 ldi r30, 0x11 ; 17
c3e: 8e 2e mov r8, r30
c40: e1 e0 ldi r30, 0x01 ; 1
c42: 9e 2e mov r9, r30
c44: aa 24 eor r10, r10
c46: bb 24 eor r11, r11
c48: cc 24 eor r12, r12
c4a: dd 24 eor r13, r13
c4c: 71 e0 ldi r23, 0x01 ; 1
c4e: e7 2e mov r14, r23
c50: 01 e0 ldi r16, 0x01 ; 1
c52: 22 e0 ldi r18, 0x02 ; 2
c54: 40 eb ldi r20, 0xB0 ; 176
c56: 54 e0 ldi r21, 0x04 ; 4
c58: 60 e5 ldi r22, 0x50 ; 80
c5a: 70 e0 ldi r23, 0x00 ; 0
c5c: c2 01 movw r24, r4
c5e: 0e 94 44 0d call 0x1a88 ; 0x1a88 <tcp_send_packet>
rxtx_buffer,
(WORD_BYTES){80}, // destination port
(WORD_BYTES){1200}, // source port
TCP_FLAG_SYN_V, // flag
1, // (bool)maximum segment size
1, // (bool)clear sequence ack number
0, // 0=use old seq, seqack : 1=new seq,seqack no data : new seq,seqack with data
0, // tcp data length
(BYTE*)&server_mac, // server mac address
(BYTE*)&server_ip ); // server ip address
flag1.bits.syn_is_sent = 1;
c62: 80 91 02 01 lds r24, 0x0102
c66: 80 62 ori r24, 0x20 ; 32
c68: 80 93 02 01 sts 0x0102, r24
c6c: 0f 90 pop r0
c6e: 0f 90 pop r0
}
// get new packet
dlength = enc28j60_packet_receive( (BYTE*)&rxtx_buffer, MAX_RXTX_BUFFER );
c70: 6e ee ldi r22, 0xEE ; 238
c72: 75 e0 ldi r23, 0x05 ; 5
c74: 2e 01 movw r4, r28
c76: 08 94 sec
c78: 41 1c adc r4, r1
c7a: 51 1c adc r5, r1
c7c: c2 01 movw r24, r4
c7e: 0e 94 a3 04 call 0x946 ; 0x946 <enc28j60_packet_receive>
// no new packet incoming
if ( dlength == 0 )
c82: 89 2b or r24, r25
c84: 41 f4 brne .+16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -