📄 rtl8019.lst.svn-base
字号:
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 + -