EEPROM 구동
헤더 파일 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; //
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
EEPROM 구동EEPROM 읽 기와 쓰기 데 이 터 는 I2C 로 I2C 드라이브 에 대해 이전 블 로 그 를 볼 수 있 습 니 다. 헤더 파일 E2rom. h : 원본 파일 E2rom. c:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.