No.88225 作者:zlinghe 邮件:zlinghe@sina.com ID:46307 登陆:1次 文章数:1篇 最后登陆IP:202.105.138.34 最后登陆:2006/1/19 13:53:44 注册:2006/1/18 12:32:37 财富:105 发帖时间:2006/1/18 12:36:50 发贴者IP:202.105.138.34 标题:zlinghe:求助,8019网卡驱动问题 摘要:No.88225求助,8019网卡驱动问题 我现在用51控制8019网卡芯片,采用查询方式收数据。但接收数据的时候只能收几个数据包,然后收到的4个字节的包头就不对了,再往后就干脆全为零了,之后CURR寄存器就为0XFF了。郁闷,到底是怎么回事呢? 这是相关的几个函数: //8019初始化函数 void RTLInit(BYTE LocalMACAddr[]) { // BYTE temp; // int i; NET_RST=1; delayms(2); NET_RST=0; delayms(100); /* init RTL registers*/ WriteReg(CR,(CR_PAGE0 | CR_ABORT_COMPLETE_DMA | CR_STOP_COMMAND)); /* set page0, stop command. command is stop after power up. */ delayms(10); //确保芯片进入停止状态 WriteReg(DCR_WPAGE0, 0xC8); /* DCR: refer to define of DCR in Rtl8019as.h */ WriteReg(RBCRH_WPAGE0,0); WriteReg(RBCRL_WPAGE0,0); //使芯片与网络断开 WriteReg(RCR_WPAGE0, 0x20); /* RCR: refer to define of RCR in Rtl8019as.h */ WriteReg(TCR_WPAGE0, 0x02); /* TCR: refer to define of TCR in Rtl8019as.h */ WriteReg(PSTART_WPAGE0, RECEIVE_START_PAGE); /* Pstart */ WriteReg(PSTOP_WPAGE0, RECEIVE_STOP_PAGE); /* Pstop *///0x80也可以使用 WriteReg(BNRY_WPAGE0, RECEIVE_START_PAGE); /* BNRY */ WriteReg(TPSR_WPAGE0, SEND_START_PAGE0); /* TPSR */ WriteReg(ISR_WPAGE0, 0xFF); /* write FF to clear up all interrupt status */ WriteReg(IMR_WPAGE0,0x0); WriteReg(CR,(CR_PAGE1 | CR_ABORT_COMPLETE_DMA | CR_STOP_COMMAND)); WriteReg(CURR_WPAGE1,RECEIVE_START_PAGE + 1); /* set phisical address */ WriteReg(PRA0_WPAGE1,LocalMACAddr[0]); WriteReg(PRA1_WPAGE1,LocalMACAddr[1]); WriteReg(PRA2_WPAGE1,LocalMACAddr[2]); WriteReg(PRA3_WPAGE1,LocalMACAddr[3]); WriteReg(PRA4_WPAGE1,LocalMACAddr[4]); WriteReg(PRA5_WPAGE1,LocalMACAddr[5]); /* MAR0 */ WriteReg(0x07, 0xff); WriteReg(0x08, 0xff); WriteReg(0x09, 0xff); WriteReg(0x0a, 0xff); WriteReg(0x0b, 0xff); WriteReg(0x0c, 0xff); WriteReg(0x0d, 0xff); WriteReg(0x0e, 0xff); WriteReg(0x0f, 0xff); WriteReg(CR,(CR_PAGE0 | CR_ABORT_COMPLETE_DMA | CR_START_COMMAND)); WriteReg(RCR_WPAGE0, 0xCC); /* RCR: refer to define of RCR in Rtl8019as.h */ WriteReg(TCR_WPAGE0, 0x00); /* TCR: refer to define of TCR in Rtl8019as.h */ /* transimit start page */ LastSendStartPage = SEND_START_PAGE0; StartPageOfPacket = RECEIVE_START_PAGE + 1; /* in the beginning, no packet is in sending */ InSending = FALSE; /* initial over, start command and receive */ WriteReg(ISR_WPAGE0, 0xFF); /* write FF to clear up all interrupt status */ } /* read rlt ram data to buffer */ void RTLReadRam(WORD address,WORD size,BYTE DT_XDATA * buff) { BYTE DT_XDATA * Endp; BYTE PrePage; /* store page */ PrePage = ReadReg(CR); RTLPage(0); WriteReg(RSARH_WPAGE0,(BYTE)((address> > 8)&0x00ff)); WriteReg(RSARL_WPAGE0,(BYTE)address); WriteReg(RBCRH_WPAGE0,(BYTE)((size> > ......
>>返回讨论的主题
|