No.94654 作者:fn333 邮件:nanafn333@163.com ID:55335 登陆:4次 文章数:2篇 最后登陆IP:202.206.215.110 最后登陆:2006/11/17 17:59:53 注册:2006/6/14 9:14:25 财富:113 发帖时间:2006/6/14 9:38:28 发贴者IP:202.206.215.113 标题:fn333:请教关于RTL8019AS方面的问题 摘要:No.94654请教关于RTL8019AS方面的问题 [size=2][size=3][size=2][color=#00FFFF]在使用RTL8019传送数据时,能不能不用把数据打包直接传送数据呢?这是附的RTL8019进行网上传数的程序。 /************************************************************ * File name : Ne2000.c * ************************************************************/ #include "armnet.h" #include "..\inc\44blib.h" #include "..\inc\44b.h" #include <string.h> extern NODE locnode; //本机的节点信息结构(mac,ip,mask,port) NICHDR nichdr; void ResetNic(void) { unsigned char temp; EN_CR = ENCR_PAGE0 + ENCR_NODMA + ENCR_START;//22H Delay(100); rPCONC |= 0x10000000; #if NE_WORDMODE rPDATC |= 0x4000; #else rPDATC &= 0xbfff; #endif Delay(200); temp = EN_RESET; EN_RESET = temp; Delay(200); rPDATC &= 0xbfff; rPCONC &= 0xcfffffff; EN_CR = ENCR_PAGE0 + ENCR_NODMA + ENCR_STOP;//21H Delay(100); if(EN_ISR & ENISR_RESET) //检测ISR的第7位,判断是否复位成功 { DEBUGF(DEMO_DEBUG,("\nNIC Reset OK!\n")); } else { DEBUGF(DEMO_DEBUG,("\nNIC Reset Failed!\n")); return; } EN_DCR = NE_DCRVAL; EN_RBCR0 = 0x00; /* MSB remote byte count reg */ EN_RBCR1 = 0x00; /* LSB remote byte count reg */ EN_RCR = ENRCR_RXOFF; /* RX configuration reg Monitor mode (no packet receive) */ EN_TCR = ENTCR_TXOFF; /* TX configuration reg set internal loopback mode */ EN_TPSR = TX_START_PG; EN_PSTART = RX_START_PG ; /* DMA START PAGE 46h */ EN_PSTOP = RX_STOP_PG; /* Ending page +1 of ring buffer */ EN_BNRY = RX_START_PG; /* Boundary page of ring buffer */ EN_ISR = 0xff; /* INTerrupt stauts reg */ EN_IMR = ENIMR_RX | ENIMR_RX_ERR | ENIMR_TX | ENIMR_TX_ERR; EN_CR = ENCR_PAGE1 + ENCR_NODMA + ENCR_STOP; Delay(100); EN_PAR0 = locnode.mac[0]; EN_PAR1 = locnode.mac[1]; EN_PAR2 = locnode.mac[2]; EN_PAR3 = locnode.mac[3]; EN_PAR4 = locnode.mac[4]; EN_PAR5 = locnode.mac[5]; EN_MAR0 = 0xff; EN_MAR1 = 0xff; EN_MAR2 = 0xff; EN_MAR3 = 0xff; EN_MAR4 = 0xff; EN_MAR5 = 0xff; EN_MAR6 = 0xff; EN_MAR7 = 0xff; EN_CURR = RX_START_PG + 1; /* RX_CURR_PG; Current memory page = RX_CURR_PG ? */ EN_CR = ENCR_PAGE0 + ENCR_NODMA ; /* 00001010B: PS1 PS0 RD2 RD1 RD0 TXP STA STP */ Delay(100); EN_RCR = ENRCR_RXCONFIG; /* rx on(broadcasts, no multicast,errors 04*/ EN_TCR = ENTCR_TXCONFIG; /* xmit on. */ EN_ISR = 0xff; /* Individual bits are cleared by writing a "1" into it. */ EN_IMR = ENISR_ALL; /* INTerrupt mask reg */ EN_CR = ENCR_PAGE0 + ENCR_NODMA + ENCR_START; } void getnic(unsigned short addr, unsigned char data[],unsigned short len) { unsigned short count; unsigned short * dataw; count = NE_WORDMODE ? len > > 1 : len; EN_ISR = ENISR_RDC; // clear remote dma interrupt flag EN_RBCR0 = (unsigned char)(len & 0xff); // read length low EN_RBCR1 = (unsigned char)(len > > 8); // read length high EN_RSAR0 = (unsigned char)(addr & 0xff); // read address low EN_RSAR1 = (unsigned char)(addr > > 8); // read address high EN_CR = ENCR_RREAD + ENCR_START + ENCR_PAGE0;// do dma read #if NE_WORDMODE dataw = (unsigned short *)data; // Use pointer for speed while(count--) // Get words ......
>>返回讨论的主题
|