📄 avrnet.lss
字号:
0000071a <__do_copy_data>:
71a: 10 e0 ldi r17, 0x00 ; 0
71c: a0 e6 ldi r26, 0x60 ; 96
71e: b0 e0 ldi r27, 0x00 ; 0
720: e4 e6 ldi r30, 0x64 ; 100
722: f8 e2 ldi r31, 0x28 ; 40
724: 02 c0 rjmp .+4 ; 0x72a <.do_copy_data_start>
00000726 <.do_copy_data_loop>:
726: 05 90 lpm r0, Z+
728: 0d 92 st X+, r0
0000072a <.do_copy_data_start>:
72a: aa 3e cpi r26, 0xEA ; 234
72c: b1 07 cpc r27, r17
72e: d9 f7 brne .-10 ; 0x726 <.do_copy_data_loop>
00000730 <__do_clear_bss>:
730: 11 e0 ldi r17, 0x01 ; 1
732: aa ee ldi r26, 0xEA ; 234
734: b0 e0 ldi r27, 0x00 ; 0
736: 01 c0 rjmp .+2 ; 0x73a <.do_clear_bss_start>
00000738 <.do_clear_bss_loop>:
738: 1d 92 st X+, r1
0000073a <.do_clear_bss_start>:
73a: a2 32 cpi r26, 0x22 ; 34
73c: b1 07 cpc r27, r17
73e: e1 f7 brne .-8 ; 0x738 <.do_clear_bss_loop>
740: 0c 94 1c 07 jmp 0xe38 ; 0xe38 <main>
00000744 <__bad_interrupt>:
744: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
00000748 <enc28j60ReadOp>:
// Description : Send ARP request packet to destination.
//
//*******************************************************************************************
BYTE enc28j60ReadOp(BYTE op, BYTE address)
{
748: c4 98 cbi 0x18, 4 ; 24
// activate CS
CSACTIVE;
// issue read command
SPDR = op | (address & ADDR_MASK);
74a: 96 2f mov r25, r22
74c: 9f 71 andi r25, 0x1F ; 31
74e: 98 2b or r25, r24
750: 9f b9 out 0x0f, r25 ; 15
waitspi();
752: 77 9b sbis 0x0e, 7 ; 14
754: fe cf rjmp .-4 ; 0x752 <enc28j60ReadOp+0xa>
// read data
SPDR = 0x00;
756: 1f b8 out 0x0f, r1 ; 15
waitspi();
758: 77 9b sbis 0x0e, 7 ; 14
75a: fe cf rjmp .-4 ; 0x758 <enc28j60ReadOp+0x10>
// do dummy read if needed (for mac and mii, see datasheet page 29)
if(address & 0x80)
75c: 67 ff sbrs r22, 7
75e: 03 c0 rjmp .+6 ; 0x766 <enc28j60ReadOp+0x1e>
{
SPDR = 0x00;
760: 1f b8 out 0x0f, r1 ; 15
waitspi();
762: 77 9b sbis 0x0e, 7 ; 14
764: fe cf rjmp .-4 ; 0x762 <enc28j60ReadOp+0x1a>
}
// release CS
CSPASSIVE;
766: c4 9a sbi 0x18, 4 ; 24
return(SPDR);
768: 8f b1 in r24, 0x0f ; 15
}
76a: 99 27 eor r25, r25
76c: 08 95 ret
0000076e <enc28j60WriteOp>:
//*******************************************************************************************
//
// Function : icmp_send_request
// Description : Send ARP request packet to destination.
//
//*******************************************************************************************
void enc28j60WriteOp(BYTE op, BYTE address, BYTE data)
{
76e: c4 98 cbi 0x18, 4 ; 24
CSACTIVE;
// issue write command
SPDR = op | (address & ADDR_MASK);
770: 6f 71 andi r22, 0x1F ; 31
772: 68 2b or r22, r24
774: 6f b9 out 0x0f, r22 ; 15
waitspi();
776: 77 9b sbis 0x0e, 7 ; 14
778: fe cf rjmp .-4 ; 0x776 <enc28j60WriteOp+0x8>
// write data
SPDR = data;
77a: 4f b9 out 0x0f, r20 ; 15
waitspi();
77c: 77 9b sbis 0x0e, 7 ; 14
77e: fe cf rjmp .-4 ; 0x77c <enc28j60WriteOp+0xe>
CSPASSIVE;
780: c4 9a sbi 0x18, 4 ; 24
782: 08 95 ret
00000784 <enc28j60SetBank>:
}
//*******************************************************************************************
//
// Function : icmp_send_request
// Description : Send ARP request packet to destination.
//
//*******************************************************************************************
void enc28j60SetBank(BYTE address)
{
784: 1f 93 push r17
786: cf 93 push r28
788: df 93 push r29
78a: 18 2f mov r17, r24
// set the bank (if needed)
if((address & BANK_MASK) != Enc28j60Bank)
78c: c8 2f mov r28, r24
78e: dd 27 eor r29, r29
790: c0 76 andi r28, 0x60 ; 96
792: d0 70 andi r29, 0x00 ; 0
794: 80 91 ea 00 lds r24, 0x00EA
798: 99 27 eor r25, r25
79a: c8 17 cp r28, r24
79c: d9 07 cpc r29, r25
79e: 91 f0 breq .+36 ; 0x7c4 <enc28j60SetBank+0x40>
{
// set the bank
enc28j60WriteOp(ENC28J60_BIT_FIELD_CLR, ECON1, (ECON1_BSEL1|ECON1_BSEL0));
7a0: 43 e0 ldi r20, 0x03 ; 3
7a2: 6f e1 ldi r22, 0x1F ; 31
7a4: 80 ea ldi r24, 0xA0 ; 160
7a6: 0e 94 b7 03 call 0x76e ; 0x76e <enc28j60WriteOp>
enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, (address & BANK_MASK)>>5);
7aa: 85 e0 ldi r24, 0x05 ; 5
7ac: d5 95 asr r29
7ae: c7 95 ror r28
7b0: 8a 95 dec r24
7b2: e1 f7 brne .-8 ; 0x7ac <enc28j60SetBank+0x28>
7b4: 4c 2f mov r20, r28
7b6: 6f e1 ldi r22, 0x1F ; 31
7b8: 80 e8 ldi r24, 0x80 ; 128
7ba: 0e 94 b7 03 call 0x76e ; 0x76e <enc28j60WriteOp>
Enc28j60Bank = (address & BANK_MASK);
7be: 10 76 andi r17, 0x60 ; 96
7c0: 10 93 ea 00 sts 0x00EA, r17
7c4: df 91 pop r29
7c6: cf 91 pop r28
7c8: 1f 91 pop r17
7ca: 08 95 ret
000007cc <enc28j60Read>:
}
}
//*******************************************************************************************
//
// Function : icmp_send_request
// Description : Send ARP request packet to destination.
//
//*******************************************************************************************
BYTE enc28j60Read(BYTE address)
{
7cc: 1f 93 push r17
7ce: 18 2f mov r17, r24
// select bank to read
enc28j60SetBank(address);
7d0: 0e 94 c2 03 call 0x784 ; 0x784 <enc28j60SetBank>
// do the read
return enc28j60ReadOp(ENC28J60_READ_CTRL_REG, address);
7d4: 61 2f mov r22, r17
7d6: 80 e0 ldi r24, 0x00 ; 0
7d8: 0e 94 a4 03 call 0x748 ; 0x748 <enc28j60ReadOp>
}
7dc: 99 27 eor r25, r25
7de: 1f 91 pop r17
7e0: 08 95 ret
000007e2 <enc28j60Write>:
//*******************************************************************************************
//
// Function : icmp_send_request
// Description : Send ARP request packet to destination.
//
//*******************************************************************************************
void enc28j60Write(BYTE address, BYTE data)
{
7e2: 0f 93 push r16
7e4: 1f 93 push r17
7e6: 08 2f mov r16, r24
7e8: 16 2f mov r17, r22
// select bank to write
enc28j60SetBank(address);
7ea: 0e 94 c2 03 call 0x784 ; 0x784 <enc28j60SetBank>
// do the write
enc28j60WriteOp(ENC28J60_WRITE_CTRL_REG, address, data);
7ee: 41 2f mov r20, r17
7f0: 60 2f mov r22, r16
7f2: 80 e4 ldi r24, 0x40 ; 64
7f4: 0e 94 b7 03 call 0x76e ; 0x76e <enc28j60WriteOp>
7f8: 1f 91 pop r17
7fa: 0f 91 pop r16
7fc: 08 95 ret
000007fe <enc28j60_read_phyreg>:
}
//*******************************************************************************************
//
// Function : icmp_send_request
// Description : Send ARP request packet to destination.
//
//*******************************************************************************************
WORD enc28j60_read_phyreg(BYTE address)
{
7fe: 0f 93 push r16
800: 1f 93 push r17
WORD data;
// set the PHY register address
enc28j60Write(MIREGADR, address);
802: 68 2f mov r22, r24
804: 84 ed ldi r24, 0xD4 ; 212
806: 0e 94 f1 03 call 0x7e2 ; 0x7e2 <enc28j60Write>
enc28j60Write(MICMD, MICMD_MIIRD);
80a: 61 e0 ldi r22, 0x01 ; 1
80c: 82 ed ldi r24, 0xD2 ; 210
80e: 0e 94 f1 03 call 0x7e2 ; 0x7e2 <enc28j60Write>
// Loop to wait until the PHY register has been read through the MII
// This requires 10.24us
while( (enc28j60Read(MISTAT) & MISTAT_BUSY) );
812: 8a ee ldi r24, 0xEA ; 234
814: 0e 94 e6 03 call 0x7cc ; 0x7cc <enc28j60Read>
818: 80 fd sbrc r24, 0
81a: fb cf rjmp .-10 ; 0x812 <enc28j60_read_phyreg+0x14>
// Stop reading
enc28j60Write(MICMD, MICMD_MIIRD);
81c: 61 e0 ldi r22, 0x01 ; 1
81e: 82 ed ldi r24, 0xD2 ; 210
820: 0e 94 f1 03 call 0x7e2 ; 0x7e2 <enc28j60Write>
// Obtain results and return
data = enc28j60Read ( MIRDL );
824: 88 ed ldi r24, 0xD8 ; 216
826: 0e 94 e6 03 call 0x7cc ; 0x7cc <enc28j60Read>
82a: 08 2f mov r16, r24
82c: 11 27 eor r17, r17
data |= enc28j60Read ( MIRDH );
82e: 89 ed ldi r24, 0xD9 ; 217
830: 0e 94 e6 03 call 0x7cc ; 0x7cc <enc28j60Read>
834: 99 27 eor r25, r25
return data;
}
836: 80 2b or r24, r16
838: 91 2b or r25, r17
83a: 1f 91 pop r17
83c: 0f 91 pop r16
83e: 08 95 ret
00000840 <enc28j60PhyWrite>:
//*******************************************************************************************
//
// Function : icmp_send_request
// Description : Send ARP request packet to destination.
//
//*******************************************************************************************
void enc28j60PhyWrite(BYTE address, WORD_BYTES data)
{
840: 0f 93 push r16
842: 1f 93 push r17
844: 8b 01 movw r16, r22
// set the PHY register address
enc28j60Write(MIREGADR, address);
846: 68 2f mov r22, r24
848: 84 ed ldi r24, 0xD4 ; 212
84a: 0e 94 f1 03 call 0x7e2 ; 0x7e2 <enc28j60Write>
// write the PHY data
enc28j60Write(MIWRL, data.byte.low);
84e: 60 2f mov r22, r16
850: 86 ed ldi r24, 0xD6 ; 214
852: 0e 94 f1 03 call 0x7e2 ; 0x7e2 <enc28j60Write>
enc28j60Write(MIWRH, data.byte.high);
856: 61 2f mov r22, r17
858: 87 ed ldi r24, 0xD7 ; 215
85a: 0e 94 f1 03 call 0x7e2 ; 0x7e2 <enc28j60Write>
85e: 03 c0 rjmp .+6 ; 0x866 <__stack+0x7>
*/
void
_delay_loop_1(uint8_t __count)
{
__asm__ volatile (
860: 80 e5 ldi r24, 0x50 ; 80
862: 8a 95 dec r24
864: f1 f7 brne .-4 ; 0x862 <__stack+0x3>
// wait until the PHY write completes
while(enc28j60Read(MISTAT) & MISTAT_BUSY)
866: 8a ee ldi r24, 0xEA ; 234
868: 0e 94 e6 03 call 0x7cc ; 0x7cc <enc28j60Read>
86c: 80 fd sbrc r24, 0
86e: f8 cf rjmp .-16 ; 0x860 <__stack+0x1>
870: 1f 91 pop r17
872: 0f 91 pop r16
874: 08 95 ret
00000876 <enc28j60getrev>:
{
_delay_us(15);
}
}
//*******************************************************************************************
//
// Function : icmp_send_request
// Description : Send ARP request packet to destination.
//
//*******************************************************************************************
/*
void enc28j60_init( BYTE *avr_mac)
{
// initialize I/O
//DDRB |= _BV( DDB4 );
//CSPASSIVE;
// enable PB0, reset as output /
ENC28J60_DDR |= _BV(ENC28J60_RESET_PIN_DDR);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -