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

📄 ade7758.c

📁 ADI公司的ADE7758全部使用原代码(包括校验)
💻 C
📖 第 1 页 / 共 5 页
字号:
		Write_Ade_Reg_Val();		
		AdeRead();
	}	
	else
	{
		get_ade_default_parm();
		Write_Ade_Reg_Val();		
		AdeRead();
		Burn_Ade_Parm();		
	}	
}				
void AdeEntCalibSt(void)
{
	Ade_Test=TRUE;
	boolAcCalstart=FALSE;
}	
void AdeEscCalibSt(void)
{
	WaitAcCalStart();
	Write_Energy_Cmd();
}
void Calib_UI_Gain_Sub(void)
{
	ClaerUI_Gain();
	ClaerUI_Os();
	ADEYSSUB();
	ReadVal_Rms();	
	GetUI_Rms_Test();
	MakeUI_Gain();	
	WriteUI_Gain();
	Burn_Ade_Parm();
}
void Get_Calib_UI_Os_TestVal_Sub(void)
{
	ClaerUI_Os();
	ADEYSSUB();	
	ReadVal_Rms();
	GetUI_Rms_Test();
}
void Get_Calib_UI_Os_MinVal_Sub(void)
{
	ClaerUI_Os();
	ADEYSSUB();	
	ReadVal_Rms();
	GetUI_Rms_Min();
}
void Calib_UI_Os_Sub(void)
{
	MakeUI_Os();
	WriteUI_Os();
	Burn_Ade_Parm();
}
void Calib_WATVA_Gain_Sub(void)
{
	setadereg2byte((uint16 *)&runaderegval.LINECYC_VAL_RW16U,0x800);
	ClearWatVa_Gain();
	ClearWatVarVa_Ph();
	ClearWat_Os();
	ClearVar_Os();			
	Write_Lcycle_Cmd();
	ADEYSSUB();	
	ADEYSSUB();		
	ReadVal_WatVarVa();			
	GetVal_WatVarVa_Test();
	MakeWatVa_Gain();
	WriteWatVa_Gain();
	Burn_Ade_Parm();			
}
void Calib_VAR_Gain_Sub(void)
{
	setadereg2byte((uint16 *)&runaderegval.LINECYC_VAL_RW16U,0x800);
	ClearVar_Gain();
	ClearWatVarVa_Ph();
	ClearWat_Os();
	ClearVar_Os();		
	Write_Lcycle_Cmd();
	ADEYSSUB();	
	ReadVal_WatVarVa();			
	GetVal_WatVarVa_Test();
	MakeVar_Gain();		
	WriteVar_Gain();
	Burn_Ade_Parm();			
}	
void Get_Calib_Ph_Os_TestVal_Sub(void)
{
	setadereg2byte((uint16 *)&runaderegval.LINECYC_VAL_RW16U,0x800);
	ClearWat_Os();
	ClearVar_Os();
	ClearWatVarVa_Ph();			
	Write_Lcycle_Cmd();
	ADEYSSUB();	
	ReadVal_WatVarVa();			
	GetVal_WatVarVa_Test();
}
void Get_Calib_Ph_Os_TestVal_PF05_Sub(void)
{
	setadereg2byte((uint16 *)&runaderegval.LINECYC_VAL_RW16U,0x800);	
	Write_Lcycle_Cmd();
	ADEYSSUB();	
	ReadVal_WatVarVa();			
	GetVal_WatVarVa_Test_PF05();			
}
void Calib_Ph_Os_Sub(void)
{
	MakePh_Os();		
	WriteWatVarVa_Ph();
	Burn_Ade_Parm();
}
void Get_Calib_WATVA_Os_TestVal_Sub(void)
{
	setadereg2byte((uint16 *)&runaderegval.LINECYC_VAL_RW16U,0x800);
	ClearWat_Os();
	Write_Lcycle_Cmd();
	ADEYSSUB();	
	ReadVal_WatVarVa();			
	GetVal_WatVarVa_Test();
}
void Get_Calib_WATVA_Os_TestVal_Min_Sub(void)
{
	setadereg2byte((uint16 *)&runaderegval.LINECYC_VAL_RW16U,0x4000);
	Write_Lcycle_Cmd();
	ADEYSSUB();	
	ReadVal_WatVarVa();			
	GetVal_WatVarVa_MIN();
}
void Calib_WATVA_Os_Sub(void)
{
	MakeWat_Os();		
	WriteWat_Os();
	Burn_Ade_Parm();	
}
void Get_Calib_VAR_Os_TestVal_Sub(void)
{
	setadereg2byte((uint16 *)&runaderegval.LINECYC_VAL_RW16U,0x800);
	ClearVar_Os();
	Write_Lcycle_Cmd();
	ADEYSSUB();	
	ReadVal_WatVarVa();			
	GetVal_WatVarVa_Test();
}
void Get_Calib_VAR_Os_TestVal_Min_Sub(void)
{
	setadereg2byte((uint16 *)&runaderegval.LINECYC_VAL_RW16U,0x4000);
	Write_Lcycle_Cmd();
	ADEYSSUB();	
	ReadVal_WatVarVa();			
	GetVal_WatVarVa_MIN();
}
void Calib_VAR_Os_Sub(void)
{
	MakeVar_Os();		
	WriteVar_Os();
	Burn_Ade_Parm();	
}				
//ADE7758校验
void ADE_Calib(void)
{	
	bool BurnStatus;
	if(CalibTypeR)//上行命令
	{
		switch(CalibTypeR)
		{
			case Make_UI_Gain://0x01 
			ClaerUI_Gain();
			ClaerUI_Os();
			ReadVal_Rms();
			GetUI_Rms_Test();
			MakeUI_Gain();
			break;			
			case GetUI_Val_Test_Os://0x02
			ClaerUI_Os();
			ReadVal_Rms();
			GetUI_Rms_Test();
			break;		
			case GetUI_Val_Min_Os://0x03
			ClaerUI_Os();
			ReadVal_Rms();
			GetUI_Rms_Min();
			MakeUI_Os();
			break;		
			case Make_WatVa_Gain://0x11
			setadereg2byte((uint16 *)&runaderegval.LINECYC_VAL_RW16U,0x800);
			ClearWatVa_Gain();
			ClearWatVarVa_Ph();
			ClearWat_Os();
			ClearVar_Os();			
			Write_Lcycle_Cmd();
			ReadVal_WatVarVa();			
			GetVal_WatVarVa_Test();
			MakeWatVa_Gain();			
			break;			
			case Make_Var_Gain://0x12
			setadereg2byte((uint16 *)&runaderegval.LINECYC_VAL_RW16U,0x800);
			ClearVar_Gain();
			ClearWatVarVa_Ph();
			ClearWat_Os();
			ClearVar_Os();		
			Write_Lcycle_Cmd();
			ReadVal_WatVarVa();			
			GetVal_WatVarVa_Test();
			MakeVar_Gain();		
			break;				
			case Get_WatOs_Ph_Val_Test://0x21
			setadereg2byte((uint16 *)&runaderegval.LINECYC_VAL_RW16U,0x800);
			ClearWat_Os();
			Write_Lcycle_Cmd();
			ReadVal_WatVarVa();			
			GetVal_WatVarVa_Test();
			break;						
			case Get_WatOs_Val_Min://0x22
			setadereg2byte((uint16 *)&runaderegval.LINECYC_VAL_RW16U,0x4000);
			ClearWat_Os();
			Write_Lcycle_Cmd();
			ReadVal_WatVarVa();			
			GetVal_WatVarVa_MIN();
			MakeWat_Os();		
			break;									
			case Get_VarOs_Val_Test://0x23
			setadereg2byte((uint16 *)&runaderegval.LINECYC_VAL_RW16U,0x800);
			ClearVar_Os();
			Write_Lcycle_Cmd();
			ReadVal_WatVarVa();			
			GetVal_WatVarVa_Test();
			break;						
			case Get_VarOs_Val_Min://0x24
			setadereg2byte((uint16 *)&runaderegval.LINECYC_VAL_RW16U,0x4000);			
			ClearVar_Os();
			Write_Lcycle_Cmd();
			ReadVal_WatVarVa();			
			GetVal_WatVarVa_MIN();
			MakeVar_Os();		
			break;				
			case Get_Lcycle_Val://0x30
			setadereg2byte((uint16 *)&runaderegval.LINECYC_VAL_RW16U,0x800);
			Write_Lcycle_Cmd();
			ReadVal_WatVarVa();			
			break;						
			case Get_Energy_Val://0x31
			Write_Energy_Cmd();
			ReadVal_WatVarVa();
			break;						
			case Get_UI_Val://0x32
			ReadVal_Rms();
			break;
			case Get_UI_Rms_Val://0x40		
			ReadVal_Rms();
			break;	
			case Get_Ade_Reg_Val://0x50
			AdeRead();
			break;						
			default:		
			break;
		}			
	}			
	if(CalibTypeW)//下行命令
	{
		switch(CalibTypeW)
		{
			case Write_UI_Gain:
			WriteUI_Gain();
			break;			
			case Write_UI_Os:
			WriteUI_Os();
			break;		
			case Write_WatVa_Gain:
			WriteWatVa_Gain();
			break;		
			case Write_Var_Gain:
			WriteVar_Gain();
			break;		
			case Write_Ph:
			WriteWatVarVa_Ph();
			break;
			case Write_WatVar_Os:
			WriteWatVar_Os();
			break;
			case Burn_AdeParm:
			BurnStatus=Burn_Ade_Parm();
			break;
			case CallInit:
			AdeInit();
			Write_Energy_Cmd();
			break;	
			case AdeCalibEnter:
			AdeEntCalibSt();
			break;	
			case AdeCalibEsc:
			Ade_Test=FALSE;	
			WaitAcCalStart();
			break;						
			default:
			break;			
		}
	}	
}			
void RunReadAde_Rms_Val(void)//运行状态下读取有效值
{
		booleint3=FALSE;
	//if(adermscnt==0x0b)
	//{
		ReadAde3byte(aderegaddr[AIRMS_R24U],(uint32 *)&(runaderegval.AIRMS_VAL_R24U));
		ReadAde3byte(aderegaddr[BIRMS_R24U],(uint32 *)&(runaderegval.BIRMS_VAL_R24U));
		ReadAde3byte(aderegaddr[CIRMS_R24U],(uint32 *)&(runaderegval.CIRMS_VAL_R24U));		
		ademeaval.MEA_IARMS=runaderegval.AIRMS_VAL_R24U;	
		ademeaval.MEA_IBRMS=runaderegval.BIRMS_VAL_R24U;	
		ademeaval.MEA_ICRMS=runaderegval.CIRMS_VAL_R24U;
/*
		data1=192147;//1921472;			
		tMeaVal.CI1=udiv32by32mea(data1,(ademeaval.MEA_IARMS)*778);//6500);
		tMeaVal.CI2=udiv32by32mea(data1,(ademeaval.MEA_IBRMS)*778);//6500);
		tMeaVal.CI3=udiv32by32mea(data1,(ademeaval.MEA_ICRMS)*778);//6500);
*/
		//return;
	//}
	//else if(adermscnt==0x0c)
	//{
		ReadAde3byte(aderegaddr[AVRMS_R24U],(uint32 *)&(runaderegval.AVRMS_VAL_R24U));
		ReadAde3byte(aderegaddr[BVRMS_R24U],(uint32 *)&(runaderegval.BVRMS_VAL_R24U));
		ReadAde3byte(aderegaddr[CVRMS_R24U],(uint32 *)&(runaderegval.CVRMS_VAL_R24U));
		ReadAde2byte(aderegaddr[FREQ_R12U],(uint16 *)&(runaderegval.FREQ_VAL_R12U));
		ademeaval.MEA_UARMS=runaderegval.AVRMS_VAL_R24U;	
		ademeaval.MEA_UBRMS=runaderegval.BVRMS_VAL_R24U;	
		ademeaval.MEA_UCRMS=runaderegval.CVRMS_VAL_R24U;	
		ademeaval.MEA_FREAQ=runaderegval.FREQ_VAL_R12U;		
/*
		data1=167821;
		tMeaVal.CU1=udiv32by32mea(data1,(ademeaval.MEA_UARMS)*1343);//1400);
		tMeaVal.CU2=udiv32by32mea(data1,(ademeaval.MEA_UBRMS)*1343);//1400);
		tMeaVal.CU3=udiv32by32mea(data1,(ademeaval.MEA_UCRMS)*1343);//1400);
		tMeaVal.CF=(ademeaval.MEA_FREAQ)*4096;		
		if(tMeaVal.CU1<=1000) tMeaVal.CF=0;
		freqvalue[freqnumcnt]=tMeaVal.CF;			
		freqcalcnt = freqnumcnt;
		data1=freqnumcnt;
		if(data1 >= 20) data1 -= 20;
		else{	data1 +=freqlgh -20; 
		}			
		freqracevalue[freqnumcnt]=tMeaVal.CF-freqvalue[data1];		
		freqnumcnt++;
		freqnumcnt &=freqnum;	
*/
		adermscnt=0;
		//return;
	//}			
	//else
		//return;
}
void RunReadAde_Hr_Val(void)//运行状态下读取能量
{			
	int32 temppqs;
	uint32 temppqu;
    ReadAde3byte(aderegaddr[RSTATUS_R24U],(uint32 *)&(runaderegval.RSTATUS_VAL_R24U));
	if(runaderegval.RSTATUS_VAL_R24U&0x01)
	{
		HrT0TCFI=T0TC;
	//if(adehrcnt==0x01)
	//{		
		eint3timer1=dTCounter-eint3timer;
		eint3timer2=eint3timer1*18432+T0TC;
		eint3timer=dTCounter;
		ademeaval.EINT3TIM=eint3timer1;		
		ReadAde2byte(aderegaddr[AWATTHR_R16S],(uint16 *)&(runaderegval.AWATTHR_VAL_R16S));
		ReadAde2byte(aderegaddr[BWATTHR_R16S],(uint16 *)&(runaderegval.BWATTHR_VAL_R16S));
		ReadAde2byte(aderegaddr[CWATTHR_R16S],(uint16 *)&(runaderegval.CWATTHR_VAL_R16S));
		ReadAde2byte(aderegaddr[AVARHR_R16S],(uint16 *)&(runaderegval.AVARHR_VAL_R16S));
		ReadAde2byte(aderegaddr[BVARHR_R16S],(uint16 *)&(runaderegval.BVARHR_VAL_R16S));
		ReadAde2byte(aderegaddr[CVARHR_R16S],(uint16 *)&(runaderegval.CVARHR_VAL_R16S));
	//	return;
	//}
	//else
	//{	
		ReadAde2byte(aderegaddr[AVAHR_R16U],(uint16 *)&(runaderegval.AVAHR_VAL_R16U));
		ReadAde2byte(aderegaddr[BVAHR_R16U],(uint16 *)&(runaderegval.BVAHR_VAL_R16U));
		ReadAde2byte(aderegaddr[CVAHR_R16U],(uint16 *)&(runaderegval.CVAHR_VAL_R16U));
    	ReadAde3byte(aderegaddr[RSTATUS_R24U],(uint32 *)&(runaderegval.RSTATUS_VAL_R24U));
		ademeaval.MEA_AWAT=(int16)runaderegval.AWATTHR_VAL_R16S;		
		ademeaval.MEA_BWAT=(int16)runaderegval.BWATTHR_VAL_R16S;
		ademeaval.MEA_CWAT=(int16)runaderegval.CWATTHR_VAL_R16S;
		ademeaval.MEA_AVAR=(int16)runaderegval.AVARHR_VAL_R16S;
		ademeaval.MEA_BVAR=(int16)runaderegval.BVARHR_VAL_R16S;
		ademeaval.MEA_CVAR=(int16)runaderegval.CVARHR_VAL_R16S;
		ademeaval.MEA_AVA=runaderegval.AVAHR_VAL_R16U;
		ademeaval.MEA_BVA=runaderegval.BVAHR_VAL_R16U;
		ademeaval.MEA_CVA=runaderegval.CVAHR_VAL_R16U;

		temppqs=ademeaval.MEA_AWAT;
		temppqs=temppqs+ademeaval.MEA_BWAT;
		temppqs=temppqs+ademeaval.MEA_CWAT;
		if(temppqs&0x8000000)
		{
			temppqu=0-temppqs;
			ademeaval.HR_P_exp=ademeaval.HR_P_exp+temppqu;
		}
		else ademeaval.HR_P_imp=ademeaval.HR_P_imp+temppqs;	
		temppqs=ademeaval.MEA_AVAR;
		temppqs=temppqs+ademeaval.MEA_BVAR;
		temppqs=temppqs+ademeaval.MEA_CVAR;
		if(temppqs&0x8000000)
		{
			temppqu=0-temppqs;
			ademeaval.HR_Q_exp=ademeaval.HR_Q_exp+temppqu;
		}
		else ademeaval.HR_Q_imp=ademeaval.HR_Q_imp+temppqs;						
		//ademeaval.MEA_AWATHR=ademeaval.MEA_AWATHR+ademeaval.MEA_AWAT;
		//ademeaval.MEA_BWATHR=ademeaval.MEA_BWATHR+ademeaval.MEA_BWAT;
		//ademeaval.MEA_CWATHR=ademeaval.MEA_CWATHR+ademeaval.MEA_CWAT;
		//ademeaval.MEA_AVARHR=ademeaval.MEA_AVARHR+ademeaval.MEA_AVAR;
		//ademeaval.MEA_BVARHR=ademeaval.MEA_BVARHR+ademeaval.MEA_BVAR;
		//ademeaval.MEA_CVARHR=ademeaval.MEA_CVARHR+ademeaval.MEA_CVAR;
		//ademeaval.MEA_AVAHR=ademeaval.MEA_AVAHR+ademeaval.MEA_AVA;
		//ademeaval.MEA_BVAHR=ademeaval.MEA_BVAHR+ademeaval.MEA_BVA;
		//ademeaval.MEA_CVAHR=ademeaval.MEA_CVAHR+ademeaval.MEA_CVA;
		eint3intcnt++;
/*
		data1=ademeaval.MEA_AWAT;
		data1=data1+ademeaval.MEA_BWAT;
		data1=data1+ademeaval.MEA_CWAT;
		data2=(int32)(data1*2341);
		data1=_div32by32(eint3timer1,data2);
		tMeaVal.CP=data1;
		data1=ademeaval.MEA_AVAR;
		data1=data1+ademeaval.MEA_BVAR;
		data1=data1+ademeaval.MEA_CVAR;
		data2=(int32)(data1*2341);

⌨️ 快捷键说明

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