📄 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_REV5 0x20 /* 保留位,总为1 */
#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 + -