?? 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 + -