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

📄 nic.lis

📁 uIP是免费的TCP/IP协议栈,我们将它移植到我们的AVR以太网开发板中
💻 LIS
字号:
                        .module nic.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\hexok项目\AVRNET项目\AVRNET光盘\AVRuIP\nic.c
 0000                   .dbfunc e nic_init _nic_init fV
                        .even
 0000           _nic_init::
 0000                   .dbline -1
 0000                   .dbline 25
 0000           ; /*****************************************************************************
 0000           ; *  Module Name:       NIC Driver Interface for uIP-AVR Port
 0000           ; *  
 0000           ; *  Created By:        Louis Beaudoin (www.embedded-creations.com)
 0000           ; *
 0000           ; *  Original Release:  November 16, 2003 
 0000           ; *
 0000           ; *  Module Description:  
 0000           ; *  Provides three functions to interface with a NIC driver
 0000           ; *  These functions can be called directly from the main uIP control loop
 0000           ; *  to send packets from uip_buf and uip_appbuf, and store incoming packets to
 0000           ; *  uip_buf
 0000           ; *
 0000           ; *
 0000           ; *****************************************************************************/
 0000           ; 
 0000           ; #include "nic.h"
 0000           ; 
 0000           ; 
 0000           ; #define IP_TCP_HEADER_LENGTH 40
 0000           ; #define TOTAL_HEADER_LENGTH (IP_TCP_HEADER_LENGTH+ETHERNET_HEADER_LENGTH)
 0000           ; 
 0000           ; 
 0000           ; void nic_init(void)
 0000           ; {
 0000                   .dbline 26
 0000           ;       NICInit();
 0000 0E940000          xcall _rtl8019Init
 0004                   .dbline -2
 0004           L7:
 0004                   .dbline 0 ; func end
 0004 0895              ret
 0006                   .dbend
 0006                   .dbfunc e nic_send _nic_send fV
                        .even
 0006           _nic_send::
 0006                   .dbline -1
 0006                   .dbline 31
 0006           ; }
 0006           ; 
 0006           ; 
 0006           ; void nic_send(void)
 0006           ; {
 0006                   .dbline 32
 0006           ;       NICBeginPacketSend(uip_len);
 0006 00910000          lds R16,_uip_len
 000A 10910100          lds R17,_uip_len+1
 000E 0E940000          xcall _rtl8019BeginPacketSend
 0012                   .dbline 35
 0012           ;       
 0012           ;       // send packet, using data in uip_appdata if over the IP+TCP header size
 0012           ;       if( uip_len <= TOTAL_HEADER_LENGTH )
 0012 86E3              ldi R24,54
 0014 90E0              ldi R25,0
 0016 20900000          lds R2,_uip_len
 001A 30900100          lds R3,_uip_len+1
 001E 8215              cp R24,R2
 0020 9305              cpc R25,R3
 0022 48F0              brlo L9
 0024                   .dbline 36
 0024           ;       {
 0024                   .dbline 37
 0024           ;       NICSendPacketData(uip_buf, uip_len);
 0024 20910000          lds R18,_uip_len
 0028 30910100          lds R19,_uip_len+1
 002C 00E0              ldi R16,<_uip_buf
 002E 10E0              ldi R17,>_uip_buf
 0030 0E940000          xcall _rtl8019SendPacketData
 0034                   .dbline 38
 0034           ;       }
 0034 19C0              xjmp L10
 0036           L9:
 0036                   .dbline 40
 0036           ;       else
 0036           ;       {
 0036                   .dbline 41
 0036           ;       uip_len -= TOTAL_HEADER_LENGTH;
 0036 80910000          lds R24,_uip_len
 003A 90910100          lds R25,_uip_len+1
 003E C697              sbiw R24,54
 0040 90930100          sts _uip_len+1,R25
 0044 80930000          sts _uip_len,R24
 0048                   .dbline 42
 0048           ;       NICSendPacketData(uip_buf, TOTAL_HEADER_LENGTH);
 0048 26E3              ldi R18,54
 004A 30E0              ldi R19,0
 004C 00E0              ldi R16,<_uip_buf
 004E 10E0              ldi R17,>_uip_buf
 0050 0E940000          xcall _rtl8019SendPacketData
 0054                   .dbline 43
 0054           ;         NICSendPacketData((unsigned char *)uip_appdata, uip_len);
 0054 20910000          lds R18,_uip_len
 0058 30910100          lds R19,_uip_len+1
 005C 00910000          lds R16,_uip_appdata
 0060 10910100          lds R17,_uip_appdata+1
 0064 0E940000          xcall _rtl8019SendPacketData
 0068                   .dbline 44
 0068           ;       }
 0068           L10:
 0068                   .dbline 46
 0068           ; 
 0068           ;       NICEndPacketSend();
 0068 0E940000          xcall _rtl8019EndPacketSend
 006C                   .dbline -2
 006C           L8:
 006C                   .dbline 0 ; func end
 006C 0895              ret
 006E                   .dbend
 006E                   .dbfunc e nic_poll _nic_poll fi
 006E           ;   packetLength -> R10,R11
                        .even
 006E           _nic_poll::
 006E 0E940000          xcall push_gset3x
 0072                   .dbline -1
 0072                   .dbline 56
 0072           ; }
 0072           ; 
 0072           ; 
 0072           ; 
 0072           ; #if UIP_BUFSIZE > 255
 0072           ; unsigned int nic_poll(void)
 0072           ; #else 
 0072           ; unsigned char nic_poll(void)
 0072           ; #endif /* UIP_BUFSIZE > 255 */
 0072           ; {
 0072                   .dbline 59
 0072           ;       unsigned int packetLength;
 0072           ;       
 0072           ;       packetLength = NICBeginPacketRetreive();
 0072 0E940000          xcall _rtl8019BeginPacketRetreive
 0076 5801              movw R10,R16
 0078                   .dbline 62
 0078           ; 
 0078           ;       // if there's no packet or an error - exit without ending the operation
 0078           ;       if( !packetLength )
 0078 0030              cpi R16,0
 007A 0107              cpc R16,R17
 007C 19F4              brne L12
 007E           X0:
 007E                   .dbline 63
 007E           ;         return 0;
 007E 0027              clr R16
 0080 1127              clr R17
 0082 12C0              xjmp L11
 0084           L12:
 0084                   .dbline 66
 0084           ; 
 0084           ;       // drop anything too big for the buffer
 0084           ;       if( packetLength > UIP_BUFSIZE )
 0084 8CED              ldi R24,1500
 0086 95E0              ldi R25,5
 0088 8A15              cp R24,R10
 008A 9B05              cpc R25,R11
 008C 28F4              brsh L14
 008E                   .dbline 67
 008E           ;       {
 008E                   .dbline 68
 008E           ;         NICEndPacketRetreive();
 008E 0E940000          xcall _rtl8019EndPacketRetreive
 0092                   .dbline 69
 0092           ;       return 0;
 0092 0027              clr R16
 0094 1127              clr R17
 0096 08C0              xjmp L11
 0098           L14:
 0098                   .dbline 73
 0098           ;       }
 0098           ;       
 0098           ;       // copy the packet data into the uIP packet buffer
 0098           ;       NICRetreivePacketData( uip_buf, packetLength );
 0098 9501              movw R18,R10
 009A 00E0              ldi R16,<_uip_buf
 009C 10E0              ldi R17,>_uip_buf
 009E 0E940000          xcall _rtl8019RetreivePacketData
 00A2                   .dbline 74
 00A2           ;       NICEndPacketRetreive();
 00A2 0E940000          xcall _rtl8019EndPacketRetreive
 00A6                   .dbline 77
 00A6           ;               
 00A6           ; #if UIP_BUFSIZE > 255
 00A6           ;       return packetLength;
 00A6 8501              movw R16,R10
 00A8                   .dbline -2
 00A8           L11:
 00A8 0E940000          xcall pop_gset3x
 00AC                   .dbline 0 ; func end
 00AC 0895              ret
 00AE                   .dbsym r packetLength 10 i
 00AE                   .dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -