⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtl8019.lis

📁 uIP是免费的TCP/IP协议栈,我们将它移植到我们的AVR以太网开发板中
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 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 + -