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

📄 leddim.c

📁 用keil C 写的读写CS5460及校准的程式
💻 C
📖 第 1 页 / 共 5 页
字号:
			if(((BYTE_P)&ReadPower)[1]&0x80)
			{
				ReadPower=0x00;
			}
	 		F_WriteCS5460(CMD_Write_Config_DRDY,0xff,0xff,0xff);   

			G_KWH_Power	=(C_Standard_Powr*ReadPower)/(G_Calibration_Max_Power);
			((BYTE_P)&G_KWH_Power)[0]=0x99;
//			User_RF_Send_ZW_Data(G_KWH_Power);
//			User_Heguijin_SEND("G_KWH_Power=",&G_KWH_Power,sizeof(G_KWH_Power));
//			User_Heguijin_SEND("KW_NOT_H_ReadPower=",&ReadPower,sizeof(ReadPower));
		}
}



/************************************************************/
/* Meter Report 3byte command class structs */              
/************************************************************/
//typedef struct _ZW_METER_REPORT_3BYTE_FRAME_
//{
 // BYTE      cmdClass;                     /* The command class */
//    BYTE      cmd;                          /* The command */
//    BYTE      meterType;                    /**/
//    BYTE      properties1;                  /* masked byte */
//    BYTE      meterValue1;                  /* MSB */
//    BYTE      meterValue2;                  
//    BYTE      meterValue3;                  /* LSB */
//} ZW_METER_REPORT_3BYTE_FRAME;

BYTE  User_Read_Power_Value()   // read ok is 1,fial 0
{
	BYTE  Data_H,Data_M,Data_L;
			DWORD ReadPower ;
			DWORD ReadPower1 ;

		if(Wait_DRDY_High())
		{
			ReadPower1=0x89123456;	
			//	F_WriteCS5460(0x40,0x01,0x01,0x01);
			F_ReadCS5460(Command_Read_Power,&((BYTE_P)&ReadPower1)[1],&((BYTE_P)&ReadPower1)[2],&((BYTE_P)&ReadPower1)[3]);    	// Command_Read_Power Read Power Value
			if(((BYTE_P)&ReadPower1)[1]&0x80)
			{
				ReadPower=0x00;
			}

			//	F_WriteCS5460(CMD_Write_Config_DRDY,0xff,0xff,0xff);   
			//	ReadPower1=0x12345678;

	//		F_ReadCS5460(CMD_Read_Config_DRDY,&((BYTE_P)&ReadPower)[1],&((BYTE_P)&ReadPower)[2],&((BYTE_P)&ReadPower)[3]);   	 // Command_Read_Power Read Power Value
	//		F_WriteCS5460(CMD_Write_Config_DRDY,((BYTE_P)&ReadPower)[1],((BYTE_P)&ReadPower)[2],((BYTE_P)&ReadPower)[3]);    		// Command_Read_Power Read Power Value

	 		F_WriteCS5460(CMD_Write_Config_DRDY,0xff,0xff,0xff);   
			User_RF_Send_ZW_Data(ReadPower1);
			return 1;
		}
		else
		{
			return 0;
		}
}


BYTE Wait_DRDY_High()    // success i,fial 0
	{
		DWORD ReadPower;
		F_ReadCS5460(CMD_Read_Config_DRDY,&((BYTE_P)&ReadPower)[1],&((BYTE_P)&ReadPower)[2],&((BYTE_P)&ReadPower)[3]);    // Command_Read_Power Read Power Value
//		User_RF_Send_ZW_Data(ReadPower);
		User_Heguijin_SEND("Calibration:CMD_Read_Config_DRDY=",(BYTE_P)&ReadPower,sizeof(ReadPower));
		
			
		if(((BYTE_P)&ReadPower)[1]&C_Bit_DRDY)   
		{
//			F_WriteCS5460(CMD_Write_Config_DRDY,((BYTE_P)&ReadPower)[1],((BYTE_P)&ReadPower)[2],((BYTE_P)&ReadPower)[3]);    		// Command_Read_Power Read Power Value
			return 1;
		}
		else
		{
			return(0);
		}
	}

void F_Enter_Calibrate_Task()
{
	if(Calibration_Task_Mode==0)
	{

		CS5460_Reset();
		F_SYNC_COMMAND();
		F_WriteCS5460(Command_Write_Confgig_R,0x01,0x00,0x01);   
		
		ZW_UART_SEND_STRING("Enter calibrate Mode  \n");
		statusLED = 1;
		F_WriteCS5460(CMD_Write_Config_DRDY,0xff,0xff,0xff);   
		F_Write_CMD_CS5460(0xA0);   // Halt   
		Relay_1;
		T_Calibration_Cnt=0;
		Calibration_Task_Mode=1;
	}
	else if(Calibration_Task_Mode==1)
	{
		Relay_1 ;
		ZW_UART_SEND_STRING("Prepare calibrate Command  \n");
	 	F_WriteCS5460(CMD_Write_Config_DRDY,0xff,0xff,0xff);   
		F_Write_CMD_CS5460(C_CMD_Calibration);
		Calibration_Task_Mode=2;
	}
	else if(Calibration_Task_Mode==2)
	{
		Relay_1 ;
		if(T_Calibration_Cnt++==10)
		{	
			if(Wait_DRDY_High())
			{
				User_Calibration_Read_Save_IgnVgn();	
				Calibration_Task_Mode=3;
				T_Calibration_Cnt=0;
			}
			
		}	
	}
	else if(Calibration_Task_Mode==3)
	{
			Relay_1 ;
			ZW_UART_SEND_STRING("  Reading AD form CS5460  \n");
			if(F_Read_Calibration_Power())
			{
				
				if(T_Calibration_Cnt++==15)	
				{
					statusLED = 0xff;
					ZW_UART_SEND_STRING("  Reading AD form CS5460 and write to Eeprom Completed !  \n");
					LED_ON(2);
					Calibration_Task_Mode=4;
					Relay_0;
					if (LedTimerPollHandle)
					{
						ZW_TIMER_CANCEL(LedTimerPollHandle);
						LedTimerPollHandle = 0;
					}	
				}
			}
	}	
}

void  User_Calibration_Read_Save_IgnVgn()
{
	DWORD  Test_Temp=0;
	DWORD  Test_Temp_1=0;
	DWORD   ReadPower=0;

	ZW_UART_SEND_STRING("Reading Calibrate Ign and Vgn  \n");
	
	F_ReadCS5460(Command_ReadCalib_Lgn,&((BYTE_P)&G_Calibration_Max_Ign)[1],&((BYTE_P)&G_Calibration_Max_Ign)[2],&((BYTE_P)&G_Calibration_Max_Ign)[3]);   
	F_ReadCS5460(Command_ReadCalib_Vgn,&((BYTE_P)&G_Calibration_Max_Vgn)[1],&((BYTE_P)&G_Calibration_Max_Vgn)[2],&((BYTE_P)&G_Calibration_Max_Vgn)[3]);   

	User_Heguijin_SEND("Read_Calibration_From_CS5460_G_Calibration_Max_Ign=",(BYTE_P)&G_Calibration_Max_Ign,sizeof(G_Calibration_Max_Ign));
	User_Heguijin_SEND("Read_Calibration_From_CS5460_G_Calibration_Max_Vgn=",(BYTE_P)&G_Calibration_Max_Vgn,sizeof(G_Calibration_Max_Vgn));


	ZW_MEM_PUT_BUFFER_NO_CB(C_FlashAddr_Calibration_Ign,&G_Calibration_Max_Ign,sizeof(G_Calibration_Max_Ign));  
	ZW_MEM_PUT_BUFFER_NO_CB(C_FlashAddr_Calibration_Vgn,& G_Calibration_Max_Vgn,sizeof(G_Calibration_Max_Vgn));

	ZW_MEM_GET_BUFFER(C_FlashAddr_Calibration_Ign,&G_Calibration_Max_Ign,sizeof(G_Calibration_Max_Ign));  
	ZW_MEM_GET_BUFFER(C_FlashAddr_Calibration_Vgn,& G_Calibration_Max_Vgn,sizeof(G_Calibration_Max_Vgn));


	User_Heguijin_SEND("Read_cali_Mode_From_Eeprom_G_Calibration_Max_Ign=",(BYTE_P)&G_Calibration_Max_Ign,sizeof(G_Calibration_Max_Ign));
	User_Heguijin_SEND("Read_cali_Mode_From_Eeprom_G_Calibration_Max_Vgn=",(BYTE_P)&G_Calibration_Max_Vgn,sizeof(G_Calibration_Max_Vgn));


//	F_WriteCS5460(Command_WriteCalib_Lgn,((BYTE_P)&G_Calibration_Max_Ign)[1],((BYTE_P)&G_Calibration_Max_Ign)[2],((BYTE_P)&G_Calibration_Max_Ign)[3]);   
//	F_WriteCS5460(Command_WriteCalib_Vgn,((BYTE_P)&G_Calibration_Max_Vgn)[1],((BYTE_P)&G_Calibration_Max_Vgn)[2],((BYTE_P)&G_Calibration_Max_Vgn)[3]);   
//	F_ReadCS5460(CMD_Read_Config_DRDY,&((BYTE_P)&ReadPower)[1],&((BYTE_P)&ReadPower)[2],&((BYTE_P)&ReadPower)[3]);    // Command_Read_Power Read Power Value
//	F_WriteCS5460(CMD_Write_Config_DRDY,((BYTE_P)&ReadPower)[1],((BYTE_P)&ReadPower)[2],((BYTE_P)&ReadPower)[3]);    // Command_Read_Power Read Power Value


	ZW_UART_SEND_STRING(" CS5460 Vgn and Ign Rewritting  \n");

	User_Ign_Vgn_ReloadFromandRewriteToCS5460();

	ZW_UART_SEND_STRING(" CS5460 configration completed  \n");
		
	F_WriteCS5460(CMD_Write_Config_DRDY,0xff,0xff,0xff);   
	F_Write_CMD_CS5460(CMD_Start_ADC);
	ZW_UART_SEND_STRING(" Sended Start_ADC Command  done and prepare to Read KW AD\n");

//	ZW_TIMER_START(User_Read_Power_Value, 100, TIMER_FOREVER);

/*
	ZW_MEM_GET_BUFFER(C_FlashAddr_Calibration_Power,&Test_Temp,sizeof(Test_Temp));
	if(Test_Temp_1==G_Calibration_Max_Vgn)
	{
		User_RF_Send_ZW_Data(Test_Temp);
		LED_ON(2);
	}
	else
	{
		User_RF_Send_ZW_Data(G_Calibration_Max_Vgn);
		LED_OFF(2);
	}	
*/	


}

BYTE  F_Read_Calibration_Power()
{
	       DWORD   ReadPower;
		if(Wait_DRDY_High())
		{
			G_Calibration_Max_Power=0;
			F_ReadCS5460(Command_Read_Power,&((BYTE_P)&G_Calibration_Max_Power)[1],&((BYTE_P)&G_Calibration_Max_Power)[2],&((BYTE_P)&G_Calibration_Max_Power)[3]);   
			ZW_MEM_PUT_BUFFER_NO_CB(C_FlashAddr_Calibration_Power, &G_Calibration_Max_Power,sizeof(G_Calibration_Max_Power)); 

			F_WriteCS5460(CMD_Write_Config_DRDY,0xff,0xff,0xff);   

			ZW_MEM_PUT_BYTE(C_FlashAddr_Calibration_OK,C_Calibration_Flag);   // Marked that it have calibrated.

			User_RF_Send_ZW_Data(G_Calibration_Max_Power);

			User_Heguijin_SEND(" Mode Calbraion G_Calibration_Max_Power=",(BYTE_P)&G_Calibration_Max_Power,sizeof(G_Calibration_Max_Power));

//			Relay_0;
			Relay_1 ;
			return 1;
			
		}
		else
		{
			return 0;
		}
}

void  User_Load_CS5460_Configraiton()
{
	DWORD Test_Temp;

	if(ZW_MEM_GET_BYTE(C_FlashAddr_Calibration_OK)==C_Calibration_Flag  )
	{
		ZW_UART_SEND_STRING("Enter User Load CS5460 Configration \n");

		User_Ign_Vgn_ReloadFromandRewriteToCS5460();
		ZW_UART_SEND_STRING(" Load Ign and Vgn completed  \n");
		
//-----------------------------------------------------------------------------------------------------------

//		ZW_MEM_GET_BUFFER(C_FlashAddr_Calibration_Power,&Test_Temp,sizeof(Test_Temp));
		User_RF_Send_ZW_Data(G_Calibration_Max_Power);

		if(G_Calibration_Max_Power==0)
		G_Calibration_Max_Power=0x26ff85;
		
//			G_Calibration_Max_Vgn=0x88345678;
//			F_ReadCS5460(Command_ReadCalib_Vgn,&((BYTE_P)&G_Calibration_Max_Vgn)[1],&((BYTE_P)&G_Calibration_Max_Vgn)[2],&((BYTE_P)&G_Calibration_Max_Vgn)[3]);   
//			User_RF_Send_ZW_Data(G_Calibration_Max_Vgn);

//			G_Calibration_Max_Ign=0x88123456;
//			F_ReadCS5460(Command_ReadCalib_Lgn,&((BYTE_P)&G_Calibration_Max_Ign)[1],&((BYTE_P)&G_Calibration_Max_Ign)[2],&((BYTE_P)&G_Calibration_Max_Ign)[3]);   
//			User_RF_Send_ZW_Data(G_Calibration_Max_Ign);
	}
	else
	{
		ZW_UART_SEND_STRING(" CS5460 Not Calibrate \n");
		G_Calibration_Max_Power=0x26ff85;
	}
	
}

/*
			txBuf.ZW_MeterReport8byteFrame.cmdClass = COMMAND_CLASS_METER ;
			txBuf.ZW_MeterReport8byteFrame.cmd = 		METER_REPORT;
			txBuf.ZW_MeterReport8byteFrame.meterType    =  0x01;
			txBuf.ZW_MeterReport8byteFrame.properties1   =  0x64 ;  // Precision=3 bit,scale = 2 bit 00,size =3 bit =0x02


			txBuf.ZW_MeterReport8byteFrame.meterValue1 =   8;
			txBuf.ZW_MeterReport8byteFrame.meterValue2 = 8;  // ((BYTE_P)&G_KWH_Power)[2];
			txBuf.ZW_MeterReport8byteFrame.meterValue3 = G_TEST ;  //((BYTE_P)&G_KWH_Power)[1];
			txBuf.ZW_MeterReport8byteFrame.meterValue4 =  8 ;   //  ((BYTE_P)&G_KWH_Power)[0];

			txBuf.ZW_MeterReport8byteFrame.meterValue1 =   ((BYTE_P)&G_Last_Power_Value)[3];
			txBuf.ZW_MeterReport8byteFrame.meterValue2 =   ((BYTE_P)&G_Last_Power_Value)[2];
			txBuf.ZW_MeterReport8byteFrame.meterValue3 =   ((BYTE_P)&G_Last_Power_Value)[1];
			txBuf.ZW_MeterReport8byteFrame.meterValue4 =   ((BYTE_P)&G_Last_Power_Value)[0];
			
			ZW_SEND_DATA(NODE_BROADCAST, (BYTE *)&txBuf, sizeof(txBuf.ZW_MeterReport8byteFrame), TRANSMIT_OPTION_NO_ROUTE, NULL);
*/

void   User_Ign_Vgn_ReloadFromandRewriteToCS5460()
{
		CS5460_Reset();
		F_SYNC_COMMAND();
		F_WriteCS5460(Command_Write_Confgig_R,0x01,0x00,0x01);   

		ZW_UART_SEND_STRING(" CS5460 Reset done  \n");
		ZW_MEM_GET_BUFFER(C_FlashAddr_Calibration_Power, &G_Calibration_Max_Power,sizeof(G_Calibration_Max_Power)); 
		ZW_MEM_GET_BUFFER(C_FlashAddr_Calibration_Ign,&G_Calibration_Max_Ign,sizeof(G_Calibration_Max_Ign));  
		ZW_MEM_GET_BUFFER(C_FlashAddr_Calibration_Vgn,& G_Calibration_Max_Vgn,sizeof(G_Calibration_Max_Vgn));

		User_Heguijin_SEND("Read_From_Eeprom_G_Calibration_Max_Power=",(BYTE_P)&G_Calibration_Max_Power,sizeof(G_Calibration_Max_Power));
		User_Heguijin_SEND("Read_From_Eeprom_G_Calibration_Max_Ign=",(BYTE_P)&G_Calibration_Max_Ign,sizeof(G_Calibration_Max_Ign));
		User_Heguijin_SEND("Read_From_Eeprom_G_Calibration_Max_Vgn=",(BYTE_P)&G_Calibration_Max_Vgn,sizeof(G_Calibration_Max_Vgn));


		F_WriteCS5460(Command_WriteCalib_Lgn,((BYTE_P)&G_Calibration_Max_Ign)[1],((BYTE_P)&G_Calibration_Max_Ign)[2],((BYTE_P)&G_Calibration_Max_Ign)[3]);   
		F_WriteCS5460(Command_WriteCalib_Vgn,((BYTE_P)&G_Calibration_Max_Vgn)[1],((BYTE_P)&G_Calibration_Max_Vgn)[2],((BYTE_P)&G_Calibration_Max_Vgn)[3]);   

		F_ReadCS5460(Command_ReadCalib_Lgn,&((BYTE_P)&G_Calibration_Max_Ign)[1],&((BYTE_P)&G_Calibration_Max_Ign)[2],&((BYTE_P)&G_Calibration_Max_Ign)[3]);   
		F_ReadCS5460(Command_ReadCalib_Vgn,&((BYTE_P)&G_Calibration_Max_Vgn)[1],&((BYTE_P)&G_Calibration_Max_Vgn)[2],&((BYTE_P)&G_Calibration_Max_Vgn)[3]);   

		User_Heguijin_SEND("Read_From_CS5460_G_Calibration_Max_Ign=",(BYTE_P)&G_Calibration_Max_Ign,sizeof(G_Calibration_Max_Ign));
		User_Heguijin_SEND("Read_From_CS5460_G_Calibration_Max_Vgn=",(BYTE_P)&G_Calibration_Max_Vgn,sizeof(G_Calibration_Max_Vgn));
}

void	Write8BitData(BYTE  WrDataBuff)
{
		int i;
		for(i=0;i<8;i++)
		{
			if(WrDataBuff&0x80)
				SET_1(P_MOSI);    //  P_MOSI=1;
			else
				SET_0(P_MOSI) ;   // P_MOSI=0;
				
			CLK_UPandDown();	
			WrDataBuff<<=1;
		}
		
		delay(30);
}

void	Read8BitData( BYTE_P pWrDataBuff)
{
		int i;
		
		BYTE  Rx_Temp=0;
			
		SET_1(P_MOSI) ;					//CS5460A SPI's SDI=1  
		
		for(i=0;i<8;i++)
		{ 
		  	Rx_Temp<<=1;		
			if(PIN_GET(P_MISO)!=0)
			{		
		
				Rx_Temp|=1;
			}
			
			CLK_DownandUP();	
		}
		delay(30);	
		*pWrDataBuff=Rx_Temp;
}


/*
void	Read8BitData( BYTE_P pWrDataBuff)
{
		int i;
		*pWrDataBuff=0;
		
		SET_1(P_MOSI) ;					//CS5460A SPI's SDI=1  
		
		for(i=0;i<8;i++)
		{ 
		  	*pWrDataBuff<<=1;		
//			if(MISO==1)
			if(PIN_GET(P_MISO)!=0)
			{		
		
				*pWrDataBuff|=1;
			}
			
//			CLK_DownandUP();	
			DELAY_US();
			SET_0(P_SCK);	
			DELAY_US();
			
			if(i==6)
			{
				SET_0(P_MOSI) ;	
			}
			
			SET_1(P_SCK);	
			DELAY_US();			
		}
		delay(30);		
}
*/



void F_WriteCS5460(BYTE Command,BYTE Data_H,BYTE Data_M,BYTE Data_L)
{
	SET_0(P_SCK);	
	SET_0

⌨️ 快捷键说明

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