📄 eth.lst
字号:
C51 COMPILER V8.08 ETH 11/04/2008 16:04:31 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE ETH
OBJECT MODULE PLACED IN Eth.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.exe Eth.c DB OE
line level source
1 //-----------------------------------------------------------------------------
2 // Copyright (c) 2002 Jim Brady
3 // Do not use commercially without author's permission
4 // Last revised August 2002
5 // Net ETH.C
6 //
7 // This module is the Ethernet layer
8 //-----------------------------------------------------------------------------
9 #include <string.h>
10 #include "global.h"
11 #include <stdlib.h>
12 #include "C8051f.h"
*** WARNING C318 IN LINE 12 OF Eth.c: can't open file 'C8051f.h'
13 ///#include "net.h"
14 #include "serial.h"
*** WARNING C318 IN LINE 14 OF Eth.c: can't open file 'serial.h'
15 #include "arp.h"
16 #include "ip.h"
17 #include "eth.h"
18
19
20 #define reg00 XBYTE[0x8000] //reg00- 10为isa网卡接口的寄存器地址300-310;
21 #define reg01 XBYTE[0x8001]
22 #define reg02 XBYTE[0x8002]
23 #define reg03 XBYTE[0x8003]
24 #define reg04 XBYTE[0x8004]
25 #define reg05 XBYTE[0x8005]
26 #define reg06 XBYTE[0x8006]
27 #define reg07 XBYTE[0x8007]
28 #define reg08 XBYTE[0x8008]
29 #define reg09 XBYTE[0x8009]
30 #define reg0a XBYTE[0x800a]
31 #define reg0b XBYTE[0x800b]
32 #define reg0c XBYTE[0x800c]
33 #define reg0d XBYTE[0x800d]
34 #define reg0e XBYTE[0x800e]
35 #define reg0f XBYTE[0x800f]
36 #define reg10 XBYTE[0x8010]
37
38 bit txd_buffer_select=0; //选择网卡的发送缓冲区
39 extern UCHAR idata debug;
40 extern UCHAR xdata arpbuf[];
41 extern UCHAR xdata my_hwaddr[];
42
43 void Delay1ms(unsigned char T);
44
45 extern UCHAR idata rcve_buf_allocated;
46 extern UINT volatile event_word;
47
48
49
50 #define Rtl8019ResetLow P5 &= ~(0x4); // P52
51 #define Rtl8019ResetHigh P5 |= 0x4; // P52
52
53 //------------------------------------------------------------------------
C51 COMPILER V8.08 ETH 11/04/2008 16:04:31 PAGE 2
54 // Initialize the Cirrus Logic 8019 chip
55 //------------------------------------------------------------------------
56
57 void page(unsigned char pagenumber)
58 {
59 1 unsigned char data temp;
60 1 temp=reg00;
*** ERROR C202 IN LINE 60 OF ETH.C: 'XBYTE': undefined identifier
61 1 temp=temp&0x3B ;
62 1 pagenumber=pagenumber <<6;
63 1 temp=temp | pagenumber;
64 1 reg00=temp;
*** ERROR C202 IN LINE 64 OF ETH.C: 'XBYTE': undefined identifier
65 1 }
66
67 void Rtl8019AS_Reset() //复位网卡
68 {
69 1 Rtl8019ResetHigh;;
*** ERROR C202 IN LINE 69 OF ETH.C: 'P5': undefined identifier
70 1 Delay1ms(200);
71 1 Rtl8019ResetLow;
*** ERROR C202 IN LINE 71 OF ETH.C: 'P5': undefined identifier
72 1 Delay1ms(200);
73 1 }
74
75 void ReadRtl8019NodeID(void)//读出网卡的物理地址存到my_ethernet_address.bytes[6]里
76 {
77 1 unsigned char data i;
78 1 page(0);
79 1 reg09=0; //读取网卡的ram的地址为0x0000
*** ERROR C202 IN LINE 79 OF ETH.C: 'XBYTE': undefined identifier
80 1 reg08=0;
*** ERROR C202 IN LINE 80 OF ETH.C: 'XBYTE': undefined identifier
81 1 reg0b=0;
*** ERROR C202 IN LINE 81 OF ETH.C: 'XBYTE': undefined identifier
82 1 reg0a=12; //读取12个字节
*** ERROR C202 IN LINE 82 OF ETH.C: 'XBYTE': undefined identifier
83 1 reg00=0x0a; //读ram
*** ERROR C202 IN LINE 83 OF ETH.C: 'XBYTE': undefined identifier
84 1 for (i=0;i<6;i++)
85 1 {
86 2 // my_hwaddr[i]=reg10;
87 2 // my_hwaddr[i]=reg10;
88 2 }
89 1 }
90
91 void WriteRtl8019NodeID()
92 {
93 1 page(1);
94 1 reg01=my_hwaddr[0];
*** ERROR C202 IN LINE 94 OF ETH.C: 'XBYTE': undefined identifier
95 1 reg02=my_hwaddr[1];
*** ERROR C202 IN LINE 95 OF ETH.C: 'XBYTE': undefined identifier
96 1 reg03=my_hwaddr[2];
*** ERROR C202 IN LINE 96 OF ETH.C: 'XBYTE': undefined identifier
97 1 reg04=my_hwaddr[3];
*** ERROR C202 IN LINE 97 OF ETH.C: 'XBYTE': undefined identifier
98 1 reg05=my_hwaddr[4];
*** ERROR C202 IN LINE 98 OF ETH.C: 'XBYTE': undefined identifier
99 1 reg06=my_hwaddr[5];
*** ERROR C202 IN LINE 99 OF ETH.C: 'XBYTE': undefined identifier
100 1 page(0);
C51 COMPILER V8.08 ETH 11/04/2008 16:04:31 PAGE 3
101 1 }
102
103 void init_8019(void)
104 {
105 1 Delay1ms(10);
106 1 Rtl8019AS_Reset(); //复位8019
107 1 R8019_CHIP_SELECT;
*** ERROR C202 IN LINE 107 OF ETH.C: 'R8019_CHIP_SELECT': undefined identifier
108 1 reg00=0x21; //使芯片处于停止模式,这时进行寄存器设置 停止模式下,将不会发送和接收数据包
*** ERROR C202 IN LINE 108 OF ETH.C: 'XBYTE': undefined identifier
109 1 Delay1ms(10); //延时10毫秒,确保芯片进入停止模式
110 1 page(0);
111 1 reg0a=0x00; reg0b=0x00;
*** ERROR C202 IN LINE 111 OF ETH.C: 'XBYTE': undefined identifier
*** ERROR C202 IN LINE 111 OF ETH.C: 'XBYTE': undefined identifier
112 1 reg0c= 0xe0; //monitor mode (no packet receive)
*** ERROR C202 IN LINE 112 OF ETH.C: 'XBYTE': undefined identifier
113 1 reg0d= 0xe2; //loop back mode 使芯片处于mon和loopback模式,跟外部网络断开
*** ERROR C202 IN LINE 113 OF ETH.C: 'XBYTE': undefined identifier
114 1 reg01=0x4c; reg02=0x80; reg03=0x4c; reg04=0x40;
*** ERROR C202 IN LINE 114 OF ETH.C: 'XBYTE': undefined identifier
*** ERROR C202 IN LINE 114 OF ETH.C: 'XBYTE': undefined identifier
*** ERROR C202 IN LINE 114 OF ETH.C: 'XBYTE': undefined identifier
*** ERROR C202 IN LINE 114 OF ETH.C: 'XBYTE': undefined identifier
115 1 reg07=0xff; //清除所有中断标志位
*** ERROR C202 IN LINE 115 OF ETH.C: 'XBYTE': undefined identifier
116 1 reg0f=0x00; //disable all interrupt
*** ERROR C202 IN LINE 116 OF ETH.C: 'XBYTE': undefined identifier
117 1 reg0e=0xc8; //byte dma 8位dma方式
*** ERROR C202 IN LINE 117 OF ETH.C: 'XBYTE': undefined identifier
118 1 page(1);
119 1 reg07=0x4d; reg08=0x00; reg09=0x00; reg0a=0x00; reg0b=0x00;
*** ERROR C202 IN LINE 119 OF ETH.C: 'XBYTE': undefined identifier
*** ERROR C202 IN LINE 119 OF ETH.C: 'XBYTE': undefined identifier
*** ERROR C202 IN LINE 119 OF ETH.C: 'XBYTE': undefined identifier
*** ERROR C202 IN LINE 119 OF ETH.C: 'XBYTE': undefined identifier
*** ERROR C202 IN LINE 119 OF ETH.C: 'XBYTE': undefined identifier
120 1 reg0c=0x00; reg0d=0x00; reg0e=0x00; reg0f=0x00;
*** ERROR C202 IN LINE 120 OF ETH.C: 'XBYTE': undefined identifier
*** ERROR C202 IN LINE 120 OF ETH.C: 'XBYTE': undefined identifier
*** ERROR C202 IN LINE 120 OF ETH.C: 'XBYTE': undefined identifier
*** ERROR C202 IN LINE 120 OF ETH.C: 'XBYTE': undefined identifier
121 1 reg00=0x22; //这时让芯片开始工作
*** ERROR C202 IN LINE 121 OF ETH.C: 'XBYTE': undefined identifier
122 1 ReadRtl8019NodeID(); //读出网卡的物理地址48位
123 1 WriteRtl8019NodeID(); //将网卡地址写入到mar寄存器
124 1 page(0);
125 1 reg0c=0xcc; //将网卡设置成正常的模式,跟外部网络连接
*** ERROR C202 IN LINE 125 OF ETH.C: 'XBYTE': undefined identifier
126 1 reg0d=0xe0;
*** ERROR C202 IN LINE 126 OF ETH.C: 'XBYTE': undefined identifier
127 1 reg00=0x22; //这时让芯片开始工作
*** ERROR C202 IN LINE 127 OF ETH.C: 'XBYTE': undefined identifier
128 1 reg07=0xff; //清除所有中断标志位
*** ERROR C202 IN LINE 128 OF ETH.C: 'XBYTE': undefined identifier
129 1 }
130
131 //------------------------------------------------------------------------
132 // This functions checks 8019 status then sends an ethernet
133 // frame to it by calling an assembler function.
134 //------------------------------------------------------------------------
135
C51 COMPILER V8.08 ETH 11/04/2008 16:04:31 PAGE 4
136 void send_frame(UCHAR xdata * outbuf, UINT len)/*发送一个数据包的命令,长度最小为60字节,最大1514字节*/
137 {
138 1 UCHAR i;
139 1 UINT ii;
140 1 page(0);
141 1 if(len<60)len=60;
142 1 txd_buffer_select=!txd_buffer_select;
143 1 if (txd_buffer_select)
144 1 reg09=0x40 ; //txdwrite highaddress
*** ERROR C202 IN LINE 144 OF ETH.C: 'XBYTE': undefined identifier
145 1 else
146 1 reg09=0x46 ; //txdwrite highaddress
*** ERROR C202 IN LINE 146 OF ETH.C: 'XBYTE': undefined identifier
147 1 reg08=0x00; //read page address low
*** ERROR C202 IN LINE 147 OF ETH.C: 'XBYTE': undefined identifier
148 1 reg0b=len>>8; //read count high
*** ERROR C202 IN LINE 148 OF ETH.C: 'XBYTE': undefined identifier
149 1 reg0a=len&0xff; //read count low;
*** ERROR C202 IN LINE 149 OF ETH.C: 'XBYTE': undefined identifier
150 1 reg00=0x12; //write dma, page0
*** ERROR C202 IN LINE 150 OF ETH.C: 'XBYTE': undefined identifier
151 1 for (ii=0;ii<len;ii++) //for (ii=4;ii<len+4;ii++) //是否加4有待验证
152 1 {
153 2 reg10=*(outbuf+ii);
*** ERROR C202 IN LINE 153 OF ETH.C: 'XBYTE': undefined identifier
154 2 }
155 1
156 1 /* 以下3句为中止dma的操作,可以不要 */
157 1 reg0b=0x00; //read count high 中止DMA操作
*** ERROR C202 IN LINE 157 OF ETH.C: 'XBYTE': undefined identifier
158 1 reg0a=0x00; //read count low;
*** ERROR C202 IN LINE 158 OF ETH.C: 'XBYTE': undefined identifier
159 1 reg00=0x22; //complete dma page 0
*** ERROR C202 IN LINE 159 OF ETH.C: 'XBYTE': undefined identifier
160 1
161 1 for(i=0;i<16;i++) //最多重发16次
162 1 {
163 2 for(ii=0;ii<1000;ii++) //检查txp为是否为低
164 2 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -