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

📄 rtl8019.c

📁 RTL8019以太网开发板资料
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "main.h"
#include "arp.h"
#include "rtl8019.h"
#include "ip.h"
#include "rtl8019.h"

code UWORK8 TestLed_buf[5]={0xaa,0xaa,0x55,0x55,0x55}; 

/*********************************************************************
函数名:       UWORK8 If8019SendReady(void)
功能:         检测以太网是否发送准备好
输入:         串口有数据需要发送 
输出:         
返回:         OK, ERROR
日期:         2007/03/13
*********************************************************************/
UWORK8 If8019SendReady(void)
{
//    if(ARPFinishFlag && (FALSE == EthernetBuf0DataFlag))		//缓冲0有数据标志
    if(FALSE == EthernetBuf0DataFlag)		//缓冲0有数据标志
    {
        return OK;
    }
    else
    {
        return ERROR;
    }  
	     
}
/*********************************************************************
函数名:       void ConfigParameter(void)
功能:         配置参数
输入:         配置软件发送来的请求包 
输出:         根据命令输出数据
返回:         None
日期:         2007/01/20
*********************************************************************/
void ConfigParameter(void)
{
    if(0 == memcmp(&gstaRevEthernet.ucaPacket[UDP_DATA_START],&NetParameter.SeupHead_buf[0],32))	  //判断前导信号和标志信号
    {
        memcpy(&NetSend_buf[UDP_DATA_START],&NetParameter.SeupHead_buf[0],32);					  //前导和标志信号
        NetSend_buf[SAVE_OK] = 0;                                                          // 初始化保存成功 
        switch(gstaRevEthernet.ucaPacket[COMMAND_START_ADDR])		   //命令字节
        {
            case BROADCAST_SEARCH:                                                             // 广播搜索 
                NetSend_buf[COMMAND_START_ADDR] = REPLY_BROADCAST;                         // 回应广播信号
                memcpy(&NetSend_buf[EQUNAME_LEN],&NetParameter.Name_len, 27);  			// 名字,MAC,IP 
                DelayMs((TL0 & 0x07));                                                         // 随机延时,防止同时回应 
                UDPConfigSend(END_PARA);
                break;  

            case CONFIG_REQUEST: 
                //******************** 网口参数 **********************
                NetSend_buf[COMMAND_START_ADDR] = REPLY_CONFIG;                            // 配置请求回应 
                memcpy(&NetSend_buf[EQUNAME_LEN],&NetParameter.Name_len,108);
                               
                //********************* 统计数据 *************************
                ShowStatistic();
                UDPConfigSend(END_PARA);
                break;
                
            case SAVE_NET_CONFIG:                                                              // 保存配置 
                NetSend_buf[COMMAND_START_ADDR] = REPLY_SAVE_NETCONFIG;
                if(0 != memcmp(&NetParameter.Name_len,&gstaRevEthernet.ucaPacket[EQUNAME_LEN],(sizeof(Setup_Parameter) - 42)))  //比较接收的数据与本机的参数是否相等。
                {
                            // 将参数保存进FLASH                            
                    memcpy(&NetParameter.Name_len, &gstaRevEthernet.ucaPacket[EQUNAME_LEN], (sizeof(Setup_Parameter) - 42));
					FlashWriteData(NetParameter_Addr, &NetParameter.startFlag, sizeof(Setup_Parameter));						 //保存参数
					FlashWriteData(NetParameter_BakAddr, &NetParameter.startFlag, sizeof(Setup_Parameter));					 //保存到备份参数
                   if(0 != memcmp(&NetParameter.MAC_Local_buf[0],&gstaRevEthernet.ucaPacket[MAC_ADDR],MAC_LEN))			  //比较MAC
                  {
                        UDPConfigSend(END_PARA);                                // 改变了MAC,需要重新初始化以太网芯片 
                        DelayMs(10);                                            // 等待网络发送完 
                        InitPara();
                        InitSerial();
                        if(OK == RTL8019asInit())                          //初始化以太网芯片
                        {
                            ResetSystem();
                        }
                    }
                    else
                    {
                        UDPConfigSend(END_PARA);
                        InitPara(); 
                        InitSerial();
                    }
                    IPConflitTestFlag = TRUE;
                }
                else
                {
                    UDPConfigSend(END_PARA);
                }
                break;
            case REFLESH_STATISTIC:                                             // 刷新统计信息
                ShowStatistic();
                NetSend_buf[COMMAND_START_ADDR] = REPLY_FLESH;
                UDPConfigSend(END_PARA);
                break;
            case CLEAR_STATISTIC:                                               // 清零统计信息请求 
                memset(&gstUDPStatistics,0,sizeof(gstUDPStatistics));
                memset(&gstUARTStatistics,0,sizeof(gstUARTStatistics));
                NetSend_buf[COMMAND_START_ADDR] = REPLY_CLEAR_STATISTIC;
                UDPConfigSend(END_PARA);
                break;
            case RESET_SYSTEM:      //复位系统 
                ResetSystem(); 
                break;
            default:
                break;
        }  
    }
	else if(0 == memcmp(&gstaRevEthernet.ucaPacket[UDP_DATA_START],&TestLed_buf[0],5))	  //判断前导信号和标志信号
	{
//         SerialSendbuf(&gstaRevEthernet.ucaPacket[UDP_DATA_START],6);
		if(gstaRevEthernet.ucaPacket[UDP_DATA_START + 5] == 0x11)		//表示闪灯
		{
			Test_Flag = 0x11;
		}
		else 
		{
			Test_Flag = 0x00;
			TEST_LED = 1;		//关闭LED灯
		}
	}	
}
/*********************************************************************
函数名:       void InitPara(void)
功能:         初始化网络参数
输入:         系统启动或者参数改变时 
输出:         将IP,端口号等参数从flash中读出进行配置
返回:         none
日期:         2006/05/30
*********************************************************************/
void InitPara(void)
{
    memcpy(&MAC_Remote_buf[6],&NetParameter.MAC_Local_buf[0],MAC_LEN);			//把源本地MAC地址复制到发送MAC缓存中
    memcpy(&IPLocalAddress_buf[0],&NetParameter.IP_Local_buf[0],IP_LEN);       // 本地IP
    memcpy(&SubNetMask_buf[0],&NetParameter.SubMask_buf[0],IP_LEN);		  // 掩码 
    memcpy(&GateWay_buf[0],&NetParameter.Gateway[0],IP_LEN);			 // 默认网关
    memcpy(&ArpCache_Buf[0].ucaIP[0],&NetParameter.IP_Remote_buf[0],IP_LEN);			  // 远程IP1
    ArpCache_Buf[0].usRemotePort = NetParameter.Port_Remote;		 //远程端口号1
    ARPFinishFlag  = FALSE;
    EthernetLinkFlag = FALSE;
}
/*********************************************************************
函数名:       UWORK8 RTL8019asCheck(void)
功能:         诊断RTL8019AS
输入:         None 
输出:         None
返回:         OK, ERROR
日期:         2004/02/04
*********************************************************************/
UWORK8 RTL8019asCheck(void)
{
    UWORK8 ucValue,ucLoop;
    xdata UWORK8 ucaFIFO[8];

    Page0();                                                // 1. 诊断数据线路 
    EX0 = FALSE;      // 禁止外部中断0
    RTL8019asWrite(W0_RCR,0xe1);                              // 不接收广播和组播数据,接收错误包 
    RTL8019asWrite(W0_TCR,0xe7);                              // cable环回模式,CRC产生禁止
    RTL8019asWrite(W0_DCR,0xc0);                              // 8位DMA方式 

    SendDiagnoseData();                                         // 发送诊断数据 
    DelayMs(50);
    RTL8019asRead(RW0_ISR,ucValue);
    RTL8019asRead(RW0_CR,ucLoop);
    if((RW0_ISR_PTX | RW0_ISR_RXE) == ucValue)              // 发送完成,CRC错误 
    {
        for(ucLoop = 0; ucLoop < 8; ucLoop++)               // 读取FIFO中的8个数据 
        {
            RTL8019asRead(R0_FIFO,ucaFIFO[ucLoop]);
        }
    }
    else
    {
        return ERROR;
    }
    
    if((0xaa == ucaFIFO[0]) && (0xaa == ucaFIFO[1]) && (0x02 == ucaFIFO[2]) &&
       (0x02 == ucaFIFO[3]) && (0x02 == ucaFIFO[4]) && (0xaa == ucaFIFO[5]) &&
       (0xaa == ucaFIFO[6]) && (0xaa == ucaFIFO[7]))     
    {    
        Page0();

⌨️ 快捷键说明

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