EEPROM 구동

6001 단어 구동 하 다eeprom
EEPROM 읽 기와 쓰기 데 이 터 는 I2C 로 I2C 드라이브 에 대해 이전 블 로 그 를 볼 수 있 습 니 다.
헤더 파일 E2rom. h :
/*******************************************************************************
*      (C)2007,XXXXXXXXX。
*
*     :
*     :
*     :
*     :
*     :1.0
*       :XXX
*     :XXXX X XX 
*
*     1:
*        :
*         :
*         :
*        :
*     2:…
*******************************************************************************/
#ifndef _E2ROM_H
#define _E2ROM_H

BYTE WriteSingleByte_CAT24C64(BYTE nAddr_H,BYTE nAddr_L,BYTE nValue);
BYTE PageWrite_CAT24C64(BYTE nAddr_H,BYTE nAddr_L,BYTE *pBuf,BYTE Leth);
BYTE ReadRandom_CAT24C64(BYTE nAddr_H,BYTE nAddr_L, BYTE *nValue);
BYTE ReadSeq_CAT24C64(BYTE nAddr_H,BYTE nAddr_L,BYTE *nValue,BYTE Leth);

#endif

원본 파일 E2rom. c:
/*******************************************************************************
*      (C)2007,XXXXXXXXX。
*
*     :
*     :
*     :
*     :
*     :1.0
*       :XXX
*     :XXXX XX XX 
*
*     1:
*        :
*         :
*         :
*        :
*     2:…
*******************************************************************************/

/*******************************************************************************
//         
*******************************************************************************/
#include "AX5051_subject.h"
#include "AX5051_Registers.h"
#include "I2C.h"
/*******************************************************************************
//       
*******************************************************************************/

/*******************************************************************************
//       
*******************************************************************************/

/*******************************************************************************
*     :WriteSingleByte_CAT24C64
*     :     
*     :
*     :
*      :
*     :
*******************************************************************************/
BYTE WriteSingleByte_CAT24C64(BYTE nAddr_H,BYTE nAddr_L,BYTE nValue)
{
    BYTE nTemp = 0xA0;  //   

    I2C_START();        //       
    I2C_TxByte(nTemp);	//       
    nTemp = I2C_GetACK();	//    ACK
    if(nTemp & SDA) 
    {
        return FALSE;
    }
    I2C_TxByte(nAddr_H);	//       
    nTemp = I2C_GetACK();	//    ACK
    if(nTemp & SDA) 
    {
      return FALSE;
    }
    I2C_TxByte(nAddr_L);
    nTemp = I2C_GetACK();	//    ACK
    if(nTemp & SDA) 
    {
      return FALSE;
    }
    I2C_TxByte(nValue);	//       
    nTemp = I2C_GetACK();	//    ACK
    if(nTemp & SDA) 
    {
      return FALSE;
    }
    I2C_STOP();	//     
    Delay_ms(20);
    return TRUE;
}
/*******************************************************************************
*     :PageWrite_CAT24C64
*     :   
*     :
*     :
*      :
*     :
*******************************************************************************/
BYTE PageWrite_CAT24C64(BYTE nAddr_H,BYTE nAddr_L,BYTE *pBuf,BYTE Leth)
{
    BYTE i;
    BYTE nTemp = 0xA0;      //   
    
    I2C_START();        //       
    I2C_TxByte(nTemp);	//       
    nTemp = I2C_GetACK();	//    ACK
    if(nTemp & SDA) 
    {
      return FALSE;
    }
    I2C_TxByte(nAddr_H);        //       
    nTemp = I2C_GetACK();	//    ACK
    if(nTemp & SDA) 
    {
      return FALSE;
    }
    I2C_TxByte(nAddr_L);	//       
    nTemp = I2C_GetACK();	//    ACK
    if(nTemp & SDA) 
    {
      return FALSE;
    }
    for(i = 0; i < Leth;i++)	//       
    {
        I2C_TxByte(pBuf[i]);
        nTemp = I2C_GetACK();		//    ACK
        if(nTemp & SDA) 
        {
          return FALSE;
        }
    }
    I2C_STOP();		//     
    Delayms(20);
    return TRUE;
}
/*******************************************************************************
*     :ReadRandom_CAT24C64
*     :       
*     :
*     :
*      :
*     :
*******************************************************************************/
BYTE ReadRandom_CAT24C64(BYTE nAddr_H,BYTE nAddr_L, BYTE *nValue)
{
    
    BYTE nTemp = 0xA0;	//   
    
    I2C_START();	//       
    I2C_TxByte(nTemp);	//       
    nTemp = I2C_GetACK();	//    ACK
    if(nTemp & SDA) 
    {
      return FALSE;
    }
    I2C_TxByte(nAddr_H);	//       
    nTemp = I2C_GetACK();	//    ACK
    if(nTemp & SDA) 
    {
      return FALSE;
    }
    I2C_TxByte(nAddr_L);        //       
    nTemp = I2C_GetACK();	//    ACK
    if(nTemp & SDA) 
    {
      return FALSE;
    }
    I2C_START();	//       
    nTemp = 0xA1;	//       
    I2C_TxByte(nTemp);
    nTemp = I2C_GetACK();	//    ACK
    if(nTemp & SDA) 
    {
      return FALSE;
    }
    *nValue = I2C_RxByte();	//    
    I2C_STOP();	//     
    return TRUE;	//    
}
/*******************************************************************************
*     :ReadSeq_CAT24C64
*     :       
*     :
*     :
*      :
*     :
*******************************************************************************/
BYTE ReadSeq_CAT24C64(BYTE nAddr_H,BYTE nAddr_L,BYTE *nValue,BYTE Leth)
{
    BYTE i;
    BYTE nTemp = 0xA0;	//   
    
    I2C_START();	//       
    I2C_TxByte(nTemp);	//       
    nTemp = I2C_GetACK();	//    ACK
    if(nTemp & SDA) 
    {
      return FALSE;
    }
    I2C_TxByte(nAddr_H);	//       
    nTemp = I2C_GetACK();	//    ACK
    if(nTemp & SDA) 
    {
      return FALSE;
    }
    I2C_TxByte(nAddr_L);
    nTemp = I2C_GetACK();	//    ACK
    if(nTemp & SDA) 
    {
      return FALSE; 
    }
    I2C_START();	//       
    nTemp = 0xA1;	//       
    I2C_TxByte(nTemp);
    nTemp = I2C_GetACK();	//    ACK
    if(nTemp & SDA) 
    {
      return FALSE;
    }
    for(i = 0; i < Leth; i++)	//    
    {
        nValue[i] = I2C_RxByte();		//       
        if (i==(Leth-1))  
        {
            I2C_SetNAk();      	//  ACK
        }
        else 
        {
            I2C_SetACK(); 
        }
    }
    I2C_STOP();	//     
    return TRUE;	//    
}

좋은 웹페이지 즐겨찾기