No.7071 作者:阿鹏 邮件: ID:6146 登陆:1次 文章数:5篇 最后登陆IP: 最后登陆:2002/4/27 10:36:00 注册:2002/4/27 10:36:00 财富:17 发帖时间:2002/4/27 10:39:00 发贴者IP:202.38.124.247 标题:阿鹏:C51编程:求救啊,老古:RTL8019AS怎样收发数据?看看我的程序: 摘要:No.7071C51编程:求救啊,老古:RTL8019AS怎样收发数据?看看我的程序: 按照老古的文章,我的电路(一体化)和程序已经能正确的读写RTL8019AS的RAM(即 remote DMA)。但在接着的调试中发现收发数据均不行。我是用netxray来检测数据的。 我的MAC是从另一个网卡读下来的,该网卡暂时不用,所以MAC是唯一的。 我的程序如下: (时间紧急,各位大虾救救,我的email: y_yp@21cn.com) pragma DEBUG CODE OBJECTEXTEND #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #include <reg51r.h> #include <intrins.h> #include <absacc.h> #define rg00 XBYTE[0xc000] /* I/O Base address 为300H,我只连接了P2.0-4 */ #define rg01 XBYTE[0xc100] #define rg02 XBYTE[0xc200] #define rg03 XBYTE[0xc300] #define rg04 XBYTE[0xc400] #define rg05 XBYTE[0xc500] #define rg06 XBYTE[0xc600] #define rg07 XBYTE[0xc700] #define rg08 XBYTE[0xc800] #define rg09 XBYTE[0xc900] #define rg0a XBYTE[0xca00] #define rg0b XBYTE[0xcb00] #define rg0c XBYTE[0xcc00] #define rg0d XBYTE[0xcd00] #define rg0e XBYTE[0xce00] #define rg0f XBYTE[0xcf00] #define rg10 XBYTE[0xd000] void LAN_init(void); void page(uchar num); void write_dma(uint addr,uint count); sbit RSTDRV = P1^2; uchar data CURR; uchar data BNRY; uchar idata bckbuf[64]; void main (void) { register uchar i; uint temp; wait_1mS(1000); LAN_init(); temp=0x4000; write_dma(temp,60); /* 我试过用read_dma(temp,60)读数据,OK! */ /* bckbuf[n]数据为一个ARP包: 0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0xe8,0xa3,0x62,0x61,0x08,0x06,0x00,0x01, 0x08,0x00,0x06,0x04,0x00,0x01,0x00,0x00,0xe8,0xa3,0x62,0x61,0xca,0x26,0xcf,0x9e, 0x00,0x00,0x00,0x00,0x00,0x00,0xca,0x26,0xcf,0x58,...后面补18个0x00 */ page(0); rg05=0x3c; /* TBCR0 为低位 */ rg06=0x00; /* TBCR1 为高位 */ rg00=0x1e; /* 开始发送数据 */ while(1) { wait_1mS(100); page(0); BNRY=rg03; page(1); CURR=rg07; bckbuf[0]=BNRY; bckbuf[1]=CURR; sends(bckbuf,2); /* 把BNRY和CURR发送到串口显示,过了很久都还是50H和51H */ } /* sends程序可以保证没有问题 */ } /************************************************************************/ void write_dma(uint addr,uint count) { register uint i; page(0); rg09=addr>>8; /* addr high */ rg08=addr&0x00ff; /* addr low */ rg0b=count>>8; /* write count high */ rg0a=count&0x00ff; ......
>>返回讨论的主题
|