?? 00000025.htm
字號:
<?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>發信人: turbolinux (hoho~神啊,救救我吧...), 信區: Embedded <br />標 題: 單片機與TCP/IP網絡 (七) <br />發信站: BBS 水木清華站 (Fri Jul 13 00:35:16 2001) <br /> <br /> 單片機與TCP/IP網絡 <br />--版主 老古 <a href="http://www.laogu.com">http://www.laogu.com</a> <br /> <br />(七)網卡上電復位 <br /> <br /> <br />------------------------------------------------------------------------ <br />-------- <br /> <br />----當你買到一個新的RTL8019AS網卡,你要先將該網卡設置為以下的配置: <br /> <br />操作方式Operating Mode:跳線方式Jumperless(不是即插即用Plug and Play) <br /> <br />端口I/O base:0240-25FH <br />中斷Interrupt: 2/9(我的程序沒有用到網卡中斷,所以也可以不用設置) <br />你要將這個網卡插到你的電腦里,用這個網卡帶的設置程序RSET8019.exe將這個卡 <br />按照上面的配置設置好。(最好在純DOS方式下設置) . <br /> <br />--在介紹網卡驅動程序之前,先介紹一下RTL8019AS的基本情況: <br /> <br />輸入輸出地址:共32個,地址偏移量為00H--1FH,(對應于240H--25FH,240H的地 <br />址偏移量為0,241H的地址偏移量為1,。。。25FH的地址偏移量為1FH)。 <br /> <br />其中00H--0FH共16個地址,為寄存器地址。 <br />10H--17H共8個地址,為DMA地址。 <br />18H--1FH共8個地址,為復位端口。 <br />對于8位的操作方式,上面的地址中只有18個是有用的: <br />00H--0FH共16個寄存器地址。 <br />10H DMA地址 (10H--17H的8個地址是一樣的,都可以用來做DMA端口,只要用其 <br />中的一個就可以了) <br />1FH 復位地址。(18H到1FH共8個地址都是復位地址,每個地址的功能都是一樣的 <br />,只要其中的一個就可以了) <br /> <br />寄存器:00H--0FH共16個地址是寄存器地址。寄存器分成4頁PAGE0--PAGE3,但 <br />NE2000兼容的寄存器只有3頁(Page0-Page2),(第四頁是RTL8019AS自己定義的, <br />我們不用去管這些寄存器,因為你對第四頁的寄存器的操作僅對這個網卡是有效的 <br />,如果你換成其他Ne2000兼容的網卡,你的程序將無法正常運行。 為了保證驅動 <br />程序對所有Ne2000的網卡有效,不要去操作第四頁的寄存器) <br />由于寄存器較多,我將在用到該寄存器的時候才對該寄存器介紹。 <br /> <br />---對網卡進行復位: <br />這是網卡驅動程序的需要做的第一個內容,由于我們將網卡設置為跳線模式,而不 <br />是即插即用的模式,RTL8019AS.PDF中介紹的PLUG and PLAY的一些過程,我們不需 <br />要做,因為單片機的資源有限,能夠減少的操作,都盡量減少。 <br /> <br />程序從main()開始執行: <br /> <br />#include <my.h> /*my.h 為作者所用的頭文件,包含所有89c52寄存器的大寫和小 <br />寫的定義, <br />和一些常用的子函數,一些宏的定義*/ <br />main() <br /> <br />{ <br /> <br />delaymsecond(10);//延時大約1秒,保證電源穩定和網卡自身的上電完成。 <br />netcardreset();//復位網卡的子程序 <br /> <br />。。。。 <br /> <br />} <br />下面介紹網卡的復位子程序: <br />#define reg1f XBYTE[0xdf00] //網卡的復位端口的地址,對應于網卡的地址 <br />25FH。 <br />#define uint unsigned int //uint 代表unsigned int ,作者一般使用縮寫 <br />uint <br />#define uchar unsigned char //uchar 代表unsigned char,我比較懶,不愿意多 <br />寫 <br />sbit reset=p3^4; //單片機的p3.4腳連接到網卡的RSTDRV復位引腳 <br /> <br />void netcardreset() <br />{uint data i; <br />uchar data temp; <br />reset=1; //使網卡的RSTDRV引腳變成高電平,網卡是高電平復位的。 <br />for(i=0;i<250;i++);//延時程序 <br />reset=0; //使網卡的RSTDRV引腳變成低電平,網卡上電復位完畢 <br />for(i=0;i<250;i++); <br />temp=reg1f;//讀網卡的復位端口 <br />reg1f=temp; //寫網卡的復位端口 <br />for(i=0;i<250;i++); <br /> <br /> <br />} <br />上面所講的實際上是網卡復位的兩種情況, <br />reset=1;reset=0相當于冷復位 <br />temp=reg1f;reg1f=temp相當于熱復位 <br />對網卡的復位端口的讀寫將復位網卡,網卡內部將執行復位過程。讀寫是隨意的, <br />寫入任意的數都將復位網卡。 <br />實際上只要使用冷復位就可以了,熱復位程序可以不要。熱復位主要在電腦里有用 <br />,冷復位就像電腦的冷啟動,熱復位相當于電腦的熱啟動。 <br /> <br />--作者的復位網卡的過程是簡化了的,一個電腦里的復位過程是比較復雜的,如 <br />果你有網卡驅動的UNIX,LINUX程序的源代碼,它的代碼將會做一些判斷和檢查,檢 <br />查網卡是否存在,和是否工作正常,和是否存在地址和中斷沖突 。但在我們的這 <br />個系統里可以省去這些,我們認為網卡的地址和I/O是沒有沖突和正常工作的。當 <br />然如果讀者愿意,也可以寫一些檢查代碼。 <br /> <br /> <br />(未完) <br /> <br /> <br />-- <br /> <br />※ 來源:·BBS 水木清華站 smth.org·[FROM: 166.111.174.125] <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 + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -