导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[fn333]请教关于RTL8019AS方面的问题



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 ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:16毫秒 最大:2625毫秒 查询6次