三 網絡卡初始化

2021-04-01 04:34:05 字數 1920 閱讀 5310

---- 完成復位之後,你要對網絡卡的工作引數進行設定.以使網絡卡開始工作.

先介紹乙個子函式

#define reg00 xbyte[0xc000] //對應於位址240h 為命令暫存器cr位址

void page(uchar pagenumber)

錯誤修正:(2023年11月10日) :以上程式有問題,在中斷驅動或傳送資料報不作等待時,因為傳送資料報的命令是讓txp置位,如果在傳送資料報的過程中,使用該函式,就會不斷地向外傳送資料報.原因是txp置位之後,只能是發完資料報的時候,由網絡卡內部將txp位清0,命令不能使txp清0,對該位寫入0沒有作用.讀取時要遮蔽該位,上面的程式修正如下,請使用者使用下面的程式:

void page(uchar pagenumber)

從實驗當中也發現,只要再置位txp位就可以重發該資料報(重發資料報時,不需要設定tpstart,tbcr0,tbcr1).

作用是選擇指定的頁,網絡卡共有4頁暫存器,ne2000相容的有3頁。第四頁可以不用。 位7

6543

210名字

ps1ps0

rd2rd1

rd0txp

stastp

ps1和ps0這兩個位用來選擇暫存器頁,ps1 ps0=00時選擇暫存器頁0,=01時選擇暫存器頁1, =10時選擇暫存器頁2,=11時選擇暫存器頁3.

上面的程式的引數為pagenumber,用來指定第幾頁。

temp=reg00 ;//讀入命令暫存器的值。

temp=temp&0x3f;//將高2位,即ps1,ps0清0

pagenumber=pagenumber<<6;//將低2位移至高階

temp=temp|pagenumber, //寫入高2位

reg00=temp; //設定第幾頁

當然也可以寫成更加簡單的幾句:

temp=reg00&0x3f;

pagenumber=pagenumber<<6;

reg00=temp|pagenumber;

但這樣對讀者來說不好理解。

從執行的速度來說,上面的**也不是最快的。但作者主要講述原理,而不是**最快的實現。

--rd2,rd1,rd0這3個位代表要執行的功能。

=001 讀網絡卡記憶體

=010 寫網絡卡記憶體

=011 傳送網絡卡資料報

=1** 完成或結束dma的讀寫操作

---txp這個位寫入1時傳送資料報,發完自動清零

---sta,stp這兩個位用來啟動命令或停止命令

=10 啟動命令

=01 停止命令

下面介紹網絡卡的初始化子程式:

void ne2000init()

{ reg00=0x21; //選擇頁0的暫存器,網絡卡停止執行,因為還沒有初始化。

reg01=0x4c; //暫存器pstart

reg02=0x80; //pstop

reg03=0x4c; //bnry

reg04=0x45; //tpsr

reg0c=0xcc; //rcr

reg0d=0xe0; //tcr

reg0e=0xc8; //dcr 資料配置暫存器 8位資料dma

reg0f=0x00; //imr disable all interrupt

page(1); //選擇頁1的暫存器

reg07=0x4d; //curr

reg08=0x00; //mar0

reg09=0x41; //mar1

reg0a=0x00; //mar2

reg0b=0x80; //mar3

reg0c=0x00; //mar4

reg0d=0x00; //mar5

reg0e=0x00; //mar6

reg0f=0x00; //mar7

reg00=0x22;//選擇頁0暫存器,網絡卡執行命令。

SD卡初始化

傳送指令時可能會有狀態轉換,尤其是初始化時。指令分為兩類 一類為通用指令,另一類為針對某種卡的特定指令,但特定指令的實際數可以通用指令相同,所以cmd55 特定指令來傳送特定指令,1 傳送cmd0指令 go idle state 卡進入idle狀態 2 傳送指令cmd8 send if cond 如...

SIM卡初始化

sim卡初始化 int card init int fd memset numberf,0,sizeof numberf memset reply,0,sizeof reply strcpy numberf,at csq r 檢查網路訊號強度,返回 csq 其中 應在 10 到 31 之間,數值越大...

SD卡初始化步驟詳解

硬體平台 飛思卡爾s12xep100 開發環境 codewarrior 5.2 結果 批量儲存穩定 最近在做檔案系統的公升級,先前用的是21ic論壇上面down的znfat,相信做微控制器軟體的兄弟們應該都知道。後來用的過程中發現此檔案系統超時機制做的不是很好,而且不精簡,會占用比較大的ram和fl...