00000025.htm

来自「水木社区 embeded 版精华区 下载」· HTM 代码 · 共 125 行

HTM
125
字号
<?xml version="1.0" encoding="gb2312"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"/><title>单片机与TCP/IP网络 (七)               jacobw </title></head><body><center><h1>BBS 水木清华站∶精华区</h1></center><a name="top"></a>发信人:&nbsp;turbolinux&nbsp;(hoho~神啊,救救我吧...),&nbsp;信区:&nbsp;Embedded&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />标&nbsp;&nbsp;题:&nbsp;单片机与TCP/IP网络&nbsp;(七)&nbsp;<br />发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Fri&nbsp;Jul&nbsp;13&nbsp;00:35:16&nbsp;2001)&nbsp;<br />&nbsp;<br /> &nbsp;&nbsp;单片机与TCP/IP网络&nbsp;<br />--版主&nbsp;老古&nbsp;<a href="http://www.laogu.com">http://www.laogu.com</a>&nbsp;<br />&nbsp;<br />(七)网卡上电复位&nbsp;<br />&nbsp;<br />&nbsp;<br />------------------------------------------------------------------------&nbsp;<br />--------&nbsp;<br />&nbsp;<br />----当你买到一个新的RTL8019AS网卡,你要先将该网卡设置为以下的配置:&nbsp;<br />&nbsp;<br />操作方式Operating&nbsp;Mode:跳线方式Jumperless(不是即插即用Plug&nbsp;and&nbsp;Play)&nbsp;<br />&nbsp;<br />端口I/O&nbsp;base:0240-25FH&nbsp;<br />中断Interrupt:&nbsp;2/9(我的程序没有用到网卡中断,所以也可以不用设置)&nbsp;<br />你要将这个网卡插到你的电脑里,用这个网卡带的设置程序RSET8019.exe将这个卡&nbsp;<br />按照上面的配置设置好。(最好在纯DOS方式下设置)&nbsp;.&nbsp;&nbsp;<br />&nbsp;<br />--在介绍网卡驱动程序之前,先介绍一下RTL8019AS的基本情况:&nbsp;<br />&nbsp;<br />输入输出地址:共32个,地址偏移量为00H--1FH,(对应于240H--25FH,240H的地&nbsp;<br />址偏移量为0,241H的地址偏移量为1,。。。25FH的地址偏移量为1FH)。&nbsp;<br />&nbsp;<br />其中00H--0FH共16个地址,为寄存器地址。&nbsp;<br />10H--17H共8个地址,为DMA地址。&nbsp;<br />18H--1FH共8个地址,为复位端口。&nbsp;<br />对于8位的操作方式,上面的地址中只有18个是有用的:&nbsp;<br />00H--0FH共16个寄存器地址。&nbsp;<br />10H&nbsp;DMA地址&nbsp;(10H--17H的8个地址是一样的,都可以用来做DMA端口,只要用其&nbsp;<br />中的一个就可以了)&nbsp;<br />1FH&nbsp;复位地址。(18H到1FH共8个地址都是复位地址,每个地址的功能都是一样的&nbsp;<br />,只要其中的一个就可以了)&nbsp;<br />&nbsp;<br />寄存器:00H--0FH共16个地址是寄存器地址。寄存器分成4页PAGE0--PAGE3,但&nbsp;<br />NE2000兼容的寄存器只有3页(Page0-Page2),(第四页是RTL8019AS自己定义的,&nbsp;<br />我们不用去管这些寄存器,因为你对第四页的寄存器的操作仅对这个网卡是有效的&nbsp;<br />,如果你换成其他Ne2000兼容的网卡,你的程序将无法正常运行。&nbsp;为了保证驱动&nbsp;<br />程序对所有Ne2000的网卡有效,不要去操作第四页的寄存器)&nbsp;<br />由于寄存器较多,我将在用到该寄存器的时候才对该寄存器介绍。&nbsp;<br />&nbsp;<br />---对网卡进行复位:&nbsp;<br />这是网卡驱动程序的需要做的第一个内容,由于我们将网卡设置为跳线模式,而不&nbsp;<br />是即插即用的模式,RTL8019AS.PDF中介绍的PLUG&nbsp;and&nbsp;PLAY的一些过程,我们不需&nbsp;<br />要做,因为单片机的资源有限,能够减少的操作,都尽量减少。&nbsp;<br />&nbsp;<br />程序从main()开始执行:&nbsp;<br />&nbsp;<br />#include&nbsp;&lt;my.h&gt;&nbsp;/*my.h&nbsp;为作者所用的头文件,包含所有89c52寄存器的大写和小&nbsp;<br />写的定义,&nbsp;<br />和一些常用的子函数,一些宏的定义*/&nbsp;<br />main()&nbsp;<br />&nbsp;<br />{&nbsp;<br />&nbsp;<br />delaymsecond(10);//延时大约1秒,保证电源稳定和网卡自身的上电完成。&nbsp;<br />netcardreset();//复位网卡的子程序&nbsp;&nbsp;<br />&nbsp;<br />。。。。&nbsp;<br />&nbsp;<br />}&nbsp;<br />下面介绍网卡的复位子程序:&nbsp;<br />#define&nbsp;reg1f&nbsp;XBYTE[0xdf00]&nbsp;//网卡的复位端口的地址,对应于网卡的地址&nbsp;<br />25FH。&nbsp;<br />#define&nbsp;uint&nbsp;unsigned&nbsp;int&nbsp;//uint&nbsp;代表unsigned&nbsp;int&nbsp;,作者一般使用缩写&nbsp;<br />uint&nbsp;<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char&nbsp;//uchar&nbsp;代表unsigned&nbsp;char,我比较懒,不愿意多&nbsp;<br />写&nbsp;<br />sbit&nbsp;reset=p3^4;&nbsp;//单片机的p3.4脚连接到网卡的RSTDRV复位引脚&nbsp;<br />&nbsp;<br />void&nbsp;netcardreset()&nbsp;<br />{uint&nbsp;data&nbsp;i;&nbsp;<br />uchar&nbsp;data&nbsp;temp;&nbsp;<br />reset=1;&nbsp;//使网卡的RSTDRV引脚变成高电平,网卡是高电平复位的。&nbsp;<br />for(i=0;i&lt;250;i++);//延时程序&nbsp;<br />reset=0;&nbsp;//使网卡的RSTDRV引脚变成低电平,网卡上电复位完毕&nbsp;<br />for(i=0;i&lt;250;i++);&nbsp;<br />temp=reg1f;//读网卡的复位端口&nbsp;<br />reg1f=temp;&nbsp;//写网卡的复位端口&nbsp;<br />for(i=0;i&lt;250;i++);&nbsp;&nbsp;<br />&nbsp;<br />&nbsp;<br />}&nbsp;<br />上面所讲的实际上是网卡复位的两种情况,&nbsp;<br />reset=1;reset=0相当于冷复位&nbsp;<br />temp=reg1f;reg1f=temp相当于热复位&nbsp;<br />对网卡的复位端口的读写将复位网卡,网卡内部将执行复位过程。读写是随意的,&nbsp;<br />写入任意的数都将复位网卡。&nbsp;&nbsp;<br />实际上只要使用冷复位就可以了,热复位程序可以不要。热复位主要在电脑里有用&nbsp;<br />,冷复位就像电脑的冷启动,热复位相当于电脑的热启动。&nbsp;<br />&nbsp;<br />--作者的复位网卡的过程是简化了的,一个电脑里的复位过程是比较复杂的,如&nbsp;<br />果你有网卡驱动的UNIX,LINUX程序的源代码,它的代码将会做一些判断和检查,检&nbsp;<br />查网卡是否存在,和是否工作正常,和是否存在地址和中断冲突&nbsp;。但在我们的这&nbsp;<br />个系统里可以省去这些,我们认为网卡的地址和I/O是没有冲突和正常工作的。当&nbsp;<br />然如果读者愿意,也可以写一些检查代码。&nbsp;<br />&nbsp;<br />&nbsp;<br />(未完)&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;<br />--&nbsp;<br />&nbsp;<br />※&nbsp;来源:·BBS&nbsp;水木清华站&nbsp;smth.org·[FROM:&nbsp;166.111.174.125]&nbsp;<br /><a href="00000024.htm">上一篇</a><a href="javascript:history.go(-1)">返回上一页</a><a href="index.htm">回到目录</a><a href="#top">回到页首</a><a href="00000026.htm">下一篇</a></h1></center><center><h1>BBS 水木清华站∶精华区</h1></center></body></html>

⌨️ 快捷键说明

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