📄 eeprom.c
字号:
#include "extData.h"
#include "eeprom.h"
#include "dvIIC.h"
#include "utility.h"
#include "Define.h"
#include "dvGxCtrl.h"
#include "stdio.h"
#include"utility.h"
/*
WORD EEPROM_Addr_2IN1[6];
WORD EEPROM_Addr_AFE[6];
BYTE EEPROM_Page_Len;
BYTE GXEEPROM_SLAVE_ADDRESS;
BYTE RefGainSetting[6];
BYTE RefOffsetSetting[6];
*/
WORD RefGainSetting [6] = {0x00cf,0x00cd,0x00d0,0x0106,0x0121,0x0154};
//BYTE H_RefGainSetting [6] = {0x00,0x00,0x00,0x01,0x01,0x01};
WORD RefOffsetSetting [6] = {0x00df,0x00de,0x00e3,0x013d,0x011c,0x0141};
//BYTE H_RefOffsetSetting [6] = {0x00,0x00,0x00,0x01,0x01,0x01};
BYTE EEPROM_Page_Len = 0x10;
BYTE GXEEPROM_SLAVE_ADDRESS = 0xa0;
WORD EEPROM_Addr_2IN1 [6] ={0x00be,0x00c0,0x00c2,0x00c3,0x00c5,0x00c7};
WORD EEPROM_Addr_AFE [6] = {0x00d6,0x00d8,0x00da,0x00db,0x00dd,0x00df};
//#define NV_PAGE_WRITE_LEN 32
#define SLAVE_ADDRESS_EEPROM 0xA0
void ShortDelay(WORD wDelay)
{
while(wDelay --)
{
;
}
}
void E2promDataSet(BYTE cSlaveAdr,BYTE cPageLen,WORD wRegisterAddress,WORD wLength,PBYTE pData,BOOL bFlag)
{
WORD wCurrentAddress,wEnd,i;
WORD wStartPage, wEndPage, wMidPages;
WORD wPagePremainder, wPageRemainder;
wCurrentAddress = wRegisterAddress;
wEnd = wRegisterAddress + wLength - 1; // end address of this transfer in
// NVRAM
wStartPage = wRegisterAddress / cPageLen; // starting block number for
// transfer
wEndPage = wEnd / cPageLen; // ending block number for
// If this operation is entirely within one NVRAM page, then setup for
// that situation.
if (wStartPage == wEndPage)
{
wPagePremainder = wLength; // this transfer is handled entirely as
// premainder
wMidPages = 0; // no chunks in the middle
wPageRemainder = 0; // no remainder bytes
}
else
{
// We're not entirely within one page
// Calculate the address of the next page boundary.
// Premainder is the number of bytes before the first page boundary
wPagePremainder = ((wRegisterAddress / cPageLen) + 1) * cPageLen - wRegisterAddress;
// Check if any bytes follow the last page boundary in the transfer
if ((wEnd + 1) % cPageLen)
{
// Remainder is the number of bytes after the last page boundary
wPageRemainder = wEnd - (((BYTE)(wEnd /cPageLen)) *
cPageLen) + 1;
}
else
{
// Tranfer ends at a page boundary so no remainder
wPageRemainder = 0;
}
}
// Calculate number of whole pages are in the middle of this transfer
wMidPages = (wLength - wPagePremainder - wPageRemainder) /
cPageLen;
// -----------------------------------------------------------------------
// BEGIN ACCESSING THE NVRAM
// -----------------------------------------------------------------------
// Write out the Premainder
if (wPagePremainder)
{
IICWrite(cSlaveAdr,
wCurrentAddress,
pData,
wPagePremainder,
bFlag);
wCurrentAddress += wPagePremainder;
pData += wPagePremainder;
ShortDelay(500);
}
// Write out the Mid Pages
for (i = 0; i < wMidPages; i++)
{
IICWrite(cSlaveAdr,
wCurrentAddress,
pData,
cPageLen,
bFlag);
wCurrentAddress += cPageLen;
pData += cPageLen;
ShortDelay(500);
}
// Write out the Remainder
if (wPageRemainder)
{
IICWrite(cSlaveAdr,
wCurrentAddress,
pData,
wPageRemainder,
bFlag);
ShortDelay(500);
}
}
BOOL E2promDataGet(BYTE cSlaveAdr,WORD wRegisterAddress,BYTE cLength,PBYTE pData,BOOL bFlag)
{
BOOL bReturn;
bReturn=IICRead(cSlaveAdr,wRegisterAddress,pData,cLength,bFlag);
return bReturn;
}
void EEPROMUocSettingGet(BYTE cChannel)
{
#ifdef Debug
BYTE i;
BYTE cGainValue;
WORD wOffsetValue;
BYTE bReturn;
if(cChannel==0)
{
for(i=0;i<3;i++)
{
bReturn=E2promDataGet(GXEEPROM_SLAVE_ADDRESS,EEPROM_Addr_2IN1[i],1,&cGainValue,0);
TimeDelay(15);
printf("GainSetting_480i[%bd]= %bx,bReturn =%bd\n,",i,cGainValue,bReturn);
}
for(i=0;i<3;i++)
{
bReturn=E2promDataGet(GXEEPROM_SLAVE_ADDRESS,EEPROM_Addr_2IN1[3+i],2,(PBYTE)&wOffsetValue,0);
TimeDelay(15);
printf("OffsetSetting_480i[%bd]= %4x,bReturn =%bd\n",i,wOffsetValue,bReturn);
}
}
else
{
for(i=0;i<3;i++)
{
bReturn=E2promDataGet(GXEEPROM_SLAVE_ADDRESS,EEPROM_Addr_AFE[i],1,&cGainValue,0);
TimeDelay(15);
printf("GainSetting[%bd]_1080i= %bx,bReturn =%bd\n",i,cGainValue,bReturn);
}
for(i=0;i<3;i++)
{
bReturn=E2promDataGet(GXEEPROM_SLAVE_ADDRESS,EEPROM_Addr_AFE[3+i],2,(PBYTE)&wOffsetValue,0);
TimeDelay(15);
printf("OffsetSetting[%bd]_1080i= %4x,bReturn =%bd\n",i,wOffsetValue,bReturn);
}
}
#endif
}
#if 0
void EEPROMGxSettingGet()
{
BYTE i;
E2promDataGet(SLAVE_ADDRESS_EEPROM,0xfc0,6,RefGainSetting,1);
#ifdef Debug
for(i=0;i<6;i++)
{
TimeDelay(10);
printf("BaseGainSetting[%bd]= %bx\n",i,RefGainSetting[i]);
}
#endif
E2promDataGet(SLAVE_ADDRESS_EEPROM,0xfc6,6,RefOffsetSetting,1);
#ifdef Debug
for(i=0;i<6;i++)
{
TimeDelay(10);
printf("BaseOffsetSetting[%bd] = %bx\n",i,RefOffsetSetting[i]);
}
#endif
E2promDataGet(SLAVE_ADDRESS_EEPROM,0xfcc,1,&EEPROM_Page_Len,1);
#ifdef Debug
{
TimeDelay(10);
printf("EEPROM_Page_Len = %bx\n",EEPROM_Page_Len);
}
#endif
E2promDataGet(SLAVE_ADDRESS_EEPROM,0xfe0,12,(PBYTE)EEPROM_Addr_2IN1,1);
#ifdef Debug
for(i=0;i<6;i++)
{
TimeDelay(10);
printf("EEPROM_Addr_2IN1[%bd] = %4x\n",i,EEPROM_Addr_2IN1[i]);
}
#endif
E2promDataGet(SLAVE_ADDRESS_EEPROM,0xfec,12,(PBYTE)EEPROM_Addr_AFE,1);
#ifdef Debug
for(i=0;i<6;i++)
{
TimeDelay(10);
printf("EEPROM_Addr_AFE[%bd] = %4x\n",i,EEPROM_Addr_AFE[i]);
}
#endif
E2promDataGet(SLAVE_ADDRESS_EEPROM,0xff8,1,&GXEEPROM_SLAVE_ADDRESS,1);
#ifdef Debug
{
TimeDelay(10);
printf("GXEEPROM_SLAVE_ADDRESS = %bx\n",GXEEPROM_SLAVE_ADDRESS,1);
}
#endif
}
#endif
#if 0
void EEPROMGxSettingSet()
{
BYTE acTempGain [6] = {0x86,0x66,0x71,0x72,0x58,0x71};
BYTE acTempOffset [6] = {0x51,0x70,0x65,0x59,0x60,0x56};
BYTE cTempPageLen = 0x10;
BYTE cTempSlaveAddr = 0xa0;
WORD awTemp2In1Addr [6] = {0x00bd,0x00bf,0x00c1,0x00c3,0x00c5,0x00c7};
WORD awTempAFEAddr [6] = {0x00d5,0x00d7,0x00d9,0x00db,0x00dd,0x00df};
E2promDataSet(SLAVE_ADDRESS_EEPROM,0x20,0xfc0,6,acTempGain,1);
E2promDataSet(SLAVE_ADDRESS_EEPROM,0x20,0xfc6,6,acTempOffset,1);
E2promDataSet(SLAVE_ADDRESS_EEPROM,0x20,0xfcc,1,&cTempPageLen,1);
E2promDataSet(SLAVE_ADDRESS_EEPROM,0x20,0xfe0,12,(PBYTE)awTemp2In1Addr,1);
E2promDataSet(SLAVE_ADDRESS_EEPROM,0x20,0xfec,12,(PBYTE)awTempAFEAddr,1);
E2promDataSet(SLAVE_ADDRESS_EEPROM,0x20,0xff8,1,&cTempSlaveAddr,1);
}
#endif
void GxEEPROMWrite(BYTE cFormatSel)
{
BYTE i;
if(cFormatSel==0) // 2in1
{
for(i=0;i<3;i++)
E2promDataSet(GXEEPROM_SLAVE_ADDRESS,EEPROM_Page_Len,EEPROM_Addr_2IN1[i],1,&(m_acGainItemValue[i]),0);
E2promDataSet(GXEEPROM_SLAVE_ADDRESS,EEPROM_Page_Len,EEPROM_Addr_2IN1[3],6,(PBYTE)m_awOffsetItemValue,0);
}
else
{
for(i=0;i<3;i++)
E2promDataSet(GXEEPROM_SLAVE_ADDRESS,EEPROM_Page_Len,EEPROM_Addr_AFE[i],1,&(m_acGainItemValue[i]),0);
E2promDataSet(GXEEPROM_SLAVE_ADDRESS,EEPROM_Page_Len,EEPROM_Addr_AFE[3],6,(PBYTE)m_awOffsetItemValue,0);
}
#ifdef Debug
for(i=0;i<3;i++)
{
TimeDelay(15);
printf("EEPROM_Gain[%bd] = %bx\n",i,m_acGainItemValue[i]);
}
for(i=0;i<3;i++)
{
TimeDelay(15);
printf("EEPROM_Offset[%bd] = %4x\n",i,m_awOffsetItemValue[i]);
}
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -