📄 rtl8019.lis
字号:
00DA ; // clear the packet received interrupt flag
00DA ; rtl8019Write(ISR, (1<<ISR_PRX));
00DA .dbline 400
00DA ;
00DA ; // the boundary pointer is invalid, reset the contents of the buffer and exit
00DA ; if( (bnry >= RXSTOP_INIT) || (bnry < RXSTART_INIT) )
00DA 8C2D mov R24,R12
00DC 8036 cpi R24,96
00DE 10F4 brsh L67
00E0 8634 cpi R24,70
00E2 78F4 brsh L65
00E4 L67:
00E4 .dbline 401
00E4 ; {
00E4 L68:
00E4 .dbline 402
00E4 .dbline 402
00E4 86E4 ldi R24,70
00E6 809300C3 sts 49920,R24
00EA .dbline 402
00EA L69:
00EA .dbline 402
00EA ; rtl8019Write(BNRY, RXSTART_INIT);
00EA L71:
00EA .dbline 403
00EA .dbline 403
00EA 82E6 ldi R24,98
00EC 809300C0 sts 49152,R24
00F0 .dbline 403
00F0 L72:
00F0 .dbline 403
00F0 ; rtl8019Write(CR, 0x62);
00F0 L74:
00F0 .dbline 404
00F0 .dbline 404
00F0 86E4 ldi R24,70
00F2 809300C7 sts 50944,R24
00F6 .dbline 404
00F6 L75:
00F6 .dbline 404
00F6 ; rtl8019Write(CURR, RXSTART_INIT);
00F6 L77:
00F6 .dbline 405
00F6 .dbline 405
00F6 82E2 ldi R24,34
00F8 809300C0 sts 49152,R24
00FC .dbline 405
00FC L78:
00FC .dbline 405
00FC ; rtl8019Write(CR, 0x22);
00FC .dbline 407
00FC ;
00FC ; return 0;
00FC 0027 clr R16
00FE 1127 clr R17
0100 47C0 xjmp L53
0102 L65:
0102 L80:
0102 .dbline 411
0102 .dbline 411
0102 84E0 ldi R24,4
0104 809300CA sts 51712,R24
0108 .dbline 411
0108 L81:
0108 .dbline 411
0108 ; }
0108 ;
0108 ; // initiate DMA to transfer the RTL8019 packet header
0108 ; rtl8019Write(RBCR0, 4);
0108 L83:
0108 .dbline 412
0108 .dbline 412
0108 2224 clr R2
010A 209200CB sts 51968,R2
010E .dbline 412
010E L84:
010E .dbline 412
010E ; rtl8019Write(RBCR1, 0);
010E L86:
010E .dbline 413
010E .dbline 413
010E 2224 clr R2
0110 209200C8 sts 51200,R2
0114 .dbline 413
0114 L87:
0114 .dbline 413
0114 ; rtl8019Write(RSAR0, 0);
0114 L89:
0114 .dbline 414
0114 .dbline 414
0114 C09200C9 sts 51456,R12
0118 .dbline 414
0118 L90:
0118 .dbline 414
0118 ; rtl8019Write(RSAR1, bnry);
0118 L92:
0118 .dbline 415
0118 .dbline 415
0118 8AE0 ldi R24,10
011A 809300C0 sts 49152,R24
011E .dbline 415
011E L93:
011E .dbline 415
011E ; rtl8019Write(CR, 0x0A);
011E .dbline 416
011E ; for(i=0;i<4;i++)
011E AA24 clr R10
0120 09C0 xjmp L98
0122 L95:
0122 .dbline 417
0122 CE01 movw R24,R28
0124 EA2D mov R30,R10
0126 FF27 clr R31
0128 E80F add R30,R24
012A F91F adc R31,R25
012C 209000D0 lds R2,53248
0130 2082 std z+0,R2
0132 L96:
0132 .dbline 416
0132 A394 inc R10
0134 L98:
0134 .dbline 416
0134 8A2D mov R24,R10
0136 8430 cpi R24,4
0138 A0F3 brlo L95
013A L99:
013A .dbline 420
013A .dbline 420
013A 82E2 ldi R24,34
013C 809300C0 sts 49152,R24
0140 .dbline 420
0140 L100:
0140 .dbline 420
0140 ; pageheader[i] = rtl8019Read(RDMAPORT);
0140 ;
0140 ; // end the DMA operation
0140 ; rtl8019Write(CR, 0x22);
0140 .dbline 421
0140 ; for(i = 0; i <= 20; i++)
0140 AA24 clr R10
0142 06C0 xjmp L105
0144 L102:
0144 .dbline 422
0144 ; if(rtl8019Read(ISR) & 1<<6)
0144 209000C7 lds R2,50944
0148 26FE sbrs R2,6
014A 01C0 rjmp L106
014C .dbline 423
014C ; break;
014C 04C0 xjmp L104
014E L106:
014E L103:
014E .dbline 421
014E A394 inc R10
0150 L105:
0150 .dbline 421
0150 84E1 ldi R24,20
0152 8A15 cp R24,R10
0154 B8F7 brsh L102
0156 L104:
0156 L108:
0156 .dbline 424
0156 .dbline 424
0156 80E4 ldi R24,64
0158 809300C7 sts 50944,R24
015C .dbline 424
015C L109:
015C .dbline 424
015C ; rtl8019Write(ISR, 1<<6);
015C .dbline 427
015C ;
015C ;
015C ; rxlen = (pageheader[enetpacketLenH]<<8) + pageheader[enetpacketLenL];
015C 2A80 ldd R2,y+2
015E 3B80 ldd R3,y+3
0160 B32C mov R11,R3
0162 A22C mov R10,R2
0164 .dbline 428
0164 ; nextPage = pageheader[nextblock_ptr] ;
0164 2980 ldd R2,y+1
0166 20920200 sts _nextPage,R2
016A .dbline 430
016A ;
016A ; currentRetreiveAddress = (bnry<<8) + 4;
016A 84E0 ldi R24,4
016C 3C2C mov R3,R12
016E 282E mov R2,R24
0170 30920100 sts _currentRetreiveAddress+1,R3
0174 20920000 sts _currentRetreiveAddress,R2
0178 .dbline 433
0178 ;
0178 ; // if the nextPage pointer is invalid, the packet is not ready yet - exit
0178 ; if( (nextPage >= RXSTOP_INIT) || (nextPage < RXSTART_INIT) )
0178 80910200 lds R24,_nextPage
017C 8036 cpi R24,96
017E 10F4 brsh L116
0180 8634 cpi R24,70
0182 18F4 brsh L114
0184 L116:
0184 .dbline 434
0184 ; return 0;
0184 0027 clr R16
0186 1127 clr R17
0188 03C0 xjmp L53
018A L114:
018A .dbline 436
018A ;
018A ; return rxlen-4;
018A 8501 movw R16,R10
018C 0450 subi R16,4
018E 1040 sbci R17,0
0190 .dbline -2
0190 L53:
0190 2496 adiw R28,4
0192 0E940000 xcall pop_gset4x
0196 .dbline 0 ; func end
0196 0895 ret
0198 .dbsym r rxlen 10 i
0198 .dbsym l pageheader 0 A[4:4]c
0198 .dbsym r bnry 12 c
0198 .dbsym r i 10 c
0198 .dbend
0198 .dbfunc e rtl8019RetreivePacketData _rtl8019RetreivePacketData fV
0198 ; i -> R10,R11
0198 ; length -> R18,R19
0198 ; localBuffer -> R16,R17
.even
0198 _rtl8019RetreivePacketData::
0198 0E940000 xcall push_gset3x
019C .dbline -1
019C .dbline 441
019C ; }
019C ;
019C ;
019C ; void rtl8019RetreivePacketData(unsigned char * localBuffer, unsigned int length)
019C ; {
019C L118:
019C .dbline 445
019C .dbline 445
019C 209300CA sts 51712,R18
01A0 .dbline 445
01A0 L119:
01A0 .dbline 445
01A0 ; unsigned int i;
01A0 ;
01A0 ; // initiate DMA to transfer the data
01A0 ; rtl8019Write(RBCR0, (unsigned char)length);
01A0 L121:
01A0 .dbline 446
01A0 .dbline 446
01A0 1901 movw R2,R18
01A2 232C mov R2,R3
01A4 3324 clr R3
01A6 209200CB sts 51968,R2
01AA .dbline 446
01AA L122:
01AA .dbline 446
01AA ; rtl8019Write(RBCR1, (unsigned char)(length>>8));
01AA L124:
01AA .dbline 447
01AA .dbline 447
01AA 20900000 lds R2,_currentRetreiveAddress
01AE 30900100 lds R3,_currentRetreiveAddress+1
01B2 209200C8 sts 51200,R2
01B6 .dbline 447
01B6 L125:
01B6 .dbline 447
01B6 ; rtl8019Write(RSAR0, (unsigned char)currentRetreiveAddress);
01B6 L127:
01B6 .dbline 448
01B6 .dbline 448
01B6 20900000 lds R2,_currentRetreiveAddress
01BA 30900100 lds R3,_currentRetreiveAddress+1
01BE 232C mov R2,R3
01C0 3324 clr R3
01C2 209200C9 sts 51456,R2
01C6 .dbline 448
01C6 L128:
01C6 .dbline 448
01C6 ; rtl8019Write(RSAR1, (unsigned char)(currentRetreiveAddress>>8));
01C6 L130:
01C6 .dbline 449
01C6 .dbline 449
01C6 8AE0 ldi R24,10
01C8 809300C0 sts 49152,R24
01CC .dbline 449
01CC L131:
01CC .dbline 449
01CC ; rtl8019Write(CR, 0x0A);
01CC .dbline 450
01CC ; for(i=0;i<length;i++)
01CC AA24 clr R10
01CE BB24 clr R11
01D0 09C0 xjmp L136
01D2 L133:
01D2 .dbline 451
01D2 F501 movw R30,R10
01D4 E00F add R30,R16
01D6 F11F adc R31,R17
01D8 209000D0 lds R2,53248
01DC 2082 std z+0,R2
01DE L134:
01DE .dbline 450
01DE C501 movw R24,R10
01E0 0196 adiw R24,1
01E2 5C01 movw R10,R24
01E4 L136:
01E4 .dbline 450
01E4 A216 cp R10,R18
01E6 B306 cpc R11,R19
01E8 A0F3 brlo L133
01EA L137:
01EA .dbline 454
01EA .dbline 454
01EA 82E2 ldi R24,34
01EC 809300C0 sts 49152,R24
01F0 .dbline 454
01F0 L138:
01F0 .dbline 454
01F0 ; localBuffer[i] = rtl8019Read(RDMAPORT);
01F0 ;
01F0 ; // end the DMA operation
01F0 ; rtl8019Write(CR, 0x22);
01F0 .dbline 455
01F0 ; for(i = 0; i <= 20; i++)
01F0 AA24 clr R10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -