导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→C51编程:求救啊,老古:RTL8019AS怎样收发数据?看

* 7071: C51编程:求救啊,老古:RTL8019AS怎样收发数据?看看我的程序:

   阿鹏 
阿鹏发表的帖子 

 C51编程:求救啊,老古: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;                     /* write count low  */
    rg00=0x12;                             /* dma write */

    for(i=0;i<count;i++) rg10=bckbuf[i];

    rg0a=0;
    rg0b=0;
    rg00=0x22;
}
/*******************************************************************/
void page(uchar num)
{
    uchar tp;
    tp=rg00&0x3b;
    num=num<<6;
    tp=tp|num;
    rg00=tp;
}
/*****************************************************************/
void LAN_init(void)
{
    RSTDRV=1;           /* Hardware Reset Ethernet Controler */
    wait_1mS(2);
    RSTDRV=0;           /* Reset Finish */
    wait_1mS(2);

    rg00=0x21;          /* CR= PS1 PS0 RD2 RD1 RD0 TXP STA STP =0010 0001 */
    rg01=0x50;          /* PSTART */
    rg02=0x80;          /* PSTOP */
    rg03=0x50;          /* BNRY */
    rg04=0x40;          /* TPSR */
    rg0c=0xcc;          /* RCR= - - MON PRO AM AB AR SEP =1100 1100 */
    rg0d=0xe0;          /* TCR= - - - OFST ATD LB1 LB0 CRC =1110 0000 */
    rg0e=0xc8;          /* DCR= - FT1 FT0 ARM LS LAS BOS WAS =1100 1000 */
    rg0f=0x00;          /* IMR */

    page(1);            
    rg01=s_mac[0];      /* PAR0(Physical Address Register0) */
    rg02=s_mac[1];      /* PAR1 */
    rg03=s_mac[2];      /* PAR2 */
    rg04=s_mac[3];      /* PAR3 */
    rg05=s_mac[4];      /* PAR4 */
    rg06=s_mac[5];      /* PAR5 */
    rg07=0x51;          /* CURR */
    rg08=0x00;          /* MAR0 */
    rg09=0x00;          /* MAR1 */
    rg0a=0x00;          /* MAR2 */
    rg0b=0x00;          /* MAR3 */
    rg0c=0x00;          /* MAR4 */
    rg0d=0x00;          /* MAR5 */
    rg0e=0x00;          /* MAR6 */
    rg0f=0x00;          /* MAR7 */
}

发表时间:2002年4月27日10:39:00

  
回复该帖

本主题共有 4 帖,分页:>>>>>该主题的所有内容[4]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  7074.[详细]老古,各位大哥,帮帮小弟指点迷津吧。
摘要:......(无内容)
- [阿鹏][943次] 2002年4月27日

  7118.[详细]各位大虾,帮一帮吧。
摘要:......(无内容)
- [阿鹏][1431次] 2002年4月28日

  7124.[详细]检查网线
摘要:......(无内容)
- [老古][1072次] 2002年4月28日

[上一篇帖子]:硬件:请教老古程序编译问题我购买的isa开发板带的程序中编译结果ne2000.hex,用window
[下一篇帖子]:硬件:请教老古V2.0版的新程序支持TCP,同时又支持UDP,还支持主动的、被动的连接。更加重要的是