?? operateeeprom.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; //就放在這個(gè)子程序中
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;
/////////??????????????暫時(shí)沒有設(shè)置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");
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -