?? rtl8019.h
字號:
#ifndef RTL8019_H_
#define RTL8019_H_
#define RTL_BASE_ADDR 0xc000 /* 網片基地址 */
#define RTL8019AS_ID0 0x50 /* 8019as id */
#define RTL8019AS_ID1 0x70
/************************************************************************/
/* NE2000兼容寄存器定義 */
/* page0的寄存器定義 */
/************************************************************************/
#define RW0_CR 0x00 /* 控制寄存器,page0~3皆可讀寫 */
/* 選擇寄存器頁,使能/禁止遠程DMA,發布命令 */
#define RW0_CR_CS1 0x80 /* CS1,CS0頁選擇位. */
#define RW0_CR_CS0 0x40 /* 00:page 0; 01:page 1; 10:page 2; 11:page 3 */
/* 0,1,2頁NE2000兼容,3頁RTL8019AS增強功能 */
#define RW0_CR_RD2 0x20 /* RD2,RD1,RD0遠端DMA讀寫控制 */
#define RW0_CR_RD1 0x10 /* 000:保留; 001:遠程DMA讀; 010:遠程DMA寫 */
#define RW0_CR_RD0 0x08 /* 011:發包; 1**:異常終止/完成遠程DMA操作 */
#define RW0_CR_TXP 0x04 /* 1:使能發送包,異常終止/完成自動清零; 寫0:無效果 */
#define RW0_CR_STA 0x02 /* STA,STP為數據包接收發送控制.上電為01 */
#define RW0_CR_STP 0x01 /* 10:接收發送數據; 01:停止收發送數據 */
/* ............................................................................................ */
#define R0_CLDA0 0x01 /* CLDA0,CLDA1為只讀,page0 */
#define R0_CLDA1 0x02 /* 當前本地DMA寄存器,讀此寄存器可以得到當前本地DMA的地址,16位 */
/* ............................................................................................ */
#define W0_PSTART 0x01 /* 接收緩沖區開始頁指針,設置接收緩沖區開始頁地址.page0 寫 */
#define W0_PSTOP 0x02 /* 接收緩沖區停止頁指針,設置接收緩沖區停止頁地址.page0 寫 */
/* ............................................................................................ */
#define RW0_BNRY 0x03 /* 指向最后一個已讀取的頁,防止接收緩沖區重寫.page0 讀寫. */
/* ............................................................................................ */
#define W0_TPSR 0x04 /* 向以太網發送的緩沖區開始頁指針.page0 寫 */
/* ............................................................................................ */
#define R0_TSR 0x04 /* 發送狀態寄存器,指示包發送過程中的狀態.page0 讀 */
#define R0_TSR_OWC 0x80 /* 置1:一個時隙(51.2us)后檢測到了一個沖突,正常后重新發起發送 */
#define R0_TSR_CDH 0x40 /* 置1:收發器發送CD Heartbeat signal失敗 */
#define R0_TSR_REV5 0x20 /* 保留位,總為1 */
#define R0_TSR_CRS 0x10 /* 置1:發送數據包過程中載波丟失 */
#define R0_TSR_ABT 0x08 /* 置1:因為過度沖突(16次)NIC終止了發送 */
#define R0_TSR_COL 0x04 /* 置1:與其它網絡上的station有沖突 */
#define R0_TSR_REV1 0x02 /* 保留位,總為1 */
#define R0_TSR_PTX 0x01 /* 置1:發送完成沒有錯誤產生 */
/* ............................................................................................ */
#define W0_TBCR0 0x05 /* 設置網卡將要向以太網發送的字節數. page0 寫 */
#define W0_TBCR1 0x06
/* ............................................................................................ */
#define R0_NCR 0x05 /* 記錄一個節點在發送包過程中沖突的次數.page0 讀 */
/* ............................................................................................ */
#define R0_FIFO 0x06 /* 環回測試時讀取數據.page0 讀 */
/* ............................................................................................ */
#define RW0_ISR 0x07 /* 中斷狀態寄存器,反映了NIC的狀態(相應位寫"1"清零,復位后必須清零). page0 讀寫 */
#define RW0_ISR_RST 0x80 /* 1. 置1:NIC處于復位狀態,start command之后自動清零
2. 置1:接收緩沖溢出,一個或多個數據包讀出后自動清零 */
#define RW0_ISR_RDC 0x40 /* 置1:遠程DMA操作結束 */
#define RW0_ISR_CNT 0x20 /* 置1:一個或多個網絡計數器最高位置位 */
#define RW0_ISR_OVW 0x10 /* 置1:接收緩沖用完,但還沒有溢出 */
#define RW0_ISR_TXE 0x08 /* 置1:一個數據包在發送過程中由于過度沖突而終止 */
#define RW0_ISR_RXE 0x04 /* 置1:接收數據出現: 1. CRC錯誤 2. 幀排列錯誤 3. 包丟失 */
#define RW0_ISR_PTX 0x02 /* 置1:數據包發送沒有錯誤 */
#define RW0_ISR_PRX 0x01 /* 置1:數據包接收沒有錯誤 */
/* ............................................................................................ */
#define W0_RSAR0 0x08 /* 設置遠程DMA起始地址,設置CR進行DMA讀寫操作.page0 寫 */
#define W0_RSAR1 0x09
/* ............................................................................................ */
#define R0_CRDA0 0x08 /* 當前遠程DMA地址.page0 讀 */
#define R0_CRDA1 0x09
/* ............................................................................................ */
#define W0_RBCR0 0x0a /* 遠程DMA將要讀/寫的字節數. page0 寫 */
#define W0_RBCR1 0x0b
/* ............................................................................................ */
#define R0_ID0 0x0a /* RTL8019AS芯片ID號. 50H,page0 讀 */
#define R0_ID1 0x0b /* RTL8019AS芯片ID號. 70H */
/* ............................................................................................ */
#define W0_RCR 0x0c /* 接收配置寄存器.page0 寫 */
#define W0_RCR_REV1 0x80 /* 保留位,總為1 */
#define W0_RCR_REV0 0x40 /* 保留位,總為1 */
#define W0_RCR_MON 0x20 /* 監視模式.1:接收到的正確數據包不存儲,0:要存儲 */
#define W0_RCR_PRO 0x10 /* 1:接收所有帶有物理目的地址的數據包
0:接收物理目的地址必須與節點地址PAR0~5相符合的數據包 */
#define W0_RCR_AM 0x08 /* 1:接收在組播范圍內的數據; 0:拒絕組播數據 */
#define W0_RCR_AB 0x04 /* 1:接收廣播數據包; 0:拒絕廣播數據包 */
#define W0_RCR_AR 0x02 /* 1:接收數據長度小于64字節的數據包; 0:拒絕 */
#define W0_RCR_SEP 0x01 /* 1:接收有錯誤的數據包; 0:拒絕有錯誤的數據包 */
/* ............................................................................................ */
#define R0_RSR 0x0c /* 接收狀態寄存器.page0 讀 */
#define R0_RSR_DFR 0x80 /* 置1:檢測到了載波或者沖突 */
#define R0_RSR_DIS 0x40 /* 置1:NIC進入了監視模式,接收禁止 置0:NIC離開了監視模式,允許接收 */
#define R0_RSR_PHY 0x20 /* 置1:接收到的數據包有組播或廣播地址 置0:有目的地址 */
#define R0_RSR_MPA 0x10 /* 置1:丟失了數據包因為接收緩沖不夠或者處于監視模式.CNTR2加1 */
#define R0_RSR_REV 0x08 /* 保留位,總為1 */
#define R0_RSR_FAE 0x04 /* 置1:幀錯誤,CRC錯誤.CNTR0加1 */
#define R0_RSR_CRC 0x02 /* 置1:CRC錯誤.CNTR1加1 */
#define R0_RSR_PRX 0x01 /* 置1:接收到的數據包沒有錯誤 */
/* ............................................................................................ */
#define W0_TCR 0x0d /* 發送配置寄存器.page0 寫 */
#define W0_TCR_REV7 0x80 /* 保留位,總為1 */
#define W0_TCR_REV6 0x40 /* 保留位,總為1 */
#define W0_TCR_REV5 0x20 /* 保留位,總為1 */
#define W0_TCR_OFST 0x10 /* 1:沖突偏置使能 */
#define W0_TCR_ATD 0x08 /* 0:正常操作; 1:組播地址控制,用作流控 */
#define W0_TCR_LB1 0x04 /* 環回測試.00:正常操作; 01:內部環回(NIC) */
#define W0_TCR_LB0 0x02 /* 10:外部環回(ENDEC); 11:外部環回(Coax) */
#define W0_TCR_CRC 0x01 /* 正常模式: 0:CRC檢測和產生使能 1:CRC產生禁止,檢測使能
環回模式: 0:CRC產生使能,檢測禁止 1:CRC產生禁止,檢測使能 */
/* ............................................................................................ */
#define R0_CNTR0 0x0d /* 幀排列錯誤計數器.page0 讀 */
/* ............................................................................................ */
#define W0_DCR 0x0e /* 數據配置寄存器.page0 寫 */
#define W0_DCR_REV7 0x80 /* 保留位,總為1 */
#define W0_DCR_FT1 0x40 /* FIFO門限選擇 */
#define W0_DCR_FT0 0x20
#define W0_DCR_ARM 0x10 /* 自動初始化遠程DMA. 0:發送包命令不執行; 1:發送包命令執行 */
#define W0_DCR_LS 0x08 /* 0:環回選擇(需要TCR的配合); 1:正常操作 */
#define W0_DCR_LAS 0x04 /* 必須為0(上電時為1) */
#define W0_DCR_BOS 0x02 /* 字節排序選擇. 0:高字節-低字節; 1:低字節-高字節 */
#define W0_DCR_WTS 0x01 /* DMA傳輸選擇. 0:字節傳輸; 1:字傳輸 */
/* ............................................................................................ */
#define R0_CNTR1 0x0e /* CRC錯誤計數器.page0 讀 */
/* ............................................................................................ */
#define W0_IMR 0x0f /* 中斷屏蔽寄存器,上電清零.page0 寫 */
/* ............................................................................................ */
#define R0_CNTR2 0x0f /* 數據包丟失計數器.page0 讀 */
/* ............................................................................................ */
/************************************************************************************************/
/* page1的寄存器定義 */
#define RW1_PAR0 0x01 /* 以太網節點物理地址寄存器,用于比較輸入數據包的目的地址 */
#define RW1_PAR1 0x02 /* 此6個寄存器page1 讀寫 */
#define RW1_PAR2 0x03
#define RW1_PAR3 0x04
#define RW1_PAR4 0x05
#define RW1_PAR5 0x06
/* ............................................................................................ */
#define RW1_CURR 0x07 /* 指向當前正在寫的下一頁,網卡寫完接收緩沖區一頁,就將這個頁地址加一.page1 讀寫 */
/* ............................................................................................ */
#define RW1_MAR0 0x08 /* 組播地址過慮,跟CRC的邏輯有關.page1讀寫 */
#define RW1_MAR1 0x09
#define RW1_MAR2 0x0a
#define RW1_MAR3 0x0b
#define RW1_MAR4 0x0c
#define RW1_MAR5 0x0d
#define RW1_MAR6 0x0e
#define RW1_MAR7 0x0f
/************************************************************************************************/
/* page2的寄存器定義 */
#define R2_PSTART 0x01 /* 接收緩沖區開始頁指針,設置接收緩沖區開始頁地址.page2 讀 */
#define R2_PSTOP 0x02 /* 接收緩沖區停止頁指針,設置接收緩沖區停止頁地址.page2 讀 */
/* ............................................................................................ */
#define R2_TPSR 0x04 /* 向以太網發送的緩沖區開始頁指針.page2 讀 */
/* ............................................................................................ */
#define R2_RCR 0x0c /* 接收配置寄存器.page2 讀 */
#define R2_RCR_REV1 0x80 /* 保留位,總為1 */
#define R2_RCR_REV0 0x40 /* 保留位,總為1 */
#define R2_RCR_MON 0x20 /* 監視模式.1:接收到的正確數據包不存儲,0:要存儲 */
#define R2_RCR_PRO 0x10 /* 1:接收所有帶有物理目的地址的數據包
0:接收物理目的地址必須與節點地址PAR0~5相符合的數據包 */
#define R2_RCR_AM 0x08 /* 1:接收在組播范圍內的數據; 0:拒絕組播數據 */
#define R2_RCR_AB 0x04 /* 1:接收廣播數據包; 0:拒絕廣播數據包 */
#define R2_RCR_AR 0x02 /* 1:接收數據長度小于64字節的數據包; 0:拒絕 */
#define R2_RCR_SEP 0x01 /* 1:接收有錯誤的數據包; 0:拒絕有錯誤的數據包 */
/* ............................................................................................ */
#define R2_TCR 0x0d /* 發送配置寄存器.page2 讀 */
#define R2_TCR_REV7 0x80 /* 保留位,總為1 */
#define R2_TCR_REV6 0x40 /* 保留位,總為1 */
#define R2_TCR_REV5 0x20 /* 保留位,總為1 */
#define R2_TCR_OFST 0x10 /* 1:沖突偏置使能 */
#define R2_TCR_ATD 0x08 /* 0:正常操作; 1:組播地址控制,用作流控 */
#define R2_TCR_LB1 0x04 /* 環回測試.00:正常操作; 01:內部環回 */
#define R2_TCR_LB0 0x02 /* 10:外部環回(通過SNI); 11:外部環回(通過MAU) */
#define R2_TCR_CRC 0x01 /* CRC邏輯控制,跟模式有關 */
/* ............................................................................................ */
#define R2_DCR 0x0e /* 數據配置寄存器.page2讀 */
#define R2_DCR_REV7 0x80 /* 保留位,總為1 */
#define R2_DCR_FT1 0x40 /* FIFO門限選擇 */
#define R2_DCR_FT0 0x20
#define R2_DCR_ARM 0x10 /* 自動初始化遠程DMA. 0:發送包命令不執行; 1:發送包命令執行 */
#define R2_DCR_LS 0x08 /* 0:環回選擇(需要TCR的配合); 1:正常操作 */
#define R2_DCR_LAS 0x04 /* 必須為0(上電時為1) */
#define R2_DCR_BOS 0x02 /* 字節排序選擇. 0:高字節-低字節; 1:低字節-高字節 */
#define R2_DCR_WTS 0x01 /* DMA傳輸選擇. 0:字節傳輸; 1:字傳輸 */
/* ............................................................................................ */
#define R2_IMR 0x0f /* 中斷屏蔽寄存器,上電清零.page2 讀 */
/************************************************************************************************/
/* RTL8019AS 特殊寄存器定義,page3 */
#define RW3_9346CR 0x01 /* 9346命令寄存器.page3 讀寫,位0只讀 */
#define RW3_9346CR_EEM1 0x80 /* 選擇工作模式. 00:正常模式; 01:自動裝載9346中的內容 */
#define RW3_9346CR_EEM0 0x40 /* 10:9346編程模式; 11:配置寄存器寫使能(CONFIG1-3) */
#define RW3_9346CR_REV4 0x10 /* 保留位,總為1 */
#define RW3_9346CR_EECS 0x08 /* 在auto_load和編程模式下,映射EECS, EESK, EEDI & EEDO引腳上的狀態 */
#define RW3_9346CR_EESK 0x04
#define RW3_9346CR_EEDI 0x02
#define R3_9346CR_EEDO 0x01
/* ............................................................................................ */
#define RW3_BPAGE 0x02 /* BROM頁寄存器 */
/* ............................................................................................ */
#define RW3_CONFIG0 0x03 /* 配置寄存器0.page3 位7,6讀寫,其余只讀 */
#define RW3_CONFIG0_ID1 0x80 /* 在RTL8019AS可寫,其余不行 */
#define RW3_CONFIG0_ID0 0x40
/* 以下為狀態位 */
#define R3_CONFIG0_AUI 0x20 /* 置1:when 外部MAU作為AUI接口.(1)10Base5模式;(2)AUI輸入為高 */
#define R3_CONFIG0_PNPJP 0x10 /* 置1:when pnp引腳被外部拉高,即插即用模式 */
#define R3_CONFIG0_JP 0x08 /* 置1:when 跳線模式 */
#define R3_CONFIG0_BNC 0x04 /* 置1:when BNC接口.(1)PL1=PL0=0 (auto-detect)和連接測試失敗;(2) PL1=PL0=1 (10 Base 2) */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -