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

📄 rtl8019.lst.svn-base

📁 数字广播系统的开发源码
💻 SVN-BASE
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   RTL8019                                                               07/24/2007 16:39:36 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE RTL8019
OBJECT MODULE PLACED IN E:\NETBRO~1\TRUNK\NETBRO~1\VW\RTL8019.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE E:\NETBRO~1\TRUNK\NETBRO~1\VW\RTL8019.C DB SB OE

stmt level    source

   1          /*
   2          */
   3          #include "reg51.h"
   4          #include "config.h"
   5          #include "GloblDef.h"
   6          #include "TCPIPmem.h"
   7          #include "RTL8019.h"
   8          #include <stdio.h>
   9          #include <absacc.h>
  10          
  11          #define RTLBaseAddr 0x8000
  12          //ARP Test
  13          unsigned char xdata TestPacket[42];
  14          
  15          /* to prevent call RTLSendPacket() when RTLSendPackt() is already is called, InSending
  16          is used. example when process run in RTLSendPacket() and a interrupt ocurr then call
  17          RTLSendPacket again, then the Register would have changed when interrupt return. */
  18          static unsigned char xdata InSending;
  19          
  20          static unsigned char xdata StartPageOfPacket;
  21          /* receive head information */
  22          /*struct RTLReceiveHeader
  23          {
  24                  unsigned char ReceiveStatus;
  25                  unsigned char NextPacketStartPage;
  26                  unsigned char PacketSizeLow;
  27                  unsigned char PacketSizeHigh;
  28          }Head;for some unknown resean Head must be a gloal value. */
  29          static unsigned char xdata Head[4];
  30          
  31          /* last trasmit start page */
  32          static unsigned char xdata LastSendStartPage;
  33          
  34          /****************************************************************************
  35          * 名称:WriteReg()
  36          * 功能:把数据写入RTL8019AS
  37          * 入口参数:    chPort          写入地址
  38                          chValue         写入数据
  39          * 出口参数:无
  40          ****************************************************************************/
  41          void  WriteReg(unsigned char chPort,unsigned char chValue)
  42          {
  43   1              unsigned char xdata chWriteRegTmp = 0;
  44   1              volatile unsigned int RTLAddr = 0;
  45   1      
  46   1              /*
  47   1              //方法一,结果:发送时灯不亮
  48   1              (*((volatile unsigned short *) RTLBaseAddr + chPort)) = chValue;
  49   1              //to debug
  50   1              chWriteRegTmp = (*((volatile unsigned short *) RTLBaseAddr + chPort));
  51   1              */
  52   1              /*
  53   1              //方法二,结果:发送时灯不亮
  54   1              RTLAddr = RTLBaseAddr + chPort;
  55   1              *(volatile unsigned char *)(RTLAddr) = chValue;
C51 COMPILER V7.06   RTL8019                                                               07/24/2007 16:39:36 PAGE 2   

  56   1              //to debug
  57   1              chWriteRegTmp = *(volatile unsigned char *)(RTLAddr);
  58   1              */
  59   1              /*
  60   1              //方法三,结果:发送时灯不亮
  61   1              RTLAddr = RTLBaseAddr + chPort;
  62   1              (*((volatile BYTE xdata *)RTLAddr)) = chValue;
  63   1               chWriteRegTmp = *(volatile unsigned char *)(RTLAddr); */
  64   1              /*
  65   1              //方法四:XBYTE方式,结果:发送时灯亮,但没有数据出去,热复位不成功
  66   1              RTLAddr = RTLBaseAddr + chPort;
  67   1              ((unsigned char volatile xdata *) 0)[RTLAddr] = chValue;
  68   1              chWriteRegTmp = ((unsigned char volatile xdata *) 0)[RTLAddr]; */
  69   1              /*
  70   1              //方法五:类似XBYTE方式,结果:同方法四
  71   1              RTLAddr = RTLBaseAddr + chPort;
  72   1              *(unsigned char volatile xdata *)(RTLAddr) = chValue;
  73   1              chWriteRegTmp = *(unsigned char volatile xdata *)(RTLAddr); */
  74   1              /*
  75   1              //方法六:类方法五,只是CHAR->int,结果:发送灯亮,仍没数据出去,热复位不成功
  76   1              RTLAddr = RTLBaseAddr + chPort;
  77   1              *(unsigned int volatile xdata *)(RTLAddr) = chValue;
  78   1              chWriteRegTmp = *(unsigned int volatile xdata *)(RTLAddr); */
  79   1              /*
  80   1              //方法七:结果同方法二
  81   1              RTLAddr = RTLBaseAddr + chPort;
  82   1              (*(volatile unsigned char *)(RTLAddr)) = chValue;
  83   1              chWriteRegTmp  = (*(volatile unsigned char *)(RTLAddr)); */
  84   1      
  85   1              //方法八:
  86   1              RTLAddr = RTLBaseAddr + chPort;
  87   1              *((unsigned char volatile xdata *)((volatile unsigned int *)RTLAddr)) = chValue;
  88   1              chWriteRegTmp = *((unsigned char volatile xdata *)((volatile unsigned int *)RTLAddr));
  89   1      
  90   1      
  91   1      
  92   1      
  93   1      }
  94          /****************************************************************************
  95          * 名称:ReadReg()
  96          * 功能:从RTL8019AS把数据读出
  97          * 入口参数:    chPort          读出地址
  98          * 出口参数:    Read读出数据
  99          ****************************************************************************/
 100          unsigned char ReadReg(unsigned char chPort)
 101          {
 102   1              unsigned char xdata chReadRegTmp = 0;
 103   1              volatile unsigned int RTLAddr = 0;
 104   1              /*
 105   1              //方法一
 106   1              chReadRegTmp = (*((volatile unsigned short *)RTLBaseAddr + chPort));//0x83400000
 107   1               */
 108   1      
 109   1              /*
 110   1              //方法二,结果:发送时灯不亮
 111   1              RTLAddr = RTLBaseAddr + chPort;
 112   1              chReadRegTmp = *(volatile unsigned char *)(RTLAddr);
 113   1               */
 114   1              /*
 115   1              //方法三,结果:发送时灯不亮
 116   1              RTLAddr = RTLBaseAddr + chPort;
 117   1              chReadRegTmp = *(volatile unsigned char *)(RTLAddr);
C51 COMPILER V7.06   RTL8019                                                               07/24/2007 16:39:36 PAGE 3   

 118   1              */
 119   1              /*
 120   1              //方法四:XBYTE方式,结果:发送时灯亮,但没有数据出去,热复位不成功
 121   1              RTLAddr = RTLBaseAddr + chPort;
 122   1              chReadRegTmp  = ((unsigned char volatile xdata *) 0)[RTLAddr];*/
 123   1              /*
 124   1              //方法五:类似XBYTE方式,结果:同方法四
 125   1              RTLAddr = RTLBaseAddr + chPort;
 126   1              chReadRegTmp = *(unsigned char volatile xdata *)(RTLAddr);*/
 127   1              /*
 128   1              //方法六:类方法五,只是CHAR->int,结果:发送灯亮,仍没数据出去,热复位不成功
 129   1              RTLAddr = RTLBaseAddr + chPort;
 130   1              chReadRegTmp = *(unsigned int volatile xdata *)(RTLAddr);*/
 131   1              /*
 132   1              //方法七:
 133   1              RTLAddr = RTLBaseAddr + chPort;
 134   1              chReadRegTmp = (*(volatile unsigned char *)(RTLAddr));*/
 135   1      
 136   1              //方法八:
 137   1              RTLAddr = RTLBaseAddr + chPort;
 138   1              chReadRegTmp = *((unsigned char volatile xdata *)((volatile unsigned int *)RTLAddr));
 139   1      
 140   1      
 141   1      
 142   1      
 143   1              //返回
 144   1              return chReadRegTmp ;
 145   1      
 146   1      }
 147          /**********************************************************************
 148          **函数原型:    void  RTLPage(unsigned char chPageNum)
 149          **入口参数:?    unsigned char chPageNum: 要切换的页
 150          **出口参数:     无
 151          **返 回 值:    无
 152          **说    明:    选择页,可选择0,1,2三页,第四页ne000兼容芯片保留,
 153          set bit 7-6 in CR, CR_TXP must be 0(if 1 the packet is retrasmit)
 154          ************************************************************************/
 155          void RTLPage(unsigned char chPageNum)
 156          {
 157   1              unsigned char chTmp;
 158   1              chTmp= ReadReg(0x00);//command register
 159   1              chTmp = chTmp & 0x3B ;//注意txp位不能要
 160   1              chPageNum = chPageNum << 6;
 161   1              chTmp = chTmp | chPageNum;
 162   1              WriteReg(0x00,chTmp);
 163   1      }
 164          
 165          /* reset rtl8019 and init registers, MacAddr is MAC address */
 166          void RTL8019Init()
 167          {
 168   1              unsigned char chRTLInitTmp = 0;
 169   1              unsigned int i;
 170   1      
 171   1              /* after hardware reset a longdelay is necessary for rtl to self-initial */
 172   1              //在RSTDRV从高电平回到低电平之后的100MS时,在对RTL8019做读写操作,以确保完全复位
 173   1              P35 = 1;
 174   1              delay(100);
 175   1              P35 = 0;
 176   1              delay(100);
 177   1      
 178   1              /* reset: write to reset prot */
 179   1              WriteReg(0x1f,0xdd);
C51 COMPILER V7.06   RTL8019                                                               07/24/2007 16:39:36 PAGE 4   

 180   1              chRTLInitTmp = ReadReg(0x1f);
 181   1              delay(100);
 182   1      
 183   1              /* init RTL registers*/
 184   1              WriteReg(0x00,0x21);
 185   1              chRTLInitTmp = ReadReg(0x00);
 186   1              delay(100);
 187   1      
 188   1              RTLPage(0);
 189   1              //WriteReg(0x0a,0x00);    //清RBCR0
 190   1              //WriteReg(0x0b,0x00);    //清RBCR1
 191   1              //WriteReg(0x0c,0xe0);    //RCR,监视模式,不接收数据报
 192   1              //WriteReg(0x0d,0xe2);    //TCR,loopback模式
 193   1      
 194   1              WriteReg(0x01,0x4c);    /* Pstart       */
 195   1              WriteReg(0x02,0x80);    /* Pstop        */
 196   1              WriteReg(0x03,0x4c);    /* BNRY         */
 197   1              WriteReg(0x04,0x40);    /* TPSR         */
 198   1      
 199   1              //WriteReg(0x0c,0xcc);    //RCR,
 200   1              //WriteReg(0x0d,0xe0);    //TCR,
 201   1      
 202   1              //WriteReg(0x07,0xFF);  /* ISR: Interrupt Status Register,write FF to clear up all interrupt status
             - */
 203   1              //WriteReg(0x0f,0x00);  /* IMR: Interrupt Mask Register,屏蔽掉所有中断 */
 204   1              WriteReg(0x0e,0xC8);    /* DCR: Data Configuration Register*/
 205   1      
 206   1              //WriteReg(0x0c,0xCE);  /* RCR:  */
 207   1              //WriteReg(0x0d,0xE0);  /* TCR:  */
 208   1      
 209   1              RTLPage(1);
 210   1              WriteReg(0x07,0x4d); //CURR,设置为指向当前正在写的页的下一页
 211   1      
 212   1              // MAR0
 213   1              WriteReg(0x08,0x00);
 214   1              WriteReg(0x09,0x41);
 215   1              WriteReg(0x0a,0x00);
 216   1              WriteReg(0x0b,0x80);
 217   1              WriteReg(0x0c,0x00);
 218   1              WriteReg(0x0d,0x00);
 219   1              WriteReg(0x0e,0x00);
 220   1              WriteReg(0x0f,0x00);
 221   1      
 222   1              // set phisical address
 223   1              WriteReg(0x01,0x52);
 224   1              WriteReg(0x02,0x54);
 225   1              WriteReg(0x03,0x4c);
 226   1              WriteReg(0x06,0x30);
 227   1              WriteReg(0x05,0x2e);
 228   1              WriteReg(0x04,0x2f);
 229   1              /*
 230   1              //To debug
 231   1              chRTLInitTmp = ReadReg(0x07);
 232   1              chRTLInitTmp = ReadReg(0x0f);
 233   1              //To debug
 234   1              RTLPage(0);
 235   1              chRTLInitTmp = ReadReg(0x08);
 236   1              chRTLInitTmp = ReadReg(0x09);
 237   1              chRTLInitTmp = ReadReg(0x0a);
 238   1              chRTLInitTmp = ReadReg(0x0b);
 239   1              chRTLInitTmp = ReadReg(0x0c);
 240   1              chRTLInitTmp = ReadReg(0x0d);
C51 COMPILER V7.06   RTL8019                                                               07/24/2007 16:39:36 PAGE 5   

 241   1              chRTLInitTmp = ReadReg(0x0e);
 242   1              chRTLInitTmp = ReadReg(0x0f);
 243   1              //for(i = 0;i < 20000;i++);
 244   1              chRTLInitTmp = ReadReg(0x03);
 245   1              chRTLInitTmp = ReadReg(0x01);
 246   1              chRTLInitTmp = ReadReg(0x02);
 247   1              chRTLInitTmp = ReadReg(0x06);

⌨️ 快捷键说明

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