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

📄 operateeeprom.c

📁 2808单相全桥spwm逆变工程.rar
💻 C
字号:
#include "DSP280x_Device.h"     // DSP280x Headerfile Include File
#include "DSP280x_Examples.h"   // DSP280x Examples Include File

#include "CommonDefine.h"



void UserDelay(Uint16 Counter)
{
	Uint16 i;
	for(i=0;i<Counter;i++)
		asm("          NOP");

}



void StartEEPRom(void)
{

	SetEESDA;
	UserDelay(50);  // 1=10ns
	SetEESCL;
	UserDelay(50);
	ClrEESDA;
	UserDelay(100);
	ClrEESCL;	

}


void SetEEDataOut(void)
{
EALLOW;
//24c16 data: output
//	GpioDataRegs.GPBSET.bit.GPIO32=1;
//GpioCtrlRegs.GPBPUD.bit.GPIO32=0;  //enable pullup
	GpioCtrlRegs.GPBDIR.bit.GPIO32=1;
	GpioCtrlRegs.GPBCTRL.bit.QUALPRD0=0;
	GpioCtrlRegs.GPBQSEL1.bit.GPIO32=0;
EDIS;	
}


void SetEEDataIn(void)
{
//24c16 data: input
EALLOW;
//	GpioCtrlRegs.GPBPUD.bit.GPIO32=1;  //disable pullup
//	GpioDataRegs.GPBSET.bit.GPIO32=1;
	GpioCtrlRegs.GPBDIR.bit.GPIO32=0;  
	GpioCtrlRegs.GPBCTRL.bit.QUALPRD0=0x5;
	GpioCtrlRegs.GPBQSEL1.bit.GPIO32=2;
EDIS;
}

void WriteOneByte(Uint16 byte)
{

	Uint16 i;
	Uint16 Bit;

	Uint16 Shift24c16=0x80;

	UserDelay(5);
	for(i=0;i<ByteBits;i++)
		{
		Bit=byte&Shift24c16;
		if(Bit==0)  //bit=0
			ClrEESDA;
		else
			SetEESDA;
		UserDelay(15);
		SetEESCL;
		Shift24c16=Shift24c16>>1;
		UserDelay(100);
		ClrEESCL;		
		}
	Shift24c16=0x80;	

}


void ResponACKN(void)
{

		
	UserDelay(10);
	SetEESDA;
	UserDelay(10);
	SetEESCL;
	UserDelay(200);
	ClrEESCL;

}


void ResponseACK(void)
{


	SetEEDataOut();
	UserDelay(10);
	ClrEESDA;
	//SetEESDA;
	UserDelay(10);
	SetEESCL;
	UserDelay(30);
	ClrEESCL;
	
}

Uint32 ReadOneByte(void)
{

	Uint16 i;
	Uint32 PartByte;
	Uint32 TotalByte=0;  //就放在这个子程序中

	for(i=0;i<ByteBits;i++)
		{
	UserDelay(20);
	SetEESCL;
	UserDelay(20);
	//read bit
	PartByte=GpioDataRegs.GPBDAT.all;
	PartByte=PartByte&0x00000001;
	ClrEESCL;
	PartByte=PartByte<<(7-i);
	TotalByte+=PartByte;
	UserDelay(20);

		}

	return TotalByte;

}



void StopEEPRom(void)
{

	ClrEESCL;
	UserDelay(20);
	ClrEESDA;
	UserDelay(20);
	SetEESCL;
	UserDelay(20);
	SetEESDA;
	
}

//input: 1. eepromaddr:the first address of eeprom; readnumber: read number of eeprom 
void ReadEEPRom(Uint16 EEPRomAddr, Uint16 ReadNumber)
{


   Uint16  i;
 //  Uint16  Status;
  
 //  Uint32  Length;         // Number of 16-bit values to be programmed
 //  float32 Version;        // Version of the API in floating point
 //  Uint16  VersionHex;     // Version of the API in decimal encoded hex
   Uint32 HighByte;
   Uint32 MiddleByte;
   Uint32 LowByte;

   Uint32 TempReadVar[EEPROMNUMBER];


//prepare for reading 
	StartEEPRom();
	SetEEDataOut(); //set 24c16 data : output
	WriteOneByte(EEDeviceAddr); //set device: write
	ResponACKN();
	WriteOneByte(EEPRomAddr);
	ResponACKN();
	StartEEPRom();
	WriteOneByte(EEDeviceAddr+1); //set device: read
	ResponACKN();
	
//read,and save as array: TempReadVar[]
	for(i=0;i<ReadNumber-1;i++)
		{
		SetEEDataIn();
		TempReadVar[i]=ReadOneByte();
		ResponseACK();
		}
	if(i==ReadNumber-1)
		{
		SetEEDataIn();
		TempReadVar[i]=ReadOneByte();
		SetEEDataOut();
		}
//stop
	StopEEPRom();	
//deal	
/*	
	if((TempReadVar[0]>MinVolLpP)&(TempReadVar[0]<MaxVolLpP))
    		DefaultVolLpP=TempReadVar[0];
	else
		DefaultVolLpP=10;

	if((TempReadVar[1]>MinVolIFre)&(TempReadVar[1]<MaxVolIFre))
    		DefaultVolIFre=TempReadVar[1];
	else
		DefaultVolIFre=150;

	if((TempReadVar[2]>MinCurrLpP)&(TempReadVar[2]<MaxCurrLpP))
    		DefaultCurrLpP=TempReadVar[2];
	else
		DefaultCurrLpP=30;

	if((TempReadVar[3]>MinCurrIFre)&(TempReadVar[3]<MaxCurrIFre))
    		DefaultCurrIFre=TempReadVar[3];
	else
		DefaultCurrIFre=500;
	
	if((TempReadVar[4]>MinSwFreq)&(TempReadVar[4]<MaxSwFreq))
    		DefaultSwFreq=TempReadVar[4];
	else
		DefaultSwFreq=150;
	
	HighByte=TempReadVar[5];
	LowByte=TempReadVar[6];
	DefaultDcVol=(HighByte<<8)+LowByte;
	if((DefaultDcVol>MaxDcVol)||(DefaultDcVol<MinDcVol))
		DefaultDcVol=2600;
	
	HighByte=TempReadVar[7];
	MiddleByte=TempReadVar[8];
	LowByte=TempReadVar[9];
	DefaultCode=(HighByte<<16)+(MiddleByte<<8)+LowByte;
	/////////??????????????暂时没有设置code
	DefaultCode=BackdoorCode;
*/	
	HighByte=TempReadVar[0];
	MiddleByte=TempReadVar[1];
	LowByte=TempReadVar[2];
	EnergyLed=(HighByte<<16)+(MiddleByte<<8)+LowByte;
	if(EnergyLed>999999)
		EnergyLed=0;

	
}




void WriteEEPRom(Uint16 EEPRomAddr, Uint16 WriteNumber, Uint16 *EEBuffer)
{

   Uint16  i;
   Uint16 Status;

/*
	FlashBuffer[0]=(Uint16)DefaultVolLpP;
	FlashBuffer[1]=(Uint16)DefaultVolLpI;
	FlashBuffer[2]=(Uint16)DefaultCurrLpP;
	FlashBuffer[3]=(Uint16)DefaultCurrLpI;
	FlashBuffer[4]=(Uint16)DefaultSwFreq;
	
	FlashBuffer[5]=((Uint16)DefaultDcVol&0xff00)>>8; // high byte(8bit) of dc vol
	FlashBuffer[6]=(Uint16)DefaultDcVol&0x00ff;  //low byte (8bit) of dc vol

	FlashBuffer[7]=(Uint16)((DefaultCode&0x00ff0000)>>16);  //flashbuffer[7]: high bit of securecode 
	FlashBuffer[8]=(Uint16)((DefaultCode&0x0000ff00)>>8); //flashbuffer[8]: middle bit of securecode
	FlashBuffer[9]=(Uint16)(DefaultCode&0x000000ff);//flashbuffer[9]: low bit of securecode
*/	   
//prepare for writing 
	StartEEPRom();
	SetEEDataOut(); //set 24c16 data : output
	WriteOneByte(EEDeviceAddr); //set device: write
	ResponACKN();
	WriteOneByte(EEPRomAddr);
	ResponACKN();

//write,and save as eepromaddr
	for(i=0;i<WriteNumber;i++)
		{
		WriteOneByte(*(EEBuffer+i)); 
		ResponACKN();
		}

	StopEEPRom();

//verify	
//    Status = VerifyEEPRom();  ????????????????????????
//    if(Status != 1) // 1 represents success; 0 represents verify failed
//    {
//        Example_Error(Status);
//    }            
   


}


/*
void VerifyEEPRom(Uint16 EEPRomAddr, Uint16 ReadNumber);
{
    Uint16  ii;
 //  Uint16  Status;
  
 //  Uint32  Length;         // Number of 16-bit values to be programmed
 //  float32 Version;        // Version of the API in floating point
 //  Uint16  VersionHex;     // Version of the API in decimal encoded hex

   Uint32 TempReadVar[10];

//prepare for reading 
	StartEEPRom();
	SetEEDataOut(); //set 24c16 data : output
	WriteOneByte(EEDeviceAddr); //set device: write
	ResponACKN();
	WriteOneByte(EEPRomAddr);
	ResponACKN();
	StartEEPRom();
	WriteOneByte(EEDeviceAddr+1); //set device: read
	ResponACKN();
//read,and save as array: TempReadVar[]
	for(ii=0;ii<ReadNumber;ii++)
		{
		SetEEDataIn();
		TempReadVar[ii]=ReadOneByte();
		ResponseACK();
		}
//stop
	StopEEPRom();	

//comparison
	for(ii=0;ii<ReadNumber;ii++)
		{
		if(TempReadVar[ii]!=FlashBuffer[ii])
			return 0;
		}
	return 1;
}
*/

void WriteEnergy(void)
{
	Uint16 TempVar[EEPROMNUMBER];
	if(EnergyAddOne==1)  //add one degree
		{
		EnergyAddOne=0;
		TempVar[0]=(Uint16)((EnergyLed&0x00ff0000)>>16); 
		TempVar[1]=(Uint16)((EnergyLed&0x0000ff00)>>8);
		TempVar[2]=(Uint16)(EnergyLed&0x000000ff);
		
		WriteEEPRom(0x0a, EEPROMNUMBER, TempVar);
			
		}
}
/*
void InitEEContent(void)
{
		FlashBuffer[0]=(Uint16)DefaultVolLpP;
		FlashBuffer[1]=(Uint16)DefaultVolIFre;
		FlashBuffer[2]=(Uint16)DefaultCurrLpP;
		FlashBuffer[3]=(Uint16)DefaultCurrIFre;
		FlashBuffer[4]=(Uint16)DefaultSwFreq;
	
		FlashBuffer[5]=((Uint16)DefaultDcVol&0xff00)>>8; // high byte(8bit) of dc vol
		FlashBuffer[6]=(Uint16)DefaultDcVol&0x00ff;  //low byte (8bit) of dc vol

		FlashBuffer[7]=(Uint16)((DefaultCode&0x00ff0000)>>16);  //flashbuffer[7]: high bit of securecode 
		FlashBuffer[8]=(Uint16)((DefaultCode&0x0000ff00)>>8); //flashbuffer[8]: middle bit of securecode
		FlashBuffer[9]=(Uint16)(DefaultCode&0x000000ff);//flashbuffer[9]: low bit of securecode

		FlashBuffer[10]=(Uint16)((EnergyLed&0x00ff0000)>>16);  //flashbuffer[7]: high bit of securecode 
		FlashBuffer[11]=(Uint16)((EnergyLed&0x0000ff00)>>8); //flashbuffer[8]: middle bit of securecode
		FlashBuffer[12]=(Uint16)(EnergyLed&0x000000ff);//flashbuffer[9]: low bit of securecode

}

*/

/*------------------------------------------------------------------
  For this example, if an error is found just stop here
-----------------------------------------------------------------*/
#pragma CODE_SECTION(Example_Error,"ramfuncs");
void Example_Error(Uint16 Status)
{

//  Error code will be in the AL register. 
    asm("    ESTOP0");
    asm("    SB 0, UNC");
}




⌨️ 快捷键说明

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