?? 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: ea e6 ldi r30, 0x6A ; 106
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: 0e 94 1e 07 call 0xe3c ; 0xe3c <main>
744: 0c 94 34 14 jmp 0x2868 ; 0x2868 <_exit>
00000748 <__bad_interrupt>:
748: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
0000074c <enc28j60ReadOp>:
// Description : Send ARP request packet to destination.
//
//*******************************************************************************************
BYTE enc28j60ReadOp(BYTE op, BYTE address)
{
74c: c4 98 cbi 0x18, 4 ; 24
// activate CS
CSACTIVE;
// issue read command
SPDR = op | (address & ADDR_MASK);
74e: 96 2f mov r25, r22
750: 9f 71 andi r25, 0x1F ; 31
752: 98 2b or r25, r24
754: 9f b9 out 0x0f, r25 ; 15
waitspi();
756: 77 9b sbis 0x0e, 7 ; 14
758: fe cf rjmp .-4 ; 0x756 <enc28j60ReadOp+0xa>
// read data
SPDR = 0x00;
75a: 1f b8 out 0x0f, r1 ; 15
waitspi();
75c: 77 9b sbis 0x0e, 7 ; 14
75e: fe cf rjmp .-4 ; 0x75c <enc28j60ReadOp+0x10>
// do dummy read if needed (for mac and mii, see datasheet page 29)
if(address & 0x80)
760: 67 ff sbrs r22, 7
762: 03 c0 rjmp .+6 ; 0x76a <enc28j60ReadOp+0x1e>
{
SPDR = 0x00;
764: 1f b8 out 0x0f, r1 ; 15
waitspi();
766: 77 9b sbis 0x0e, 7 ; 14
768: fe cf rjmp .-4 ; 0x766 <enc28j60ReadOp+0x1a>
}
// release CS
CSPASSIVE;
76a: c4 9a sbi 0x18, 4 ; 24
return(SPDR);
76c: 8f b1 in r24, 0x0f ; 15
}
76e: 99 27 eor r25, r25
770: 08 95 ret
00000772 <enc28j60WriteOp>:
//*******************************************************************************************
//
// Function : icmp_send_request
// Description : Send ARP request packet to destination.
//
//*******************************************************************************************
void enc28j60WriteOp(BYTE op, BYTE address, BYTE data)
{
772: c4 98 cbi 0x18, 4 ; 24
CSACTIVE;
// issue write command
SPDR = op | (address & ADDR_MASK);
774: 6f 71 andi r22, 0x1F ; 31
776: 68 2b or r22, r24
778: 6f b9 out 0x0f, r22 ; 15
waitspi();
77a: 77 9b sbis 0x0e, 7 ; 14
77c: fe cf rjmp .-4 ; 0x77a <enc28j60WriteOp+0x8>
// write data
SPDR = data;
77e: 4f b9 out 0x0f, r20 ; 15
waitspi();
780: 77 9b sbis 0x0e, 7 ; 14
782: fe cf rjmp .-4 ; 0x780 <enc28j60WriteOp+0xe>
CSPASSIVE;
784: c4 9a sbi 0x18, 4 ; 24
786: 08 95 ret
00000788 <enc28j60SetBank>:
}
//*******************************************************************************************
//
// Function : icmp_send_request
// Description : Send ARP request packet to destination.
//
//*******************************************************************************************
void enc28j60SetBank(BYTE address)
{
788: 1f 93 push r17
78a: cf 93 push r28
78c: df 93 push r29
78e: 18 2f mov r17, r24
// set the bank (if needed)
if((address & BANK_MASK) != Enc28j60Bank)
790: c8 2f mov r28, r24
792: dd 27 eor r29, r29
794: c0 76 andi r28, 0x60 ; 96
796: d0 70 andi r29, 0x00 ; 0
798: 80 91 ea 00 lds r24, 0x00EA
79c: 99 27 eor r25, r25
79e: c8 17 cp r28, r24
7a0: d9 07 cpc r29, r25
7a2: 91 f0 breq .+36 ; 0x7c8 <enc28j60SetBank+0x40>
{
// set the bank
enc28j60WriteOp(ENC28J60_BIT_FIELD_CLR, ECON1, (ECON1_BSEL1|ECON1_BSEL0));
7a4: 43 e0 ldi r20, 0x03 ; 3
7a6: 6f e1 ldi r22, 0x1F ; 31
7a8: 80 ea ldi r24, 0xA0 ; 160
7aa: 0e 94 b9 03 call 0x772 ; 0x772 <enc28j60WriteOp>
enc28j60WriteOp(ENC28J60_BIT_FIELD_SET, ECON1, (address & BANK_MASK)>>5);
7ae: 85 e0 ldi r24, 0x05 ; 5
7b0: d5 95 asr r29
7b2: c7 95 ror r28
7b4: 8a 95 dec r24
7b6: e1 f7 brne .-8 ; 0x7b0 <enc28j60SetBank+0x28>
7b8: 4c 2f mov r20, r28
7ba: 6f e1 ldi r22, 0x1F ; 31
7bc: 80 e8 ldi r24, 0x80 ; 128
7be: 0e 94 b9 03 call 0x772 ; 0x772 <enc28j60WriteOp>
Enc28j60Bank = (address & BANK_MASK);
7c2: 10 76 andi r17, 0x60 ; 96
7c4: 10 93 ea 00 sts 0x00EA, r17
7c8: df 91 pop r29
7ca: cf 91 pop r28
7cc: 1f 91 pop r17
7ce: 08 95 ret
000007d0 <enc28j60Read>:
}
}
//*******************************************************************************************
//
// Function : icmp_send_request
// Description : Send ARP request packet to destination.
//
//*******************************************************************************************
BYTE enc28j60Read(BYTE address)
{
7d0: 1f 93 push r17
7d2: 18 2f mov r17, r24
// select bank to read
enc28j60SetBank(address);
7d4: 0e 94 c4 03 call 0x788 ; 0x788 <enc28j60SetBank>
// do the read
return enc28j60ReadOp(ENC28J60_READ_CTRL_REG, address);
7d8: 61 2f mov r22, r17
7da: 80 e0 ldi r24, 0x00 ; 0
7dc: 0e 94 a6 03 call 0x74c ; 0x74c <enc28j60ReadOp>
}
7e0: 99 27 eor r25, r25
7e2: 1f 91 pop r17
7e4: 08 95 ret
000007e6 <enc28j60Write>:
//*******************************************************************************************
//
// Function : icmp_send_request
// Description : Send ARP request packet to destination.
//
//*******************************************************************************************
void enc28j60Write(BYTE address, BYTE data)
{
7e6: 0f 93 push r16
7e8: 1f 93 push r17
7ea: 08 2f mov r16, r24
7ec: 16 2f mov r17, r22
// select bank to write
enc28j60SetBank(address);
7ee: 0e 94 c4 03 call 0x788 ; 0x788 <enc28j60SetBank>
// do the write
enc28j60WriteOp(ENC28J60_WRITE_CTRL_REG, address, data);
7f2: 41 2f mov r20, r17
7f4: 60 2f mov r22, r16
7f6: 80 e4 ldi r24, 0x40 ; 64
7f8: 0e 94 b9 03 call 0x772 ; 0x772 <enc28j60WriteOp>
7fc: 1f 91 pop r17
7fe: 0f 91 pop r16
800: 08 95 ret
00000802 <enc28j60_read_phyreg>:
}
//*******************************************************************************************
//
// Function : icmp_send_request
// Description : Send ARP request packet to destination.
//
//*******************************************************************************************
WORD enc28j60_read_phyreg(BYTE address)
{
802: 0f 93 push r16
804: 1f 93 push r17
WORD data;
// set the PHY register address
enc28j60Write(MIREGADR, address);
806: 68 2f mov r22, r24
808: 84 ed ldi r24, 0xD4 ; 212
80a: 0e 94 f3 03 call 0x7e6 ; 0x7e6 <enc28j60Write>
enc28j60Write(MICMD, MICMD_MIIRD);
80e: 61 e0 ldi r22, 0x01 ; 1
810: 82 ed ldi r24, 0xD2 ; 210
812: 0e 94 f3 03 call 0x7e6 ; 0x7e6 <enc28j60Write>
// Loop to wait until the PHY register has been read through the MII
// This requires 10.24us
while( (enc28j60Read(MISTAT) & MISTAT_BUSY) );
816: 8a ee ldi r24, 0xEA ; 234
818: 0e 94 e8 03 call 0x7d0 ; 0x7d0 <enc28j60Read>
81c: 80 fd sbrc r24, 0
81e: fb cf rjmp .-10 ; 0x816 <enc28j60_read_phyreg+0x14>
// Stop reading
enc28j60Write(MICMD, MICMD_MIIRD);
820: 61 e0 ldi r22, 0x01 ; 1
822: 82 ed ldi r24, 0xD2 ; 210
824: 0e 94 f3 03 call 0x7e6 ; 0x7e6 <enc28j60Write>
// Obtain results and return
data = enc28j60Read ( MIRDL );
828: 88 ed ldi r24, 0xD8 ; 216
82a: 0e 94 e8 03 call 0x7d0 ; 0x7d0 <enc28j60Read>
82e: 08 2f mov r16, r24
830: 11 27 eor r17, r17
data |= enc28j60Read ( MIRDH );
832: 89 ed ldi r24, 0xD9 ; 217
834: 0e 94 e8 03 call 0x7d0 ; 0x7d0 <enc28j60Read>
838: 99 27 eor r25, r25
return data;
}
83a: 80 2b or r24, r16
83c: 91 2b or r25, r17
83e: 1f 91 pop r17
840: 0f 91 pop r16
842: 08 95 ret
00000844 <enc28j60PhyWrite>:
//*******************************************************************************************
//
// Function : icmp_send_request
// Description : Send ARP request packet to destination.
//
//*******************************************************************************************
void enc28j60PhyWrite(BYTE address, WORD_BYTES data)
{
844: 0f 93 push r16
846: 1f 93 push r17
848: 8b 01 movw r16, r22
// set the PHY register address
enc28j60Write(MIREGADR, address);
84a: 68 2f mov r22, r24
84c: 84 ed ldi r24, 0xD4 ; 212
84e: 0e 94 f3 03 call 0x7e6 ; 0x7e6 <enc28j60Write>
// write the PHY data
enc28j60Write(MIWRL, data.byte.low);
852: 60 2f mov r22, r16
854: 86 ed ldi r24, 0xD6 ; 214
856: 0e 94 f3 03 call 0x7e6 ; 0x7e6 <enc28j60Write>
enc28j60Write(MIWRH, data.byte.high);
85a: 61 2f mov r22, r17
85c: 87 ed ldi r24, 0xD7 ; 215
85e: 0e 94 f3 03 call 0x7e6 ; 0x7e6 <enc28j60Write>
862: 03 c0 rjmp .+6 ; 0x86a <__stack+0xb>
*/
void
_delay_loop_1(uint8_t __count)
{
__asm__ volatile (
864: 80 e5 ldi r24, 0x50 ; 80
866: 8a 95 dec r24
868: f1 f7 brne .-4 ; 0x866 <__stack+0x7>
// wait until the PHY write completes
while(enc28j60Read(MISTAT) & MISTAT_BUSY)
86a: 8a ee ldi r24, 0xEA ; 234
86c: 0e 94 e8 03 call 0x7d0 ; 0x7d0 <enc28j60Read>
870: 80 fd sbrc r24, 0
872: f8 cf rjmp .-16 ; 0x864 <__stack+0x5>
874: 1f 91 pop r17
876: 0f 91 pop r16
878: 08 95 ret
0000087a <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 /
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -