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

📄 ethernet.lst

📁 mc51单片机对rtl8019编程,实现ethernet的收发控制.
💻 LST
字号:
C51 COMPILER V6.23a  ETHERNET                                                              05/11/2004 18:03:26 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE ETHERNET
OBJECT MODULE PLACED IN ethernet.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ethernet.c LARGE ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "ethernet.h"
   2                  
   3          Net_inf_struc   net_inf;
   4          
   5          
   6          #define PSTART_data             0x46
   7          #define PSTOP_data              0x60
   8          #define TPSR_data               0x40
   9          
  10          //define the register offset of the Ethernet chipset  
  11          #define CR_Add          0x0
  12          #define REMOTE_DMA_PORT 0x10
  13          #define RESET_PORT              0x18
  14          //Page 0
  15          #define CLDA0_Add       0x01
  16          #define PSTART_Add      0x01
  17          #define CLDA1_Add       0x02
  18          #define PSTOP_Add       0x02
  19          #define BNRY_Add        0x03
  20          #define TSR_Add         0x04
  21          #define TPSR_Add        0x04
  22          #define NCR_Add         0x05
  23          #define TBCR0_Add       0x05
  24          #define FIFO_Add        0x06
  25          #define TBCR1_Add       0x06
  26          #define ISR_Add         0x07
  27          #define CRDA0_Add       0x08
  28          #define RSAR0_Add       0x08
  29          #define CRDA1_Add       0x09
  30          #define RSAR1_Add       0x09
  31          #define ID0_Add         0x0a
  32          #define RBCR0_Add       0x0a
  33          #define ID1_Add         0x0b
  34          #define RBCR1_Add       0x0b
  35          #define RSR_Add         0x0c
  36          #define RCR_Add         0x0c
  37          #define CNTR0_Add       0x0d
  38          #define TCR_Add         0x0d
  39          #define CNTR1_Add       0x0e
  40          #define DCR_Add         0x0e
  41          #define CNTR2_Add       0x0f
  42          #define IMR_Add         0x0f
  43          
  44          //Page 1
  45          #define PAR_Add         0x01
  46          #define CURR_Add        0x07
  47          #define MAR_Add         0x08
  48          
  49          #define wrport(x,y)     XBYTE[x] = (y)
  50          #define rdport(x)       XBYTE[x]
  51          
  52          //-----------------------------------------------------------------
  53          void ethernet_init(Uint16 base_addr, Uint8 *pMac)
  54          {
  55   1              Uint8 i;
C51 COMPILER V6.23a  ETHERNET                                                              05/11/2004 18:03:26 PAGE 2   

  56   1              net_inf.net_ifaddr = base_addr;
  57   1              if(pMac != NULL)
  58   1                      memcpy(net_inf.mac,pMac,ETHER_ADDR_LEN);
  59   1              //Page 0,Stop command
  60   1              wrport(net_inf.net_ifaddr+CR_Add,0x21);
  61   1              //Auto-initalize Remote,byte-wide DMA transmit                  
  62   1              wrport(net_inf.net_ifaddr+DCR_Add,0x98);
  63   1              //Clear Remote byte count register
  64   1              wrport(net_inf.net_ifaddr+RBCR0_Add,0);
  65   1              wrport(net_inf.net_ifaddr+RBCR1_Add,0);
  66   1              //Config reveive mode
  67   1              wrport(net_inf.net_ifaddr+RCR_Add,0xcc);
  68   1              //Config transmit mode
  69   1              wrport(net_inf.net_ifaddr+TCR_Add,0xe2);
  70   1              //Config Receive ring 
  71   1              wrport(net_inf.net_ifaddr+PSTART_Add,PSTART_data); 
  72   1              wrport(net_inf.net_ifaddr+PSTOP_Add,PSTOP_data);
  73   1              wrport(net_inf.net_ifaddr+BNRY_Add,PSTART_data);
  74   1              //clear Isr and no interrupt
  75   1              wrport(net_inf.net_ifaddr+ISR_Add,0xff);
  76   1              wrport(net_inf.net_ifaddr+IMR_Add,0x0f);        
  77   1              //Config the transmit page address
  78   1              wrport(net_inf.net_ifaddr+TPSR_Add,TPSR_data);
  79   1              wrport(net_inf.net_ifaddr+TBCR0_Add,0);
  80   1              wrport(net_inf.net_ifaddr+TBCR1_Add,0);         
  81   1              //Page 1,Stop command
  82   1              wrport(net_inf.net_ifaddr+CR_Add,0x61);
  83   1              //Config the first reveive buffer page
  84   1              wrport(net_inf.net_ifaddr+CURR_Add,PSTART_data+1);
  85   1              //Config MAC address
  86   1              for(i=0;i<6;i++){
  87   2                      wrport(net_inf.net_ifaddr+1+i,net_inf.mac[i]);
  88   2              }                               
  89   1              //Config transmit mode
  90   1              wrport(net_inf.net_ifaddr+CR_Add,0x21); 
  91   1              wrport(net_inf.net_ifaddr+TCR_Add,0xe0);
  92   1                      //Page 0,Begin command
  93   1              wrport(net_inf.net_ifaddr+CR_Add,0x22); 
  94   1      }
  95          
  96          //-----------------------------------------------------------------
  97          Bool ethernet_send(Uint8 *pbuffer, Uint16 aLength)
  98          {
  99   1              Uint8   crda0;
 100   1              Uint16  i;
 101   1              if(rdport(net_inf.net_ifaddr+CR_Add)&0x4)
 102   1                      return FALSE;
 103   1              aLength=Max(64,aLength);
 104   1              aLength=Min(ETHER_BUFFER_LEN,aLength);  
 105   1              //dummy read            
 106   1              wrport(net_inf.net_ifaddr+RSAR1_Add,TPSR_data);
 107   1              wrport(net_inf.net_ifaddr+RSAR0_Add,0);
 108   1              wrport(net_inf.net_ifaddr+RBCR1_Add,0);
 109   1              wrport(net_inf.net_ifaddr+RBCR0_Add,2);
 110   1              crda0 = rdport(net_inf.net_ifaddr+CRDA0_Add);
 111   1              wrport(net_inf.net_ifaddr+CR_Add,0x0a);
 112   1              for(i=0;i<1000;i++){
 113   2                      if( crda0 != rdport(net_inf.net_ifaddr+CRDA0_Add))
 114   2                              break;
 115   2              }
 116   1              if(i==1000)
 117   1                      return FALSE;
C51 COMPILER V6.23a  ETHERNET                                                              05/11/2004 18:03:26 PAGE 3   

 118   1              //Ready the packet
 119   1              wrport(net_inf.net_ifaddr+RSAR1_Add,TPSR_data);
 120   1              wrport(net_inf.net_ifaddr+RSAR0_Add,0); 
 121   1              wrport(net_inf.net_ifaddr+RBCR1_Add,aLength>>8);
 122   1              wrport(net_inf.net_ifaddr+RBCR0_Add,aLength);
 123   1              wrport(net_inf.net_ifaddr+CR_Add,0x12);
 124   1              for(i=0;i<aLength;i++){
 125   2                      wrport(net_inf.net_ifaddr+REMOTE_DMA_PORT,*pbuffer++);
 126   2              }       
 127   1              //Transmit the packet
 128   1              wrport(net_inf.net_ifaddr+RBCR1_Add,0x0f);
 129   1              wrport(net_inf.net_ifaddr+TBCR1_Add,aLength>>8);
 130   1              wrport(net_inf.net_ifaddr+TBCR0_Add,aLength);
 131   1              wrport(net_inf.net_ifaddr+CR_Add,0x16);
 132   1              return TRUE;            
 133   1      }
 134          
 135          //-----------------------------------------------------------------
 136          Uint16 ethernet_receive(Uint8 *pBuffer)
 137          {
 138   1              Uint16 i,length;
 139   1              Uint8 next_pkt,curr,bnry;
 140   1              // get packet
 141   1              i = rdport(net_inf.net_ifaddr+ISR_Add);
 142   1              i = rdport(net_inf.net_ifaddr+CR_Add);
 143   1              next_pkt = rdport(net_inf.net_ifaddr+BNRY_Add);
 144   1              next_pkt++;
 145   1              if(next_pkt>=PSTOP_data)
 146   1                      next_pkt = PSTART_data;
 147   1              //Get curr
 148   1              wrport(net_inf.net_ifaddr+CR_Add,0x62);
 149   1              curr = rdport(net_inf.net_ifaddr+CURR_Add);     
 150   1              wrport(net_inf.net_ifaddr+CR_Add,0x22); 
 151   1              //If has not new packet
 152   1              if(next_pkt==curr){
 153   2                      wrport(net_inf.net_ifaddr+ISR_Add,0x10);        
 154   2                      return 0;
 155   2              }
 156   1              //read header           
 157   1              wrport(net_inf.net_ifaddr+RSAR1_Add,next_pkt);
 158   1              wrport(net_inf.net_ifaddr+RSAR0_Add,0);
 159   1              wrport(net_inf.net_ifaddr+RBCR1_Add,0);
 160   1              wrport(net_inf.net_ifaddr+RBCR0_Add,4);
 161   1              wrport(net_inf.net_ifaddr+CR_Add,0x0a);
 162   1              bnry = rdport(net_inf.net_ifaddr+REMOTE_DMA_PORT);
 163   1              bnry = rdport(net_inf.net_ifaddr+REMOTE_DMA_PORT);
 164   1              length = rdport(net_inf.net_ifaddr+REMOTE_DMA_PORT);
 165   1              i = rdport(net_inf.net_ifaddr+REMOTE_DMA_PORT);
 166   1              length |= i<<8;
 167   1              length=Min(length,ETHER_BUFFER_LEN);
 168   1              //read content
 169   1              wrport(net_inf.net_ifaddr+RSAR0_Add,4); 
 170   1              wrport(net_inf.net_ifaddr+RBCR1_Add,length>>8);
 171   1              wrport(net_inf.net_ifaddr+RBCR0_Add,length);
 172   1              wrport(net_inf.net_ifaddr+CR_Add,0x0a);
 173   1              for(i=0;i<length;i++){  
 174   2                      *pBuffer++ = rdport(net_inf.net_ifaddr+REMOTE_DMA_PORT);
 175   2              }
 176   1              bnry--;
 177   1              if(bnry<PSTART_data)
 178   1                      bnry=PSTOP_data;
 179   1              if(bnry>PSTOP_data)
C51 COMPILER V6.23a  ETHERNET                                                              05/11/2004 18:03:26 PAGE 4   

 180   1                      bnry=PSTOP_data;        
 181   1              wrport(net_inf.net_ifaddr+BNRY_Add,bnry);       
 182   1      //      if(rdport(net_inf.net_ifaddr+ISR_Add)&0x10)
 183   1      //              wrport(net_inf.net_ifaddr+ISR_Add,0x10);
 184   1              return length;
 185   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1308    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     28      18
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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