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

📄 zlg85c30init.c

📁 z85c30 DRIVER RUN ON PC104 PC AND VXWORKS SYSTERM.
💻 C
字号:
#include "vxWorks.h"
#include "tyLib.h"
#include "logLib.h"
#include "Zlg85C30.h"
#include "stdio.h"

LOCAL void UsrPortParamsInit(void);
extern int  ComIntInit(int iPortNo,int dataport,unsigned long lBautrate,unsigned char intLevel);
struct PortSetTable portconfig[ComMaxUnit];

LOCAL int testPortMaxUnit=ComMaxUnit;
LOCAL int UsrPortTestRun=0;
LOCAL int RecvTaskId;
int UsrPortTestMode=0;

//struct SysCmdFormat_T usrPortParams[ComMaxUnit];

void UsrPortConfigInitDefault(void)
{
/*	
	char portName[10];
	int  unit;
	int  commandport;
	int  dataport;
	int  sync_async;  *==0:async; 1:sync ==*
	int  baudRate;
	int  clockType;   *==0:DPLL; 1:Iclock; 2:Oclock ==*
	int  stopBit;
	int  dataBit;
	int  checktype;   *==0:None; 1:ODD; 2:EVEN ==*
	int  intLevel;

	int  intNum;
	int  RevByteNum;
	int  SendByteNum;
*/
	int ifor1=0;

	//usrPortParams=(unsigned char *)malloc(sizeof(struct SysCmdFormat_T)*ComMaxUnit);
	for(ifor1=0;ifor1<ComMaxUnit;ifor1++)
	{
		if((ifor1+1)<10)
			sprintf(portconfig[ifor1].portName,"com0%d",ifor1+1);
		else
			sprintf(portconfig[ifor1].portName,"com%d",ifor1+1);
		portconfig[ifor1].unit=ifor1;
		portconfig[ifor1].open=0;
		portconfig[ifor1].sync_async=-1;
		portconfig[ifor1].baudRate=9600;
		portconfig[ifor1].clockType=1;
		portconfig[ifor1].stopBit=1;
		portconfig[ifor1].dataBit=8;
		portconfig[ifor1].checktype=0;
		portconfig[ifor1].flag=(Flag_Send_Enable | Flag_Rcev_Enable);
		portconfig[ifor1].intNum=0;
		portconfig[ifor1].RevByteNum=0;
		portconfig[ifor1].SendByteNum=0;
		portconfig[ifor1].RevFrameNum=0;
		portconfig[ifor1].SendFrameNum=0;
		portconfig[ifor1].RevFrameErrorNum=0;
//		portconfig[ifor1].pintVectorStatic=0;
	}


	portconfig[0].commandport=com1_commandport;
	portconfig[1].commandport=com2_commandport;
	portconfig[2].commandport=com3_commandport;
	portconfig[3].commandport=com4_commandport;
	portconfig[4].commandport=com5_commandport;
	portconfig[5].commandport=com6_commandport;
	portconfig[6].commandport=com7_commandport;
	portconfig[7].commandport=com8_commandport;
	portconfig[8].commandport=com9_commandport;
	portconfig[9].commandport=com10_commandport;
	portconfig[10].commandport=com11_commandport;
	portconfig[11].commandport=com12_commandport;

	portconfig[0].dataport=com1_dataport;
	portconfig[1].dataport=com2_dataport;
	portconfig[2].dataport=com3_dataport;
	portconfig[3].dataport=com4_dataport;
	portconfig[4].dataport=com5_dataport;
	portconfig[5].dataport=com6_dataport;
	portconfig[6].dataport=com7_dataport;
	portconfig[7].dataport=com8_dataport;
	portconfig[8].dataport=com9_dataport;
	portconfig[9].dataport=com10_dataport;
	portconfig[10].dataport=com11_dataport;
	portconfig[11].dataport=com12_dataport;
	portconfig[12].dataport=com13_dataport;
	portconfig[13].dataport=com14_dataport;

	portconfig[0].intLevel=5;
	portconfig[1].intLevel=5;
	portconfig[2].intLevel=7;
	portconfig[3].intLevel=7;
	portconfig[4].intLevel=9;
	portconfig[5].intLevel=9;
	portconfig[6].intLevel=10;
	portconfig[7].intLevel=10;
	portconfig[8].intLevel=11;
	portconfig[9].intLevel=11;
	portconfig[10].intLevel=6;
	portconfig[11].intLevel=6;
	portconfig[12].intLevel=4;
	portconfig[13].intLevel=3;

}

/*void ComChanInit(void)
{
	int iPortNo=0;
	for(iPortNo=0;iPortNo<ComMaxUnit;iPortNo++)
	{
		dataAddr[iPortNo]=portconfig[iPortNo].dataport;
		commandAddr[iPortNo]=portconfig[iPortNo].commandport;
	}
}*/

void UsrPortShow(void)
{
	int ifor1=0;
	char str[][10]={"index", "s/a", "Clk", "bps", "int", /*"intNum", */"RBNum", "SBNum", "F","RFrame","SFrame","CRCErro"};

	printf("%s %-3s %-3s %-6s %-3s %-8s %-8s %-2s %-8s %-8s %s\n",str[0],str[1],str[2],str[3],str[4],str[5],str[6],str[7],str[8],str[9],str[10]/*,str[11]*/);
	for(ifor1=0;ifor1<ComMaxUnit;ifor1++)
	{
		printf("%s",portconfig[ifor1].portName);
		printf(" %-3d",portconfig[ifor1].sync_async);
		printf(" %-3d",portconfig[ifor1].clockType);
		printf(" %-6d",portconfig[ifor1].baudRate);
		printf(" %-3d",portconfig[ifor1].intLevel);
		//printf(" %-6d",portconfig[ifor1].intNum);
		printf(" %-8d",portconfig[ifor1].RevByteNum);
		printf(" %-8d",portconfig[ifor1].SendByteNum);		
		printf(" %-2d",portsending[ifor1]);	
		printf(" %-8d",portconfig[ifor1].RevFrameNum);
		printf(" %-8d",portconfig[ifor1].SendFrameNum);		
		printf(" %-8d\n",portconfig[ifor1].RevFrameErrorNum);		
	}
}
/*
void UsrPortIntShow(int iPortNo)
{
	int ifor1=0;
	if(iPortNo>ComMaxUnit)return;
	printf("[UsrPort Debug] %dcom Store Intrrupt Vector Static %d:\n",iPortNo,portconfig[iPortNo].pintVectorStatic);
	for(ifor1=0;ifor1<portconfig[iPortNo].pintVectorStatic;ifor1++)
		printf("%3X",portconfig[iPortNo].intVectorStatic[ifor1]);
	printf("\n");
}
void UsrPortIntClear(int iPortNo)
{
	if(iPortNo>ComMaxUnit)return;
	portconfig[iPortNo].pintVectorStatic=0;
}
void UsrPortIntDebug(int iPortNo)
{
	int ifor1=0;
	for(ifor1=0;ifor1<3;)
	{
		if(comwrite(iPortNo,"1234567890",10)==10)ifor1++;
	}
	taskDelay(10);
	UsrPortIntShow(iPortNo);
	/ *UsrPortIntClear(iPortNo);* /
}*/
/********************************************
*
*
*
*********************************************/
LOCAL void UsrPortLoadConfigFile(int filestordev)
{
//	memset(usrPortParams,0,sizeof(usrPortParams));
	if(filestordev>=0)
	{		
		sys_readsysini(filestordev,"portconfig.txt");
	}
	UsrPortParamsInit();
}
/********************************************
*
struct PortSetTable
{
	char portName[10];
	int  unit;
	int  commandport;
	int  dataport;
	int  sync_async;//0:async; 1:sync
	//int  dltype;
	unsigned long baudRate;
	int  clockType; //0:DPLL; 1:Iclock; 2:Oclock;
	int  stopBit;
	int  dataBit;
	int  checktype; //0:None; 1:ODD; 2:EVEN
	unsigned char  intLevel;

	unsigned int  intNum;
	unsigned int  RevByteNum;
	unsigned int  RevFrameNum;
	unsigned int  SendByteNum;
	unsigned int  SendFrameNum;
	unsigned int  RevFrameErrorNum;
	int  open;

	unsigned char intVectorStatic[ComMaxData];
	unsigned int  pintVectorStatic;
};
*/
LOCAL void UsrPortParamsInit(void)
{
	int ifor2=0;
	int iPortNo=-1;
	struct SysParams_Table *temp;
	temp=sysParamsTable;

	while (temp!=NULL)
	{
		if(strlen(temp->cmd.Cmdname)<4) goto Jump;
		if(strncmp(temp->cmd.Cmdname,"COM",3)!=0) goto Jump;
		iPortNo=atoi(&temp->cmd.Cmdname[3])-1;
		if(iPortNo<0) goto Jump;
		if(iPortNo>=ComMaxUnit) goto Jump;

		for(ifor2=0;ifor2<Max_SysParams_Para_Unit;ifor2++)
		{
			if(strlen(temp->cmd.Para[ifor2].ParaName)<=0)break;
			if(strcmp(temp->cmd.Para[ifor2].ParaName,"mode")==0)
			{
				if(strcmp(temp->cmd.Para[ifor2].ParaValue,"sync")==0)
					portconfig[iPortNo].sync_async=1;
				else portconfig[iPortNo].sync_async=0;
			}
			else if(strcmp(temp->cmd.Para[ifor2].ParaName,"clocktype")==0)
			{
				if(strcmp(temp->cmd.Para[ifor2].ParaValue,"i")==0)
					portconfig[iPortNo].clockType=1;
				else if(strcmp(temp->cmd.Para[ifor2].ParaValue,"o")==0)
					portconfig[iPortNo].clockType=2;
				else
					portconfig[iPortNo].clockType=0;			
			}
			else if(strcmp(temp->cmd.Para[ifor2].ParaName,"baudrate")==0)
			{
				portconfig[iPortNo].baudRate=atoi(temp->cmd.Para[ifor2].ParaValue);
			}
			/*else if(strcmp(usrPortParams[ifor1].Para[ifor2].ParaName,"protocol")==0)
			{}
			else if(strcmp(usrPortParams[ifor1].Para[ifor2].ParaName,"adfTB")==0)
			{}
			else if(strcmp(usrPortParams[ifor1].Para[ifor2].ParaName,"adfSB")==0)
			{}*/
		}
Jump:		
		temp=temp->next;
	}
}

/*************************************************************
*
*
*
*/
void UsrPortInitial(void)
{
	int ifor1;
	printf("Zlg85C30 Port Initial :");
	UsrPortConfigInitDefault();

/****************************** Add read inifile to set parames */
	UsrPortLoadConfigFile(1);

/********* Open Zlg85C30 Serial Port *************/

	for(ifor1=0;ifor1<ComMaxUnit-2;ifor1++)
	{
		if(portconfig[ifor1].sync_async==-1)continue;
		if(portconfig[ifor1].open==1)continue;
		if(!(ifor1%2))
		{
			printf("hardreset port=%d %d\n",ifor1,ifor1+1);
			sysOutByte(portconfig[ifor1+1].commandport,0x09);
			sysOutByte(portconfig[ifor1+1].commandport,0xc0);        
		}
		if(portconfig[ifor1].sync_async==1)
			com_syncInitial(ifor1,portconfig[ifor1].commandport,portconfig[ifor1].dataport
							,portconfig[ifor1].baudRate,portconfig[ifor1].clockType);
		else
			com_asyncInitial(ifor1,portconfig[ifor1].commandport,portconfig[ifor1].dataport
							,portconfig[ifor1].baudRate);
		if(ifor1%2)
		{
			if(com_intConnect(ifor1,portconfig[ifor1].intLevel)==ERROR)
			{
				printf("intConnect %d error!!!!!!!!!!!!!!!!!!!\n",portconfig[ifor1].intLevel);
				continue;
			}
		}
		portconfig[ifor1].open=1;
	}
	if(portconfig[ifor1].sync_async!=-1)
	{
		ComIntInit(ifor1,portconfig[ifor1].dataport,portconfig[ifor1].baudRate,portconfig[ifor1].intLevel);
		portconfig[ifor1].open=1;
	}
	ifor1++;
	if(portconfig[ifor1].sync_async!=-1)
	{
		ComIntInit(ifor1,portconfig[ifor1].dataport,portconfig[ifor1].baudRate,portconfig[ifor1].intLevel);
		portconfig[ifor1].open=1;
	}

	taskDelay(3000);
}
/**********************************************************
*
*
*
***********************************************************/
void UsrPortTestTask(int type)
{
	int ifor1=0,ifor2=0;
	unsigned char buf[1000];
	int  buflen=0;
	char *sbuf="oooooooooKoooooooooKoooooooooKoooooooooKoooooooooKoooooooooKoooooooooKoooooooooKoooooooooKoooooooK\n";
	unsigned int n=0;
	FOREVER
	{
		for(ifor1=0;ifor1<testPortMaxUnit;ifor1++)
		{
			if(portconfig[ifor1].sync_async==-1)continue;
			if(portconfig[ifor1].open==0)continue;
			memset(buf,0,sizeof(buf));
			buflen=comread(ifor1,buf,1000,NO_WAIT);
			//if(ifor1==0)printf("%s",buf);

			if(!UsrPortTestRun)continue;
			if(type==1)
			{
				comwrite(ifor1,sbuf,strlen(sbuf));
			}
			else
			{
				if(buflen>0)
				{
					if(comwrite(ifor1,buf,buflen)!=buflen)printf("flow!\n");
				}
			}
		}

		if(n%3)
			taskDelay(500);
		n++;
	}
}


STATUS UsrPortTest(int type,int num)
{
	if(num==0)num=ComMaxUnit;
	if(num>ComMaxUnit||num<1)
	{
		printf("num need in<1 -- 10>\n");
		return ERROR;
	}
	testPortMaxUnit=num;
	UsrPortTestRun=1;
	UsrPortTestMode=type;
	/*test_port(6);*/
	if((RecvTaskId=taskSpawn("portTest",200,0,60000,(FUNCPTR)UsrPortTestTask,UsrPortTestMode,0,0,0,0,0,0,0,0,0))==ERROR)
	{
		UsrPortTestRun=0;
		printf("portTest task cannot be create.");
		return ERROR;
	}
	return OK;
}

void UsrPortStop(void)
{
	UsrPortTestRun=0;
}
void UsrPortRun(void)
{
	UsrPortTestRun=1;
}

void test_port(unsigned int d)
{
	sysOutByte(0x2d0,0xc);
	sysOutByte(0x2d0,d);
	sysOutByte(0x2d0,0xc);
	printf("WR12= %d\n",sysInByte(0x2d0));
}

⌨️ 快捷键说明

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