|
楼主 |
发表于 2008-6-12 10:04:15
|
显示全部楼层
上传GCC但吗,主要是吧EN28J60的驱动改为了RTl8019AS,原函数的名称未变
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
*dataw++ = EN_DATAW;
if (len & 0x01) // If odd length, do last byte
*(unsigned char *)dataw = EN_DATAB;
#else
while(count--) // Get bytes
*data++ = EN_DATAB;
#endif
}
/*
unsigned short GetEthernet(ETHERFRAME *efp)
{
unsigned short current_offset;
unsigned char curr_page;
unsigned char bnry;
if (EN_ISR & 0x10) ResetNic();
EN_CR = ENCR_NODMA + ENCR_PAGE1 + ENCR_START;
curr_page = EN_CURR;
EN_CR = ENCR_NODMA + ENCR_PAGE0 + ENCR_START;
bnry = EN_BNRY + 1;
if (bnry > RX_STOP_PG) bnry = RX_START_PG;
if (bnry != curr_page)
{
current_offset = (unsigned short)(bnry << 8);
memset((unsigned char *)&nichdr, 0xee, sizeof(nichdr));
getnic(current_offset, (unsigned char *)&nichdr, sizeof(nichdr));
//if ((nichdr.stat & 0x01) && nichdr.len >= MINFRAMEC && nichdr.len<=MAXFRAMEC)
if ((nichdr.stat & 0x01) && nichdr.len<=MAXFRAMEC)
if(efp)
getnic(current_offset + sizeof(nichdr), (unsigned char *)efp, nichdr.len - sizeof(nichdr));
if (nichdr.next >= RX_START_PG && nichdr.next < RX_STOP_PG)
bnry = nichdr.next;
else
bnry = nicwrap(bnry + 1);
bnry = nicwrap(bnry - 1);
EN_BNRY = bnry;
return (nichdr.len - sizeof(nichdr));// - sizeof(ETHERHDR));
}
return (0);
}*/
WORD enc28j60_packet_receive(BYTE *buffer,WORD max_length)
{
unsigned short current_offset;
unsigned char curr_page;
unsigned char bnry;
NICHDR nichdr;
if (EN_ISR & 0x10) ResetNic();
EN_CR = ENCR_NODMA + ENCR_PAGE1 + ENCR_START;
curr_page = EN_CURR;
EN_CR = ENCR_NODMA + ENCR_PAGE0 + ENCR_START;
bnry = EN_BNRY + 1;
if (bnry > RX_STOP_PG) bnry = RX_START_PG;
if (bnry != curr_page)
{
current_offset = (unsigned short)(bnry << 8);
memset((unsigned char *)&nichdr, 0xee, sizeof(nichdr));
getnic(current_offset, (unsigned char *)&nichdr, sizeof(nichdr));
//if ((nichdr.stat & 0x01) && nichdr.len >= MINFRAMEC && nichdr.len<=MAXFRAMEC)
if ((nichdr.stat & 0x01) && nichdr.len<=MAXFRAMEC)
if(buffer)
getnic(current_offset + sizeof(nichdr), (unsigned char *)buffer, nichdr.len - sizeof(nichdr));
if (nichdr.next >= RX_START_PG && nichdr.next < RX_STOP_PG)
bnry = nichdr.next;
else
bnry = nicwrap(bnry + 1);
bnry = nicwrap(bnry - 1);
EN_BNRY = bnry;
return (nichdr.len - sizeof(nichdr));// - sizeof(ETHERHDR));
}
return (0);
} |
|