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

📄 rs232.c

📁 RTL8019以太网开发板资料
💻 C
📖 第 1 页 / 共 2 页
字号:
                                    ArpPhases = ARP_FIRST_REQUEST;  /* 没有ARP成功的或者已经老化IP可再次进行ARP */
                                }
                                break;

                            default:
                                ArpPhases = ARP_FIRST_REQUEST;
                                break;
                        }
                        break;

                    case 8:
                        StartTimer(ucTimerNum,200);                   /* 检测以太网的LINK状态 */
                        Page3();
                        RTL8019asRead(RW3_CONFIG0,ucResult);
                        Page0();
                        if((R3_CONFIG0_JP | R3_CONFIG0_BNC) == (ucResult & 0x0f))
                        {
                            if(TRUE == EthernetLinkFlag)
                            {
                                EthernetLinkFlag = FALSE;
                                for(ucValue = 0; ucValue < IpModeNum;ucValue++)
                                {
                                    ArpCache_Buf[ucValue].ucStatus = 'f';
                                }
                                ARPFinishFlag = FALSE;
                                
                                IPOrMacConfiltFlag = FALSE;		    /* 没有LINK时应该立即停止快闪(如果正在快闪) */
                                StopArpCounter();
                            }
                        }
                        else
                        {
                            if(FALSE == EthernetLinkFlag)
                            {
                                EthernetLinkFlag = TRUE;
                                IPConflitTestFlag = TRUE;
                                
                                ArpCachePoniter = 0;

                                if(IPConflitTestFlag)                   /* 刚LINK上,需要进行IP冲突检测 */
                                {
                                    StopArpCounter();
                                    ArpPhases = ARP_FIRST_REQUEST;
                            /* ARP条件: 静态IP模式*/
                                    memcpy(&IPAddress_buf[0],&NetParameter.IP_Local_buf[0],IP_LEN);
                                    memcpy(&SubNetMask_buf[0],&NetParameter.SubMask_buf[0],IP_LEN);
                                    memcpy(&GateWay_buf[0],&NetParameter.Gateway[0],IP_LEN);
                                    DelayMs(TL0 & 0x0f);              /* 取随机数避免2边同时发送,产生碰撞 */                                
                                    ArpRequest(&IPAddress_buf[0]);    /* 启动IP冲突检测 */                                    
                                    IpOrRouter();                                    
                                }
                            }
                        }
                        break;

                    case 9:
                        StartTimer(ucTimerNum,(rand() & 0x7ff +1000));     /* UART芯片保护校验 */                        
                                    /* Ethernet 芯片保护校验 */
                        Page2();
                        RTL8019asRead(R2_PSTART,ucResult);
                        RTL8019asRead(R2_PSTOP,ucValue);
                        RTL8019asRead(R2_RCR,ucValue1);
                        if((0x4c != ucResult) || (0x80 != ucValue) || (0xcc != ucValue1))
                        {    
                            RTL8019asInit();
                        }
                        else
                        {
                            RTL8019asRead(R2_TCR,ucResult);
                            RTL8019asRead(R2_DCR,ucValue);
                            RTL8019asRead(R2_IMR,ucValue1);
                            if((0xe0 != ucResult) || (0xd8 != ucValue) || (0x0f != (ucValue1 & 0x7f)))
                            {
                                RTL8019asInit();
                            }
                        }
                        Page0();
                        break;


                    case 12:                                /* IP冲突检测 */
                        StopTimer(ucTimerNum);
                        ucResult = (TL0 & 0x0f);
                        DelayMs(ucResult + 1);              /* 启动发送ARP包,取随机数避免2边同时发送,产生碰撞.加1是防止为0,意外停止定时器 */                                
                        StopArpCounter();
                        IPConflitTestFlag = TRUE;          /* 进行IP冲突检测 */
                        ArpRequest(&IPAddress_buf[0]);
                        break;

                    case 13:
                        StartTimer(ucTimerNum,3000);        /* 1分钟 */
						            if(++gusStopRun >= (6800 + (rand() & 0xff)))
						              {
                            memset(&gsaSystemTimer[0],0x00,sizeof(gsaSystemTimer));
                            EthernetLinkFlag = FALSE;
                            Led = OFF;
                            EA = FALSE;        //关闭中断总开关  
						               }
                        break;
                    case 11:
                        StopTimer(ucTimerNum);
                        break;                       

                    default:
                        break;
                }
            }
        }
    }
    
    ET0 = FALSE;    // 禁止timer0中断 
    gusMsTick = 0;
	  gbMSTick = FALSE;
    ET0 = TRUE;   // 使能timer0中断
}

/*********************************************************************
函数名:       UWORK8 StartTimer( UWORK8 ucTimer, UWORK16 usTimerValue )
功能:         启动相对定时器
输入:         ucTick 
输出:         None
返回:         TRUE or FALSE
日期:         2004/02/09
*********************************************************************/
UWORK8 StartTimer( UWORK8 ucTimer, UWORK16 usTimerValue )
{
    if( ucTimer >= 12 )
    {
        return ERROR;
    }
    gsaSystemTimer[ucTimer] = (usTimerValue << 1);
    return OK;
}
/*********************************************************************
函数名:       bit StopTimer( UWORK8 ucTimer )
功能:          停止相对定时器
输入:         ucTick 
输出:         None
返回:         TRUE or FALSE
日期:         2004/02/09
*********************************************************************/
bit StopTimer( UWORK8 ucTimer )
{
    if( ucTimer >= 12 )
    {
        return FALSE;
    }
    gsaSystemTimer[ucTimer] = 0;
    return TRUE;
}
/*********************************************************************
函数名:       Serial0_ISR()
功能:         串口0中断接收/发送数据程序
输入:         有字符从超级终端输入 
输出:         解释输入的字符
返回:         None
日期:         2004/02/09
*********************************************************************/
void Serial0_ISR() interrupt 4 using 1
{
    UWORK8 ucValue;
    if (TRUE == RI)                 
    {
        ucValue = SBUF;                                      /* 从串口0缓冲读一个字节 */
        RI = FALSE;      //清除串口接收中断标志 
		Rcv_flag = TRUE;
		Rcv_buf[RcvCount] = ucValue;
		RcvCount++;
		RcvLen = RcvCount;
		RcvDelayCount = 0;
    }
    else if(TRUE == TI)				//发送处理程序 */ 
    {        
        TI = FALSE;     // 清除串口发送中断标志                                    /* 清发送中断标志 */ 
    }
}

/*********************************************************************
函数名:       void SerialSendStart(UWORK8 *pucData,UWORK8 ucSendLen)
功能:         启动串口发送
输入:         向空调发送命令
参数:         发送数据指针;数据长度
输出:         启动串口发送数据
返回:         none
日期:         2007/01/26
*********************************************************************/
void SerialSendbuf(UWORK8 *pucData,UWORK16 ucSendLen)
{
    UWORK16 m; 
	ES = FALSE;  // 禁止串口中断
	Rs485En = TRUE;		//485通信使能
	for(m = 0; m < ucSendLen; m++)
	{
		TI = 0;
		SBUF = *pucData;
		while(TI == 0);
		pucData++;
		
	}
	Rs485En = FALSE;		//485通信使能
    ES = TRUE;       // 使能串口中断
}

/*********************************************************************
函数名:       ExInt0_ISR()
功能:         INT0中断服务程序
输入:         以太网芯片发出中断请求 
输出:         接收,发送数据
返回:         None
日期:         2004/08/18
*********************************************************************/
void ExInt0_ISR() interrupt 0 using 2
{
    UWORK8 ucValue,ucRtlCR;
    _nop_();
    _nop_();
    IE0 = FALSE;      // 清除外部中断0标志位
    RTL8019asRead(RW0_CR,ucRtlCR);                                      /* 保存CR */
    Page0();
    RTL8019asRead(RW0_ISR,ucValue);                                     /* 读取中断状态寄存器 */
    RTL8019asWrite(RW0_ISR,0xff);                                       /* 必须清除掉所有中断标志 */
    ucValue &= (RW0_ISR_TXE | RW0_ISR_RXE | RW0_ISR_PTX | RW0_ISR_PRX);   /* 发送完成,接收完成和发送错误,接收错误中断 */    

                                 /* 处理中断寄存器,在此不封装成一个函数,因为涉及到调用的花销以及指定寄存器组 */
   if(ucValue & RW0_ISR_PTX)                                          /* 数据包发送正确无误 */
    {
        EthernetBuf0DataFlag = 0;                                           // 清除缓冲0有数据标志 
    }
    
   if(ucValue & RW0_ISR_PRX)                                          /* 接收数据正确无误 */
    {
        RTL8019asRcvNum++;
    }
    
   if(ucValue & RW0_ISR_TXE)                                          /* 发送出现错误 */
    {
        EthernetBuf0DataFlag = 0;									//清除缓冲0有数据标志
    }                                                                   
    RTL8019asWrite(RW0_CR,ucRtlCR);                                     /* 处理中断结束,恢复CR*/
}

⌨️ 快捷键说明

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