📄 eeprom.c
字号:
#include "Globe.h"
bit EEPROM_Error ;
BYTE idata EEPROMDelay;
void InitialIIC(void)
{
IICBufPtr=IICBuf.ByteArray;
}
//=============================================================
void I2cStart(void)
{
byM230_IIC_CTR =0x00;
ShortDelay(1);
byM230_IIC_CTR=byM230_IIC_CTR|0x01; //S rise
}
//=============================================================
bit wait_IIC(void)
{
IICWait=IIC_WAIT_TIME;
error=0;
//check MBuf sent/received
while( (byM230_IIC_INTFLG&0x01)==0) // Wait for byM230_IIC_MBUFl
{
if(IICWait==0)
{
error=1;
break;
}
}
// check ack.
if(byM230_IIC_STUS2&0x80)
{
error=1;
}
byM230_IIC_INTFLG=byM230_IIC_INTFLG&0xfe;
return(error);
}
//=============================================================
void I2cStop(void)
{
byM230_IIC_CTR=0x00;
ShortDelay(1);
byM230_IIC_CTR=byM230_IIC_CTR|0x02; //P rise
}
//=============================================================
void IICRead(BYTE slave, BYTE address, BYTE count)
{
BYTE data i;
InitialIIC();
byM230_IIC_INTFLG=byM230_IIC_INTFLG&0xfe;
//start
byM230_IIC_CTR=0x00; // S=0,P=0
byM230_IIC_MBUF=slave; // slave address (dummy write)
//I2cStart();
ShortDelay(1);
byM230_IIC_CTR=0x01; // S=1,P=0
error=wait_IIC();
//dummy write
// ShortDelay(1);
byM230_IIC_MBUF=address; //address
error=wait_IIC();
//restart
byM230_IIC_CTR=byM230_IIC_CTR & 0xfe; // S set 0
byM230_IIC_MBUF=slave|0x01; //restart + slave address (read)
ShortDelay(1);
byM230_IIC_CTR=byM230_IIC_CTR | 0x01; // S set 1
error=wait_IIC();
//dummy read
ShortDelay(1);
IICBuf.ByteArray[0]=byM230_IIC_MBUF;
error=wait_IIC();
i=0;
while(count!=0)
{
if(count==1)
{
byM230_IIC_CTR=0x05; //Ack=1
}
ShortDelay(1);
*IICBufPtr=byM230_IIC_MBUF;
IICBufPtr++;
error=wait_IIC();
if(error==1) break;
count--;
i++;
}
I2cStop();
}
//=============================================================
void IICWrite(BYTE slave,BYTE address,BYTE count)
{
BYTE data i;
InitialIIC();
byM230_IIC_INTFLG=byM230_IIC_INTFLG&0xfe;
byM230_IIC_MBUF=slave; // First byte of IIC data:slave address
I2cStart();
error=wait_IIC();
byM230_IIC_MBUF=address; // Send next byte:sub address
error=wait_IIC();
for(i=0; i<count; i++)
{
byM230_IIC_MBUF=*IICBufPtr; // Send next byte
IICBufPtr++;
error=wait_IIC();
if(error==1) break;
}
I2cStop();
DelayX1ms(1);
}
BYTE EEPROM_Rd_Byte(BYTE address)
{
while(EEPROMDelay);
IICRead(EEPROM_ADDRESS, address, 1);
EEPROMDelay=EEPROM_WAIT;
InitialIIC();
return IICBuf.ByteArray[0];
}
void EEPROM_Wr_Byte(BYTE address, BYTE datasheet)
{
IICBuf.ByteArray[0]=datasheet;
while(EEPROMDelay);
IICWrite(EEPROM_ADDRESS, address, 1);
EEPROMDelay=EEPROM_WAIT;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -