⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtl8019.c

📁 RTL8019以太网开发板资料
💻 C
📖 第 1 页 / 共 2 页
字号:
        RTL8019asWrite(W0_RCR,0xcc);                          // 接收广播和组播数据 
        RTL8019asWrite(W0_TCR,0xe0);
        RTL8019asWrite(W0_DCR,0xd8);                          // 8位DMA方式 
        RTL8019asWrite(W0_RBCR0,0x00);
        RTL8019asWrite(W0_RBCR1,0x00);
        RTL8019asWrite(RW0_CR,0x22);                          // 网片开始工作 
        RTL8019asWrite(RW0_ISR,0xff);                         //清除所有中断 
        EX0 = TRUE;    // 外部中断0使能
        ET0 = FALSE;    // 禁止timer0中断 
        Ms10FlagCount = 0;
        ET0 = TRUE;   // 使能timer0中断
        return OK;
    }
    else
    {
        return ERROR;
    }
}
/*********************************************************************
函数名:       UWORK8 RTL8019asInit(void)
功能:         初始化RTL8019AS
输入:         None 
输出:         None
返回:         OK, ERROR
日期:         2004/02/04
*********************************************************************/
UWORK8 RTL8019asInit(void)
{
    xdata UWORK8 ucBNRY,ucLoop,ucLoop1;
    xdata UWORK8 ucMAR0,ucMAR1,ucMAR2,ucMAR3,ucMAR4,ucMAR5,ucMAR6,ucMAR7;    

    EX0 = FALSE;      // 禁止外部中断0
    RTL8019asReset();
    RTL8019asWrite(RW0_CR,0x21);                                        // 网卡停止运行 
    DelayMs(10);                                                      // 延时100ms,确保芯片进入停止模式 

    RTL8019asRead(R0_ID0,ucLoop);                                       // 读入芯片ID号 
    RTL8019asRead(R0_ID1,ucLoop1);
	
	if((RTL8019AS_ID0 != ucLoop) || (RTL8019AS_ID1 != ucLoop1))
    {
        return ERROR;
    }
    RTL8019asWrite(W0_DCR,0xd8);                                        // 8位DMA方式 
    RTL8019asWrite(W0_RBCR0,0x00);									  // 清零远程DMA读/写的字节数 
    RTL8019asWrite(W0_RBCR1,0x00);
    
     // 芯片处于监视和环回模式,跟外部网络断开 */
    RTL8019asWrite(W0_RCR,0xe0);                                        // 监视模式 
    RTL8019asWrite(W0_TCR,0xe2);                                        // 环回模式 

     // 使用0x40-0x4B为网卡的发送缓冲区,共12页,刚好可以存储2个最大的以太网包 
     // 使用0x4c~0x7f 为网卡的接收缓冲区共52 页 */
    RTL8019asWrite(W0_PSTART,0x4c);
    RTL8019asWrite(W0_PSTOP,0x80);
    RTL8019asWrite(RW0_BNRY,0x4c);                                      // 读页指针
     // 清除所用中断标志 
    RTL8019asWrite(RW0_ISR,0xff);                                       // 写1清零,上电必须清零 
    RTL8019asWrite(W0_IMR,RW0_ISR_TXE |RW0_ISR_RXE |
                        RW0_ISR_PTX | RW0_ISR_PRX);                   // 使能发送完成,发送出现错误,接收完成,接收出现错误中断    
    Page1();
    RTL8019asWrite(RW1_CURR,0x4d);                                      // 当前网卡正在写的页 

    RTL8019asWrite(RW1_MAR0,0x00);							   // 禁止组播 
    RTL8019asWrite(RW1_MAR1,0x00);
    RTL8019asWrite(RW1_MAR2,0x00);
    RTL8019asWrite(RW1_MAR3,0x00);
    RTL8019asWrite(RW1_MAR4,0x00);
    RTL8019asWrite(RW1_MAR5,0x00);
    RTL8019asWrite(RW1_MAR6,0x00);
    RTL8019asWrite(RW1_MAR7,0x00);
    
    RTL8019asWrite(RW1_PAR0,NetParameter.MAC_Local_buf[0]);				 // 初始化MAC 
    RTL8019asWrite(RW1_PAR1,NetParameter.MAC_Local_buf[1]);
    RTL8019asWrite(RW1_PAR2,NetParameter.MAC_Local_buf[2]);
    RTL8019asWrite(RW1_PAR3,NetParameter.MAC_Local_buf[3]);
    RTL8019asWrite(RW1_PAR4,NetParameter.MAC_Local_buf[4]);
    RTL8019asWrite(RW1_PAR5,NetParameter.MAC_Local_buf[5]);
    
    Page3();
    Rtl3ConfigEnable();                                               // page3配置使能 
    Rtl3IntEnable();                                                  // 中断引脚使能 
    Auto3DetectNMT();                                                 // 自动选择网络媒介类型 
    RTL8019asWrite(RW3_CONFIG2,0);
    RTL8019asWrite(RW3_CONFIG3,R3_CONFIG3_LEDS1|R3_CONFIG3_LEDS0);
    Rtl3ConfigDisable();                                              // page3配置禁止
    Page0();
	
	RTL8019asRead(RW0_BNRY,ucBNRY);					   // 读出部分值,比较写入的值来判断是否初始化成功
   
    Page1();
    RTL8019asRead(RW1_MAR0,ucMAR0);
    RTL8019asRead(RW1_MAR1,ucMAR1);
    RTL8019asRead(RW1_MAR2,ucMAR2);
    RTL8019asRead(RW1_MAR3,ucMAR3);
    RTL8019asRead(RW1_MAR4,ucMAR4);
    RTL8019asRead(RW1_MAR5,ucMAR5);
    RTL8019asRead(RW1_MAR6,ucMAR6);
    RTL8019asRead(RW1_MAR7,ucMAR7);

    StartTimer(0,100);                                                // 运行灯定时器,1秒钟闪烁 
    StartTimer(8,105);                                                // 检测以太网link与否 
    StartTimer(9,1000);                                               // 以太网芯片保护校验 

    if((0x4c == ucBNRY) && (0x00 == ucMAR0) && (0x00 == ucMAR1)
    && (0x00 == ucMAR2) && (0x00 == ucMAR3) && (0x00 == ucMAR4) 
    && (0x00 == ucMAR5) && (0x00 == ucMAR6) && (0x00 == ucMAR7))
    {      
        ArpRequestFormat.usHTYPE = HTYPE;		  //初始化ARP请求包
        ArpRequestFormat.usPTYPE = PTYPE;
        ArpRequestFormat.ucHLEN  = HLEN;
        ArpRequestFormat.ucPLEN  = PLEN;
        memcpy(&ArpRequestFormat.ucaSHA[0],&NetParameter.MAC_Local_buf[0],MAC_LEN);  // 源MAC地址 
        memset(&ArpRequestFormat.ucaTHA,0,MAC_LEN);                        // 目的MAC 

        ArpAnswerFormat.usHTYPE  = HTYPE;		 //初始化ARP应答包 
        ArpAnswerFormat.usPTYPE = PTYPE;
        ArpAnswerFormat.ucHLEN  = HLEN;
        ArpAnswerFormat.ucPLEN  = PLEN;
        ArpAnswerFormat.usOPER  = OPER_APLY;                                  // ARP应答 
        memcpy(&ArpAnswerFormat.ucaSHA[0],&NetParameter.MAC_Local_buf[0],MAC_LEN);      // 源MAC地址 

        gstIphead.ucVerAndLen = 0x45;			//初始化IP包
        gstIphead.ucDs = 0x00;
        gstIphead.usSegOffset = 0x00;
        gstIphead.ucTTL = 0x40;
        
        LocalIpID = rand();                                               // IP发送的16位标志,上电初始化为一个随机值

        Page0();														  // 将网片配置成正常工作模式
        RTL8019asWrite(W0_RCR,0xcc);                                      // 接收广播和组播数据
        RTL8019asWrite(W0_TCR,0xe0);
        RTL8019asWrite(W0_RBCR0,0x00);
        RTL8019asWrite(W0_RBCR1,0x00);
        RTL8019asWrite(RW0_CR,0x22);                                      // 网片开始工作
        RTL8019asWrite(RW0_ISR,0xff);                                     // 清除所有中断 
        EX0 = TRUE;    // 外部中断0使能                                   // 使能外部中断0
        IPOrMacConfiltFlag = FALSE; 
        EthernetLinkFlag = FALSE;
        IPConflitTestFlag = FALSE;
        return OK;
    }
    else
    {
        return ERROR;
    }
}
/*********************************************************************
函数名:       UWORK8 RTL8019asReset(void)
功能:         初始化RTL8019AS
输入:         None 
输出:         None
返回:         OK, ERROR
日期:         2004/02/04
*********************************************************************/
UWORK8 RTL8019asReset(void)
{
    RTL8019asResetFoot = 1;
    DelayMs(5);
    RTL8019asResetFoot = 0;
    return OK;
}
/*********************************************************************
函数名:       void ShowStatistic(void)
功能:         显示统计信息
输入:         配置软件发送统计请求
输出:         将统计信息发送出去
返回:         None
日期:         2005/07/05
*********************************************************************/
void ShowStatistic(void)
{
    memcpy(&NetSend_buf[RUN_DAYS],(UWORK8 *)&gusDate,2);	//运行天数
    NetSend_buf[RUN_HOURS] = gucHour;		 //运行小时数
    NetSend_buf[RUN_MINUTES] = gucMinute;	 //运行分钟数 
    NetSend_buf[RUN_SECONDS] = gucSecond;		//运行秒数
    memcpy(&NetSend_buf[UDP_RCV_BYTES],(UWORK8 *)&gstUDPStatistics.ulUDPReceiveDataNum,4);		//UDP接收字节数
    memcpy(&NetSend_buf[UDP_SEND_BYTES],(UWORK8 *)&gstUDPStatistics.ulUDPSendDataNum,4);		 //UDP发送字节数
    memcpy(&NetSend_buf[UART_RCV_BYTES],(UWORK8 *)&gstUARTStatistics.ulUARTReceiveDataNum,4);	  //串口接收字节数
    memcpy(&NetSend_buf[UART_SEND_BYTES],(UWORK8 *)&gstUARTStatistics.ulUARTSendDataNum,4);		  //串口发送字节数
    memcpy(&NetSend_buf[UART_RCV_SOFT_OVERFLOW],(UWORK8 *)&gstUARTStatistics.ulUARTRcvLackQueNum,4);	//串口接收软件溢出
    memcpy(&NetSend_buf[UART_SEND_SOFT_OVERFLOW],(UWORK8 *)&gstUARTStatistics.ulUARTSendLackQueNum,4);	 //串口发送软件溢出 
    memcpy(&NetSend_buf[HARD_SOFT_EIDTION],&NetParameter.VerCode_buf[0],VER_NUM);		   //软硬件版本号
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -