📄 eth.lst
字号:
C51 COMPILER V7.06 ETH 06/26/2004 13:41:25 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE ETH
OBJECT MODULE PLACED IN ETH.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ETH.C LARGE BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //-----------------------------------------------------------------------------
2 // Net ETH.C
3 //
4 // This module is the Ethernet layer
5 //-----------------------------------------------------------------------------
6 #include <string.h>
7 #include <stdlib.h>
8 #include <stdio.h>
9 #include <reg89C58.h>
10 #include <absacc.h>
11 #include "net.h"
12 #include "arp.h"
13 #include "ip.h"
14 #include "eth.h"
15
16
17 #define reg00 XBYTE[0xc000]
18 #define reg01 XBYTE[0xc100]
19 #define reg02 XBYTE[0xc200]
20 #define reg03 XBYTE[0xc300]
21 #define reg04 XBYTE[0xc400]
22 #define reg05 XBYTE[0xc500]
23 #define reg06 XBYTE[0xc600]
24 #define reg07 XBYTE[0xc700]
25 #define reg08 XBYTE[0xc800]
26 #define reg09 XBYTE[0xc900]
27 #define reg0a XBYTE[0xca00]
28 #define reg0b XBYTE[0xcb00]
29 #define reg0c XBYTE[0xcc00]
30 #define reg0d XBYTE[0xcd00]
31 #define reg0e XBYTE[0xce00]
32 #define reg0f XBYTE[0xcf00]
33 #define reg10 XBYTE[0xd000]
34
35
36 bit txd_buffer_select=0;
37 extern UCHAR idata debug;
38 extern UCHAR xdata arpbuf[];
39 extern UCHAR data my_hwaddr[];
40
41 void Delay1ms(unsigned char T);
42 void delay(UINT );
43 extern UCHAR idata rcve_buf_allocated;
44 extern UINT volatile event_word;
45
46 sbit RST8019=P3^2;
47
48 //------------------------------------------------------------------------
49 // Initialize the Cirrus Logic 8019 chip
50 //------------------------------------------------------------------------
51
52 void page(unsigned char pagenumber)
53 {
54 1 unsigned char data temp;
55 1 temp=reg00;
C51 COMPILER V7.06 ETH 06/26/2004 13:41:25 PAGE 2
56 1 temp=temp&0x3B ;
57 1 pagenumber=pagenumber <<6;
58 1 temp=temp | pagenumber;
59 1 reg00=temp;
60 1 }
61
62 void Rtl8019AS_Reset()
63 {
64 1 RST8019=1;
65 1 delay(10000);
66 1
67 1
68 1 /*
69 1 Delay1ms(200);
70 1 Delay1ms(200);
71 1 Delay1ms(200);
72 1 Delay1ms(200);
73 1 */
74 1 RST8019=0;
75 1 delay(10000);
76 1 /*
77 1 Delay1ms(100);
78 1 Delay1ms(200);
79 1 Delay1ms(200);
80 1 Delay1ms(200);
81 1 */
82 1 }
83
84 void ReadRtl8019NodeID(void)
85 {
86 1 unsigned char data i;
87 1 page(0);
88 1 reg09=0;
89 1 reg08=0;
90 1 reg0b=0;
91 1 reg0a=12;
92 1 reg00=0x0a;
93 1 for (i=0;i<6;i++)
94 1 {
95 2 // my_hwaddr[i]=reg10;
96 2 // my_hwaddr[i]=reg10;
97 2 }
98 1 }
99
100 void WriteRtl8019NodeID()
101 {
102 1 page(1);
103 1 reg01=my_hwaddr[0];
104 1 reg02=my_hwaddr[1];
105 1 reg03=my_hwaddr[2];
106 1 reg04=my_hwaddr[3];
107 1 reg05=my_hwaddr[4];
108 1 reg06=my_hwaddr[5];
109 1 page(0);
110 1 }
111
112
113 void init_8019(void)
114 {
115 1
116 1 Rtl8019AS_Reset();
117 1 // R8019_CHIP_SELECT;
C51 COMPILER V7.06 ETH 06/26/2004 13:41:25 PAGE 3
118 1 reg00=0x21;
119 1 page(0);
120 1 reg0a=0x00; reg0b=0x00;
121 1 reg0c= 0xe0;
122 1 reg0d= 0xe2;
123 1 reg01=0x4c; reg02=0x80; reg03=0x4c; reg04=0x40;
124 1 reg07=0xff;
125 1 reg0f=0x00;
126 1 reg0e=0xc8;
127 1 page(1);
128 1 reg07=0x4d; reg08=0x00; reg09=0x00; reg0a=0x00; reg0b=0x00;
129 1 reg0c=0x00; reg0d=0x00; reg0e=0x00; reg0f=0x00;
130 1 reg00=0x22;
131 1 ReadRtl8019NodeID();
132 1 WriteRtl8019NodeID();
133 1 page(0);
134 1 reg0c=0xcc;
135 1 reg0d=0xe0;
136 1 reg00=0x22;
137 1 reg07=0xff;
138 1 }
139
140 //------------------------------------------------------------------------
141 // This functions checks 8019 status then sends an ethernet
142 // frame to it by calling an assembler function.
143 //------------------------------------------------------------------------
144
145 void send_frame(UCHAR xdata * outbuf, UINT len)
146 {
147 1 UCHAR i;
148 1 UINT ii;
149 1 page(0);
150 1 if(len<60)len=60;
151 1 txd_buffer_select=!txd_buffer_select;
152 1 if (txd_buffer_select)
153 1 reg09=0x40 ; //txdwrite highaddress
154 1 else
155 1 reg09=0x46 ; //txdwrite highaddress
156 1 reg08=0x00; //read page address low
157 1 reg0b=len>>8; //read count high
158 1 reg0a=len&0xff; //read count low;
159 1 reg00=0x12; //write dma, page0
160 1 for (ii=0;ii<len;ii++)
161 1 {
162 2 reg10=*(outbuf+ii);
163 2 }
164 1
165 1
166 1 reg0b=0x00; //read count high
167 1 reg0a=0x00; //read count low;
168 1 reg00=0x22; //complete dma page 0
169 1
170 1 for(i=0;i<16;i++)
171 1 {
172 2 for(ii=0;ii<1000;ii++)
173 2 {
174 3 if ((reg00&0x04)==0) break;
175 3 }
176 2 if ((reg04&0x01)!=0) break;
177 2 reg00=0x3e;
178 2 }
179 1 reg07=0xff;
C51 COMPILER V7.06 ETH 06/26/2004 13:41:25 PAGE 4
180 1 if(txd_buffer_select)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -