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

📄 9311cfg.c

📁 详细介绍了arm7-at91r40008,的开发全过程
💻 C
📖 第 1 页 / 共 4 页
字号:
		{
			ErrorInfo(ROOTID, "串口2配置错误!使用默认端口配置...");
			return ;
		}
		SysCfg.PortAttr |= 0x02;
		
		if ((at91_pio_read (&PIO_DESC) & SW2_WH2) != SW2_WH2)
		{
			Usart1_init (US_CHRL_8 | US_PAR_NO | US_NBSTOP_1, DEFBAUD);
			PortInfo[1].Port = 2;
			PortInfo[1].Attr = MAINTSEC;
			PortInfo[1].RTSONDelay = 5;
			ErrorInfo(ROOTID, "串口2运行于:57600 bps");
			return ;
		}
		
	}				
	
	else if (Port->PortID == NET1)
	{
		if (SysCfg.PortAttr & 0x01)
			return ;
		number = 0;
		config = PORTCFG & 0x07;
		if (!((config == 0x00) && MyCfg.lan1))
		{
			ErrorInfo(ROOTID, "网口1配置错误!使用默认端口配置...");
			return ;
		}
		SysCfg.PortAttr |= 0x01;
		info.Baud = DEFBAUD;
		info.Ip = MyCfg.lan1_ip;
		info.SubnetMask = MyCfg.lan1_subnet_mask;
		info.DefGetway = MyCfg.def_gtwy_ip;

		if ((at91_pio_read (&PIO_DESC) & SW2_WH1) != SW2_WH1)
		{
			flag = TRUE;
			info.ServerPort = 8888;
		}
		else
			info.ServerPort = Port->ServerPort;
			
		#if	(DF9311_NET > 0)
		rc = InitNet(FALSE, &info, FALSE);
		ResetNet(0, FALSE);
		#endif
		
		if (!rc)
			ErrorInfo(ROOTID, "网口1初始化失败...");
		else
		{
			Usart0_init (US_CHRL_8 | US_PAR_NO | US_NBSTOP_1, DEFBAUD);
			
			sprintf(err, "网口1地址为:%d.%d.%d.%d", (info.Ip>>24), (info.Ip>>16)&0x00FF, (info.Ip>>8)&0x0000FF, info.Ip&0x000000FF);
			ErrorInfo(ROOTID, err);
			sprintf(err, "网口1掩码为:%d.%d.%d.%d", (info.SubnetMask>>24), (info.SubnetMask>>16)&0x00FF, (info.SubnetMask>>8)&0x0000FF, info.SubnetMask&0x000000FF);
			ErrorInfo(ROOTID, err);
			sprintf(err, "网口1网关为:%d.%d.%d.%d", (info.DefGetway>>24), (info.DefGetway>>16)&0x00FF, (info.DefGetway>>8)&0x0000FF, info.DefGetway&0x000000FF);
			ErrorInfo(ROOTID, err);
		}
	}
	else if (Port->PortID == NET2)
	{
		if (SysCfg.PortAttr & 0x02)
			return ;
		number = 1;
		config = PORTCFG & 0x70;
		if (!((config == 0x00) && MyCfg.lan2))
		{
			ErrorInfo(ROOTID, "网口2配置错误!使用默认端口配置...");
			return ;
		}
		SysCfg.PortAttr |= 0x02;
		info.Baud = DEFBAUD;
		info.Ip = MyCfg.lan2_ip;
		info.SubnetMask = MyCfg.lan2_subnet_mask;
		info.DefGetway = MyCfg.def_gtwy_ip;
		
		if ((at91_pio_read (&PIO_DESC) & SW2_WH2) != SW2_WH2)
		{
			flag = TRUE;
			info.ServerPort = 8888;
		}
		else
			info.ServerPort = Port->ServerPort;
		
		#if	(DF9311_NET > 0)
		rc = InitNet(TRUE, &info, FALSE);
		ResetNet(1, FALSE);
		#endif
		
		if (!rc)
			ErrorInfo(ROOTID, "网口2初始化失败...");
		else
		{
			Usart1_init (US_CHRL_8 | US_PAR_NO | US_NBSTOP_1, DEFBAUD);
			
			sprintf(err, "网口2地址为:%d.%d.%d.%d", (info.Ip>>24), (info.Ip>>16)&0x00FF, (info.Ip>>8)&0x0000FF, info.Ip&0x000000FF);
			ErrorInfo(ROOTID, err);
			sprintf(err, "网口2掩码为:%d.%d.%d.%d", (info.SubnetMask>>24), (info.SubnetMask>>16)&0x00FF, (info.SubnetMask>>8)&0x0000FF, info.SubnetMask&0x000000FF);
			ErrorInfo(ROOTID, err);
			sprintf(err, "网口2网关为:%d.%d.%d.%d", (info.DefGetway>>24), (info.DefGetway>>16)&0x00FF, (info.DefGetway>>8)&0x0000FF, info.DefGetway&0x000000FF);
			ErrorInfo(ROOTID, err);
		}
	}
	else 
		return ;
	

	//APP初始化
	PortInfo[number].Port = Port->PortID;
	if (flag)
		PortInfo[number].Attr = MAINTSEC;
	else
		PortInfo[number].Attr = Port->DriverID;
	PortInfo[number].RTSONDelay = Port->RTSONDelay;
	PortInfo[number].Medium = Port->Medium;

	
	if ((Port->PortID == NET1) || (Port->PortID == NET2))
		return ;

	// 串口初始化
	mode = 0;
	switch (Port->Mode)
	{
		case 0:
			mode &= (~US_SYNC);
			break;
		
		case 2:
			mode |= US_SYNC;
			break;
			
		default:
			break;
	}
	
	if (Port->Baud >= 12)
		baud = 57600;
	else
		baud = dd[Port->Baud];
	
	PortInfo[number].Baudrate = baud;
	
	switch (Port->CharSize)
	{
		case 5:
			mode |= US_CHRL_5;
			break;
		case 6:
			mode |= US_CHRL_6;
			break;
		case 7:
			mode |= US_CHRL_7;
			break;
		case 8:
			mode |= US_CHRL_8;
			break;			
		default:
			break;
	}	
		
	if (Port->Flags & 0x0002)
		mode |= US_NBSTOP_2;
	else
		mode |= US_NBSTOP_1;
	
	if (Port->Flags & 0x0004)
	{
		if (Port->Flags & 0x0008)
			mode |= US_PAR_ODD;
		else
			mode |= US_PAR_EVEN;
	}
	else
		mode |= US_PAR_NO;
	
	
	if (Port->PortID == PORT1)
	{
		sprintf(err, "串口1运行于:%d bps", baud);
		ErrorInfo(ROOTID, err);
		Usart0_init(mode, baud);
	}
	if (Port->PortID == PORT2)
	{
		sprintf(err, "串口2运行于:%d bps", baud);
		ErrorInfo(ROOTID, err);
		Usart1_init(mode, baud);
	}
		
}

/*------------------------------------------------------------------*/
/*函数名称:GetRealDBIndex()										*/
/*函数功能:获取在实际库索引号										*/
/*输入说明:i--实际库号;DevID--逻辑库序号							*/
/*输出说明:索引号,错误返回0xFFFF									*/
/*------------------------------------------------------------------*/
INT16U GetRealDBIndex(INT16U i, INT16U DevID)
{
	INT16U	rc;
	
	rc = 0;
	if (DBCfgs[i].Flag & FDBLOGUSE)
	{
		if (DBCfgs[i].Info.Real.LogDevID[rc] != DevID)
		{
			rc = 1;			
			if (DBCfgs[i].Flag & FDBLOG2USE)
			{
				if (DBCfgs[i].Info.Real.LogDevID[rc] != DevID)
				{
					ErrorInfo(ROOTID, "创建数据库失败673");
					return (0xFFFF);
				}
			}
			else
			{
				DBCfgs[i].Flag |= FDBLOG2USE;
				DBCfgs[i].Info.Real.LogDevID[rc] = DevID;
			}
		}
	}
	else
	{
		rc = 0;
		DBCfgs[i].Flag |= FDBLOGUSE;
		DBCfgs[i].Info.Real.LogDevID[rc] = DevID;
	}	
	
	return (rc);
}


/*------------------------------------------------------------------*/
/*函数名称:SetDefPort()											*/
/*函数功能:创建默认端口属性,均初始化为维护						*/
/*输入说明:														*/
/*输出说明:														*/
/*------------------------------------------------------------------*/
void SetDefPort(void)
{
	BOOL	rc;
	struct NetInfo	info;
	char	err[60];	

	if (!(SysCfg.PortAttr & 0x01))
	{
		SysCfg.PortAttr |= 0x01;
		
		PortInfo[0].Port = PORT1;
		PortInfo[0].Attr = MAINTSEC;
		PortInfo[0].RTSONDelay = 5;
		PortInfo[0].pPad = NULL;
		
		if (((PORTCFG & 0x07) == 0x02) || ((PORTCFG & 0x07) == 0x04))
		{
			Usart0_init (US_CHRL_8 | US_PAR_NO | US_NBSTOP_1, DEFBAUD);
			ErrorInfo(ROOTID, "串口1运行于:57600 bps");
		}
		else if ((PORTCFG & 0x07) == 0x00)
		{
			info.Baud = DEFBAUD;
			info.Ip = MyCfg.lan1_ip;
			info.SubnetMask = MyCfg.lan1_subnet_mask;
			info.DefGetway = MyCfg.def_gtwy_ip;
			info.ServerPort = 8888;
			
			#if (DF9311_NET > 0)
			rc = InitNet(FALSE, &info, FALSE);
			ResetNet(0, FALSE);
			#endif
			
			if (!rc)
				ErrorInfo(ROOTID, "网口1初始化失败...");
			else
			{
				Usart0_init (US_CHRL_8 | US_PAR_NO | US_NBSTOP_1, DEFBAUD);
			
				sprintf(err, "网口1地址为:%d.%d.%d.%d", (info.Ip>>24), (info.Ip>>16)&0x00FF, (info.Ip>>8)&0x0000FF, info.Ip&0x000000FF);
				ErrorInfo(ROOTID, err);
				sprintf(err, "网口1掩码为:%d.%d.%d.%d", (info.SubnetMask>>24), (info.SubnetMask>>16)&0x00FF, (info.SubnetMask>>8)&0x0000FF, info.SubnetMask&0x000000FF);
				ErrorInfo(ROOTID, err);
				sprintf(err, "网口1网关为:%d.%d.%d.%d", (info.DefGetway>>24), (info.DefGetway>>16)&0x00FF, (info.DefGetway>>8)&0x0000FF, info.DefGetway&0x000000FF);
				ErrorInfo(ROOTID, err);
			}
		}
	}

	if (!(SysCfg.PortAttr & 0x02))
	{	
		SysCfg.PortAttr |= 0x02;
		
		PortInfo[1].Port = PORT2;
		PortInfo[1].Attr = MAINTSEC;
		PortInfo[1].RTSONDelay = 5;
		PortInfo[1].pPad = NULL;
		
		if (((PORTCFG & 0x70) == 0x20) || ((PORTCFG & 0x70) == 0x40))
		{
			Usart1_init (US_CHRL_8 | US_PAR_NO | US_NBSTOP_1, DEFBAUD);
			ErrorInfo(ROOTID, "串口2运行于:57600 bps");
		}
		else if ((PORTCFG & 0x70) == 0x00)
		{
			info.Baud = DEFBAUD;
			info.Ip = MyCfg.lan2_ip;
			info.SubnetMask = MyCfg.lan2_subnet_mask;
			info.DefGetway = MyCfg.def_gtwy_ip;
			info.ServerPort = 8888;
			#if	(DF9311_NET > 0)
			rc = InitNet(TRUE, &info, FALSE);
			ResetNet(1, FALSE);
			#endif
			if (!rc)
				ErrorInfo(ROOTID, "网口2初始化失败...");
			else
			{
				Usart1_init (US_CHRL_8 | US_PAR_NO | US_NBSTOP_1, DEFBAUD);
			
				sprintf(err, "网口2地址为:%d.%d.%d.%d", (info.Ip>>24), (info.Ip>>16)&0x00FF, (info.Ip>>8)&0x0000FF, info.Ip&0x000000FF);
				ErrorInfo(ROOTID, err);
				sprintf(err, "网口2掩码为:%d.%d.%d.%d", (info.SubnetMask>>24), (info.SubnetMask>>16)&0x00FF, (info.SubnetMask>>8)&0x0000FF, info.SubnetMask&0x000000FF);
				ErrorInfo(ROOTID, err);
				sprintf(err, "网口2网关为:%d.%d.%d.%d", (info.DefGetway>>24), (info.DefGetway>>16)&0x00FF, (info.DefGetway>>8)&0x0000FF, info.DefGetway&0x000000FF);
				ErrorInfo(ROOTID, err);
			}
			
		}
	}
	
}

/*------------------------------------------------------------------*/
/*函数名称:GetYcPara()												*/
/*函数功能:获取遥测整定参数										*/
/*输入说明:														*/
/*输出说明:成功返回TRUE											*/
/*------------------------------------------------------------------*/
BOOL GetYcPara(INT16U Flag)
{
	BOOL	dd = FALSE;
	INT16U	rc, len, cyc, tt;
	struct FileInfo info;
	INT8U	buf[YCPARABUFLEN];
	
	SysCfg.ParaValid = FALSE;
	len = sizeof (struct YCPara_t);
	strcpy(info.Name, "ycpara.sys");
	info.Length = YCPARABUFLEN;
	rc = FRead(buf, 0x8000, YCPARABUFLEN, &info);
	if (rc != YCPARABUFLEN)
	{
		dd = TRUE;
		ReadEEprom(0x00, buf, YCPARABUFLEN);
	}
	else
	{
		if ((buf[0] == 0xFF) && (buf[1] == 0xFF) && (buf[2] == 0xFF))
		{
			dd = TRUE;
			ReadEEprom(0x00, buf, YCPARABUFLEN);	
		}
	}
		
	if (Flag == YCPARAINIT)
	{
		tt = 0;
		rc = (INT16U)buf[tt+len+1];
		rc = (rc<<8) & 0xFF00;
		rc += buf[tt+len];
		cyc = dnpcrc(&buf[tt], len);
		if (rc != cyc)
			return (FALSE);
		
		if (dd)	
			SetYcPara((struct YCPara_t*)buf);
		
		//同时默认读取正常整定值
		memcpy ((INT8U*)&YCPara, &buf[tt], len);
		SysCfg.ParaValid = TRUE;
		
		return (TRUE);	
	}
	
	if (Flag == YCPARANORMAL)
	{
		tt = 0;		
		rc = (INT16U)buf[tt+len+1];
		rc = (rc<<8) & 0xFF00;
		rc += buf[tt+len];
		cyc = dnpcrc(&buf[tt], len);

	}
	else if (Flag == YCPARAHIGH)
	{
		tt = len + 2;		
		rc = (INT16U)buf[tt+len+1];
		rc = (rc<<8) & 0xFF00;
		rc += buf[tt+len];
		cyc = dnpcrc(&buf[tt], len);
	}
	else if (Flag == YCPARALOW)
	{
		tt = len * 2 + 4;
		rc = (INT16U)buf[tt+len+1];
		rc = (rc<<8) & 0xFF00;
		rc += buf[tt+len];
		cyc = dnpcrc(&buf[tt], len);
	}
	else
		return (FALSE);	
		
	if (rc != cyc)
	{
		ReadEEprom(0x00, buf, YCPARABUFLEN);
		rc = (INT16U)buf[tt+len+1];
		rc = (rc<<8) & 0xFF00;
		rc += buf[tt+len];
		cyc = dnpcrc(&buf[tt], len);
		if (rc != cyc)
			return (FALSE);
	}
	
	memcpy ((INT8U*)&YCPara, &buf[tt], len);
	SysCfg.ParaValid = TRUE;
	
	return (TRUE);
}

/*------------------------------------------------------------------*/
/*函数名称:SetYcPara()												*/
/*函数功能:设置遥测整定参数										*/
/*输入说明:														*/
/*输出说明:成功返回TRUE											*/
/*------------------------------------------------------------------*/
BOOL SetYcPara(struct YCPara_t *Para)
{
	INT16U	rc, len, cyc;
	INT32U	tmp, temp;
	struct FileInfo info;
	struct YCPara_t *ptmp;
	INT8U	buf[YCPARABUFLEN];
	
	len = sizeof (struct YCPara_t);
	
	
	strcpy(info.Name, "ycpara.sys");
	info.Length = YCPARABUFLEN;
	rc = FRead(buf, 0x8000, YCPARABUFLEN, &info);
	if (rc != YCPARABUFLEN)
		ReadEEprom(0x00, buf, YCPARABUFLEN);
	
	if ((Para->Flag & YCPARANORMAL) == YCPARANORMAL)
	{
		ptmp = (struct YCPara_t*)buf;
		
		if ((Para->Flag & YCPARAZERO) == YCPARAZERO)
		{
			ptmp->Value[5] = Para->Value[5];
			ptmp->Value[15] = Para->Value[15];
		}
		else
		{
			tmp = ptmp[0].Value[5];
			temp = ptmp[0].Value[15];
			memcpy ((INT8U*)ptmp, (INT8U*)Para, len);
			ptmp->Value[5] = tmp;
			ptmp->Value[15] = temp;
		}
		cyc = dnpcrc((INT8U*)ptmp, len);
		memcpy ((INT8U*)(ptmp+1), (INT8U*)&cyc, 2);
	}
	else if ((Para->Flag & YCPARAHIGH) == YCPARAHIGH)
	{
		ptmp = (struct YCPara_t*)&buf[len+2];
		
		if ((Para->Flag & YCPARAZERO) == YCPARAZERO)
		{
			ptmp->Value[5] = Para->Value[5];
			ptmp->Value[15] = Para->Value[15];
		}
		else
		{
			tmp = ptmp[0].Value[5];
			temp = ptmp[0].Value[15];
			memcpy ((INT8U*)ptmp, (INT8U*)Para, len);
			ptmp->Value[5] = tmp;
			ptmp->Value[15] = temp;
		}
		cyc = dnpcrc((INT8U*)ptmp, len);
		memcpy ((INT8U*)(ptmp+1), (INT8U*)&cyc, 2);
	}
	else if ((Para->Flag & YCPARALOW) == YCPARALOW)
	{
		ptmp = (struct YCPara_t*)&buf[len*2+4];
		
		if ((Para->Flag & YCPARAZERO) == YCPARAZERO)
		{
			ptmp->Value[5] = Para->Value[5];
			ptmp->Value[15] = Para->Value[15];
		}
		else
		{
			tmp = ptmp[0].Value[5];
			temp = ptmp[0].Value[15];
			memcpy ((INT8U*)ptmp, (INT8U*)Para, len);
			ptmp->Value[5] = tmp;
			ptmp->Value[15] = temp;
		}
		cyc = dnpcrc((INT8U*)ptmp, len);
		memcpy ((INT8U*)(ptmp+1), (INT8U*)&cyc, 2);
	}
	else
		return (FALSE);
			
	WriteEEprom(0x00, buf, YCPARABUFLEN);
		
	rc = FWrite(buf, 0x8000, YCPARABUFLEN, &info);
	at91_irq_open ( WDI_ID, INTWATCHDOG, AIC_SRCTYPE_INT_EDGE_TRIGGERED, Tmr_TickISR );	

	if (rc != YCPARABUFLEN)
		return (FALSE);
	
	return (TRUE);

⌨️ 快捷键说明

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