----當你買到乙個新的rtl8019as網絡卡,你要先將該網絡卡設定為以下的配置:
操作方式operating mode:跳線方式jumperless(不是即插即用plug and play)
埠i/o base:0240-25fh
中斷interrupt: 2/9(我的程式沒有用到網絡卡中斷,所以也可以不用設定)
你要將這個網絡卡插到你的電腦裡,用這個網絡卡帶的設定程式rset8019.exe將這個卡按照上面的配置設定好。(最好在純dos方式下設定) .
--在介紹網絡卡驅動程式之前,先介紹一下rtl8019as的基本情況:
輸入輸出位址:共32個,位址偏移量為00h--1fh,(對應於240h--25fh,240h的位址偏移量為0,241h的位址偏移量為1,。。。25fh的位址偏移量為1fh)。
其中00h--0fh共16個位址,為暫存器位址。
10h--17h共8個位址,為dma位址。
18h--1fh共8個位址,為復位埠。
對於8位的操作方式,上面的位址中只有18個是有用的:
00h--0fh共16個暫存器位址。
10h dma位址 (10h--17h的8個位址是一樣的,都可以用來做dma埠,只要用其中的乙個就可以了)
1fh 復位位址。(18h到1fh共8個位址都是復位位址,每個位址的功能都是一樣的,只要其中的乙個就可以了,但實際上只有18h,1ah,1ch,1eh這幾個復位埠是有效的,其他不要使用,有些相容卡不支援19h,1bh,1dh等奇數字址的復位)
跟復位有關的引腳:
rstdrv連線到isa匯流排的rstdrv的引腳上。rstdrv同時也是isa匯流排的復位訊號。rstdrv為高電平有效,至少需要 800ns的寬度。給該引腳施加乙個1us以上的高電平就可以復位。施加乙個高電平之後,然後施加乙個低電平。
rstdrv從高電平到低電平之後要等多久,微控制器才可以對網絡卡進行操作?
復位的過程將執行一些操作,比如將93c46讀入,將內部暫存器初始化等。這些至少需要2毫秒的時間。我們推薦大家等待更久的時間之後才對網絡卡操作,比如100毫秒之後才對它操作,以確保完全復位。
對rstdrv可以接微控制器的乙個引腳進行對網絡卡的復位。但也可以直接將rstdrv跟微控制器的reset引腳併聯,微控制器復位的時候,網絡卡也復位,以減少乙個微控制器的引腳的使用。這種情況下,為了保證能夠完全復位,可以使用下面介紹的熱復位**。
跟復位有關的暫存器:
其中的第7位rst跟復位有關。
網絡卡執行正確的復位之後該位為1。在linux或windows的驅動程式中,一般在復位之後檢查該標誌位以確認是否正確復位,特別是在即插即用的檢測過程中。對於我們用微控制器控制網絡卡來說,我們可以不檢查該標誌位,因為如果復位不正常的情況通常是網絡卡壞了。
暫存器:00h--0fh共16個位址是暫存器位址。暫存器分成4頁page0--page3,但ne2000相容的暫存器只有3頁(page0-page2),(第四頁是rtl8019as自己定義的,我們不用去管這些暫存器,因為你對第四頁的暫存器的操作僅對這個網絡卡是有效的,如果你換成其他ne2000相容的網絡卡,例如dm9008,dp8390等,你的程式將無法正常執行。 為了保證驅動程式對所有ne2000的網絡卡有效,不要去操作第四頁的暫存器)
由於暫存器較多,我將在用到該暫存器的時候才對該暫存器介紹。
---對網絡卡進行復位:
這是網絡卡驅動程式的需要做的第乙個內容,由於我們將網絡卡設定為跳線模式,而不是即插即用的模式,rtl8019as.pdf中介紹的plug and play的一些過程,我們不需要做,因為微控制器的資源有限,能夠減少的操作,都儘量減少。
程式從main()開始執行:
#include /*my.h 為作者所用的標頭檔案,包含所有89c52暫存器的大寫和小寫的定義,
和一些常用的子函式,一些巨集的定義*/
main()
下面介紹網絡卡的復位子程式:
#define reg1f xbyte[0xdf00] //網絡卡的復位埠的位址,對應於網絡卡的位址25fh。
#define uint unsigned int //uint 代表unsigned int ,作者一般使用縮寫uint
#define uchar unsigned char //uchar 代表unsigned char,我比較懶,不願意多寫
sbit reset=p3^4; //微控制器的p3.4腳連線到網絡卡的rstdrv復位引腳
void ***cardreset()
{uint data i;
uchar data temp;
reset=1; //使網絡卡的rstdrv引腳變成高電平,網絡卡是高電平復位的。
for(i=0;i<250;i++);//延時程式,至少需要
reset=0; //使網絡卡的rstdrv引腳變成低電平,網絡卡上電復位完畢
for(i=0;i<250;i++);
temp=reg1f;//讀網絡卡的復位埠
reg1f=temp; //寫網絡卡的復位埠
for(i=0;i<250;i++);
為何要上電復位
1 因為微處理器 如我們常說的電腦cpu晶元和高階arm 和微控制器 微控制器 低端arm什麼的 晶元都是數位電路晶元,其正常工作是只有0低電平和1高電平這兩個電平狀態,屬於離散系統。而供給晶元的電源輸入卻是模擬電路,屬於連續線性系統。合上開關,晶元的vdd和vss之間的電壓要達到數字晶元可正常工作...
硬體復位 軟體復位 上電復位的異同
硬體復位 顧名思義通過硬體給系統乙個復位,比如在電路板上設計一復位電路,通 過按下按鍵就可以給系統實現乙個復位,而無論系統在執行什麼樣的程式 硬體復位的作用區域一般是全域性的 軟體復位 是通過軟體給系統乙個復位訊號,如低電平或許是高電平 具體看系統設定 來實現復位操作 復位啟動不需要進行fpga d...
流行的FPGA的上電復位
在實際設計中,由於外部阻容復位時間短,可能無法使fpga內部復位到理想的狀態,所以今天介紹一下網上流行的復位邏輯。在基於verilog的fpga設計中,我們常常可以看到以下形式的程序 訊號rst n用來對程序中所用變數的初始化,這個復位訊號是十分重要的,如果沒有復位,會導致一些暫存器的初始值變得未知...