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

📄 eeprom.c

📁 一个调整ADC gain offset 的程序
💻 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 + -