📄 rtl8019.lis
字号:
0016 ; #define RXSTART_INIT 0x46
0016 ; #define RXSTOP_INIT 0x60
0016 ;
0016 ;
0016 ;
0016 ; void rtl8019BeginPacketSend(unsigned int packetLength)
0016 ; {
0016 .dbline 306
0016 ; unsigned int sendPacketLength;
0016 ; sendPacketLength = (packetLength>=ETHERNET_MIN_PACKET_LENGTH) ?
0016 0C33 cpi R16,60
0018 E0E0 ldi R30,0
001A 1E07 cpc R17,R30
001C 10F0 brlo L3
001E 6801 movw R12,R16
0020 03C0 xjmp L4
0022 L3:
0022 8CE3 ldi R24,60
0024 90E0 ldi R25,0
0026 6C01 movw R12,R24
0028 L4:
0028 5601 movw R10,R12
002A L5:
002A .dbline 310
002A ; packetLength : ETHERNET_MIN_PACKET_LENGTH ;
002A ;
002A ; //start the NIC
002A ; rtl8019Write(CR,0x22);
002A .dbline 310
002A 82E2 ldi R24,34
002C 809300C0 sts 49152,R24
0030 .dbline 310
0030 .dbline 310
0030 L8:
0030 .dbline 313
0030 L9:
0030 .dbline 313
0030 ;
0030 ; // still transmitting a packet - wait for it to finish
0030 ; while( rtl8019Read(CR) & 0x04 );
0030 209000C0 lds R2,49152
0034 22FC sbrc R2,2
0036 FCCF rjmp L8
0038 L11:
0038 .dbline 316
0038 .dbline 316
0038 80E4 ldi R24,64
003A 809300C4 sts 50176,R24
003E .dbline 316
003E L12:
003E .dbline 316
003E ;
003E ; //load beginning page for transmit buffer
003E ; rtl8019Write(TPSR,TXSTART_INIT);
003E L14:
003E .dbline 319
003E .dbline 319
003E 2224 clr R2
0040 209200C8 sts 51200,R2
0044 .dbline 319
0044 L15:
0044 .dbline 319
0044 ;
0044 ; //set start address for remote DMA operation
0044 ; rtl8019Write(RSAR0,0x00);
0044 L17:
0044 .dbline 320
0044 .dbline 320
0044 80E4 ldi R24,64
0046 809300C9 sts 51456,R24
004A .dbline 320
004A L18:
004A .dbline 320
004A ; rtl8019Write(RSAR1,0x40);
004A L20:
004A .dbline 323
004A .dbline 323
004A 82E0 ldi R24,2
004C 809300C7 sts 50944,R24
0050 .dbline 323
0050 L21:
0050 .dbline 323
0050 ;
0050 ; //clear the packet stored interrupt
0050 ; rtl8019Write(ISR,(1<<ISR_PTX));
0050 L23:
0050 .dbline 326
0050 .dbline 326
0050 009300CA sts 51712,R16
0054 .dbline 326
0054 L24:
0054 .dbline 326
0054 ;
0054 ; //load data byte count for remote DMA
0054 ; rtl8019Write(RBCR0, (unsigned char)(packetLength));
0054 L26:
0054 .dbline 327
0054 .dbline 327
0054 1801 movw R2,R16
0056 232C mov R2,R3
0058 3324 clr R3
005A 209200CB sts 51968,R2
005E .dbline 327
005E L27:
005E .dbline 327
005E ; rtl8019Write(RBCR1, (unsigned char)(packetLength>>8));
005E L29:
005E .dbline 329
005E .dbline 329
005E A09200C5 sts 50432,R10
0062 .dbline 329
0062 L30:
0062 .dbline 329
0062 ;
0062 ; rtl8019Write(TBCR0, (unsigned char)(sendPacketLength));
0062 L32:
0062 .dbline 330
0062 .dbline 330
0062 1501 movw R2,R10
0064 232C mov R2,R3
0066 3324 clr R3
0068 209200C6 sts 50688,R2
006C .dbline 330
006C L33:
006C .dbline 330
006C ; rtl8019Write(TBCR1, (unsigned char)((sendPacketLength)>>8));
006C L35:
006C .dbline 333
006C .dbline 333
006C 82E1 ldi R24,18
006E 809300C0 sts 49152,R24
0072 .dbline 333
0072 L36:
0072 .dbline 333
0072 ;
0072 ; //do remote write operation
0072 ; rtl8019Write(CR,0x12);
0072 .dbline -2
0072 L2:
0072 0E940000 xcall pop_gset4x
0076 .dbline 0 ; func end
0076 0895 ret
0078 .dbsym r sendPacketLength 10 i
0078 .dbsym r packetLength 16 i
0078 .dbend
0078 .dbfunc e rtl8019SendPacketData _rtl8019SendPacketData fV
0078 ; i -> R10,R11
0078 ; length -> R18,R19
0078 ; localBuffer -> R16,R17
.even
0078 _rtl8019SendPacketData::
0078 0E940000 xcall push_gset3x
007C .dbline -1
007C .dbline 339
007C ; }
007C ;
007C ;
007C ;
007C ; void rtl8019SendPacketData(unsigned char * localBuffer, unsigned int length)
007C ; {
007C .dbline 342
007C ; unsigned int i;
007C ;
007C ; for(i=0;i<length;i++)
007C AA24 clr R10
007E BB24 clr R11
0080 09C0 xjmp L42
0082 L39:
0082 L43:
0082 .dbline 343
0082 .dbline 343
0082 F501 movw R30,R10
0084 E00F add R30,R16
0086 F11F adc R31,R17
0088 2080 ldd R2,z+0
008A 209200D0 sts 53248,R2
008E .dbline 343
008E L44:
008E .dbline 343
008E L40:
008E .dbline 342
008E C501 movw R24,R10
0090 0196 adiw R24,1
0092 5C01 movw R10,R24
0094 L42:
0094 .dbline 342
0094 A216 cp R10,R18
0096 B306 cpc R11,R19
0098 A0F3 brlo L39
009A .dbline -2
009A L38:
009A 0E940000 xcall pop_gset3x
009E .dbline 0 ; func end
009E 0895 ret
00A0 .dbsym r i 10 i
00A0 .dbsym r length 18 i
00A0 .dbsym r localBuffer 16 pc
00A0 .dbend
00A0 .dbfunc e rtl8019EndPacketSend _rtl8019EndPacketSend fV
.even
00A0 _rtl8019EndPacketSend::
00A0 .dbline -1
00A0 .dbline 349
00A0 ; rtl8019Write(RDMAPORT, localBuffer[i]);
00A0 ; }
00A0 ;
00A0 ;
00A0 ;
00A0 ; void rtl8019EndPacketSend(void)
00A0 ; {
00A0 L47:
00A0 .dbline 351
00A0 .dbline 351
00A0 84E2 ldi R24,36
00A2 809300C0 sts 49152,R24
00A6 .dbline 351
00A6 L48:
00A6 .dbline 351
00A6 ; //send the contents of the transmit buffer onto the network
00A6 ; rtl8019Write(CR,0x24);
00A6 L50:
00A6 .dbline 354
00A6 .dbline 354
00A6 80E4 ldi R24,64
00A8 809300C7 sts 50944,R24
00AC .dbline 354
00AC L51:
00AC .dbline 354
00AC ;
00AC ; // clear the remote DMA interrupt
00AC ; rtl8019Write(ISR, (1<<ISR_RDC));
00AC .dbline -2
00AC L46:
00AC .dbline 0 ; func end
00AC 0895 ret
00AE .dbend
00AE .dbfunc e rtl8019BeginPacketRetreive _rtl8019BeginPacketRetreive fi
00AE ; rxlen -> R10,R11
00AE ; pageheader -> y+0
00AE ; bnry -> R12
00AE ; i -> R10
.even
00AE _rtl8019BeginPacketRetreive::
00AE 0E940000 xcall push_gset4x
00B2 2497 sbiw R28,4
00B4 .dbline -1
00B4 .dbline 371
00B4 ; }
00B4 ;
00B4 ;
00B4 ;
00B4 ;
00B4 ; // pointers to locations in the RTL8019 receive buffer
00B4 ; static unsigned char nextPage;
00B4 ; static unsigned int currentRetreiveAddress;
00B4 ;
00B4 ; // location of items in the RTL8019's page header
00B4 ; #define enetpacketstatus 0x00
00B4 ; #define nextblock_ptr 0x01
00B4 ; #define enetpacketLenL 0x02
00B4 ; #define enetpacketLenH 0x03
00B4 ;
00B4 ; unsigned int rtl8019BeginPacketRetreive(void)
00B4 ; {
00B4 .dbline 379
00B4 ; unsigned char i;
00B4 ; unsigned char bnry;
00B4 ;
00B4 ; unsigned char pageheader[4];
00B4 ; unsigned int rxlen;
00B4 ;
00B4 ; // check for and handle an overflow
00B4 ; rtl8019ProcessInterrupt();
00B4 9DD1 xcall _rtl8019ProcessInterrupt
00B6 L54:
00B6 .dbline 382
00B6 .dbline 382
00B6 82E6 ldi R24,98
00B8 809300C0 sts 49152,R24
00BC .dbline 382
00BC L55:
00BC .dbline 382
00BC ;
00BC ; // read CURR from page 1
00BC ; rtl8019Write(CR,0x62);
00BC .dbline 383
00BC ; i = rtl8019Read(CURR);
00BC A09000C7 lds R10,50944
00C0 L57:
00C0 .dbline 386
00C0 .dbline 386
00C0 82E2 ldi R24,34
00C2 809300C0 sts 49152,R24
00C6 .dbline 386
00C6 L58:
00C6 .dbline 386
00C6 ;
00C6 ; // return to page 0
00C6 ; rtl8019Write(CR,0x22);
00C6 .dbline 389
00C6 ;
00C6 ; // read the boundary register - pointing to the beginning of the packet
00C6 ; bnry = rtl8019Read(BNRY) ;
00C6 C09000C3 lds R12,49920
00CA .dbline 392
00CA ;
00CA ; // return if there is no packet in the buffer
00CA ; if( bnry == i )
00CA CA14 cp R12,R10
00CC 19F4 brne L60
00CE .dbline 393
00CE ; return 0;
00CE 0027 clr R16
00D0 1127 clr R17
00D2 5EC0 xjmp L53
00D4 L60:
00D4 L62:
00D4 .dbline 397
00D4 .dbline 397
00D4 81E0 ldi R24,1
00D6 809300C7 sts 50944,R24
00DA .dbline 397
00DA L63:
00DA .dbline 397
00DA ;
00DA ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -