📄 niccheck.c
字号:
/*******************************************************************
以太网芯片检测函数
函数原型:
CheckRTL8019();
功能:
检查RTL8019的状态。
参数:
无。
返回值:
RTL8019的状态,如果状态错误则返回FALSE,否则返回TRUE。
********************************************************************/
unsigned char CheckRTL8019(void)
{
unsigned i,temp;
outportb(BIOA+0x1f,inportb(BIOA+0x1f)); //启动RTL8019AS
outportb(CR,0x21); //设置page 0,复位RTL8019AS
if(inportb(CR)!=0x21)
return FALSE;
outportb(DCR,0x49); //设置数据结构寄存器
outportb(TCR,0x02); //设置RTL8019AS发送模式
outportb(RBCR0,0x0c); //设置远程DMA字节计数器
outportb(RBCR1,0);
outportb(RSAR0,0); //设置远程DMA开始地址
outportb(RSAR1,0);
outportb(CR,0x0a); //设置远程DMA读
for(i=0;i<6;i++)
szNodeAddress[i]=inportb(DATAIO);
outportb(RSAR0,0x1c); //设置远程DMA起始地址
outportb(RSAR1,0);
outportb(RBCR0,0x02); //设置远程DMA字节计数器
outportb(RBCR1,0);
outportb(CR,0x0a); //设置远程DMA读
Flag=inportb(DATAIO);
outportb(RSAR0,0); //设置远程DMA起始地址
outportb(RSAR1,0x40);
outportb(RBCR0,0); //设置远程DMA字节计数器
outportb(RBCR1,0x40);
outportb(CR,0x12); //设置远程DMA写
for(i=0;i<0x2000;i++)
outport(DATAIO,i);
outportb(RSAR0,0); //设置远程DMA起始地址
outportb(RSAR1,0x40);
outportb(RBCR0,0); //设置远程DMA字节计数器
outportb(RBCR1,0x40);
outportb(CR,0x0a); //设置远程DMA读
for(i=0;i<0x2000;i++)
if(inport(DATAIO)!=i)
return FALSE;
return TRUE;
}
/*******************************************************************
以太网芯片检测函数
函数原型:
InitializeRTL8019();
功能:
初始化RTL8019的状态。
参数:
无。
返回值:
无。
********************************************************************/
void InitializeRTL8019(void)
{
unsigned char i;
outportb(BIOA+0x1f,inportb(BIOA+0x1f)); //启动以太网芯片
outportb(CR,0x21); //设置第0页,复位以太网芯片
outportb(DCR,0x49); //设置数据寄存器
outportb(RBCR0,0); //设置远程DMA字节计数
outportb(RBCR1,0);
outportb(RCR,0x0c); //设置数据接收寄存器状态
//仅仅接受广播数据和符合本地地址的数据
outportb(TCR,0x02); //设置发送寄存器
outportb(BNRY,STARTADDRESS); //设置边界指针
outportb(PSTART,STARTADDRESS); //设置页起始寄存器
outportb(PSTOP,STOPADDRESS); //Set page end register
outportb(ISR,0xff); //清除以太网芯片中断寄存器状态
outportb(IMR,0x1b); //设置中断屏蔽寄存器,使能接收中断
outportb(CR,0x61); //设置第1页
for(i=1;i<=6;i++)
outportb(BIOA+i,szNodeAddress[i-1]); //设置本地地址和地址寄存器
outportb(CURR,STARTADDRESS+1);
NextPacket=STARTADDRESS+1;
outportb(CR,0x22);
outportb(CR,0x62);
for(i=0;i<8;i++)
outportb(MAR0+i,0);
outportb(CR,0x22);
outportb(TCR,0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -