📄 eeprom1.c
字号:
#include <LPC214X.H>
#include "eeprom1.h"
//#include "delay.h"
void i2cInit(void)
{
PINSEL0 |= 0x50; //Switch GPIO to I2C pins
I2C0SCLH = 50; //Set bit rate 14.7456Mhz/VPBDIV+SCLH+SCLL = 14.7456/4+8+8 = 57.6Khz
I2C0SCLL = 50;
}
void putCharE(unsigned char Data,unsigned short Addr) // 24128,256,512.....
{
unsigned char AddrH,AddrL;
AddrH=(Addr&0xFF00)>>8;
AddrL=(Addr&0x00FF);
I2C0CONCLR = 0x000000FF; //Clear all I2C settings
I2C0CONSET = (1<<I2EN); //Enable the I2C interface
I2C0CONSET = (1<<STA); //Start condition
while(I2C0STAT != 0x08);
I2C0CONCLR = (1<<STA);
I2C0CONCLR = (1<<SI);
I2C0ADR = SLA_W;
I2C0DAT = SLA_W;
I2C0CONCLR = (1<<SI);
while(I2C0STAT != 0x18);
I2C0DAT = AddrH;
I2C0CONCLR = (1<<SI);
while(I2C0STAT != 0x28);
I2C0DAT = AddrL;
I2C0CONCLR = (1<<SI);
while(I2C0STAT != 0x28);
I2C0DAT = Data;
I2C0CONCLR = (1<<SI);
while(I2C0STAT != 0x28);
I2C0CONCLR = (1<<SI) ;
I2C0CONSET = (1<<STO);
i2c_delay();
}
unsigned char getCharE(unsigned short Addr)
{
unsigned char RxData = 0,AddrH,AddrL;
AddrH=(Addr&0xFF00)>>8;
AddrL=(Addr&0x00FF);
I2C0CONCLR = 0x000000FF; //Clear all I2C settings
I2C0CONSET = (1<< I2EN); //Enable the I2C interface
I2C0CONSET = (1<< STA); //Start condition
while(I2C0STAT != 0x08);
I2C0CONCLR = (1<<STA);
I2C0CONCLR = (1<<SI);
I2C0ADR = SLA_W;
I2C0DAT = SLA_W;
I2C0CONCLR = (1<<SI);
while(I2C0STAT != 0x18);
I2C0DAT = AddrH;
I2C0CONCLR = (1<<SI);
while(I2C0STAT != 0x28);
I2C0DAT = AddrL;
I2C0CONCLR = (1<<SI);
while(I2C0STAT != 0x28);
I2C0CONSET = (1<<STA) | (1<<AA); //Start condition
I2C0CONCLR = (1<<SI);
while(I2C0STAT != 0x10);
I2C0ADR = SLA_R;
I2C0DAT = SLA_R;
I2C0CONCLR = (1<<SI);
I2C0CONCLR = (1<<STA);
while(I2C0STAT != 0x40);
I2C0CONCLR = (1<<SI);
while(I2C0STAT != 0x50);
RxData = I2C0DAT;
I2C0CONCLR = (1<<SI);
i2c_delay();
I2C0CONCLR = (1<<SI);
I2C0CONSET = (1<<STO);
return RxData;
}
void putStrE(unsigned char *str,unsigned short Addr)
{
unsigned char AddrH,AddrL;
AddrH=(Addr&0xFF00)>>8;
AddrL=(Addr&0x00FF);
I2C0CONCLR = 0x000000FF; //Clear all I2C settings
I2C0CONSET = (1<<I2EN); //Enable the I2C interface
I2C0CONSET = (1<<STA); //Start condition
while(I2C0STAT != 0x08);
I2C0CONCLR = (1<<STA);
I2C0CONCLR = (1<<SI);
I2C0ADR = SLA_W;
I2C0DAT = SLA_W;
I2C0CONCLR = (1<<SI);
while(I2C0STAT != 0x18);
I2C0DAT = AddrH;
I2C0CONCLR = (1<<SI);
while(I2C0STAT != 0x28);
I2C0DAT = AddrL;
I2C0CONCLR = (1<<SI);
while(I2C0STAT != 0x28);
while(*str)
{
I2C0DAT = *str++;
I2C0CONCLR = (1<<SI);
while(I2C0STAT != 0x28);
}
I2C0DAT = NUL;
I2C0CONCLR = (1<<SI);
while(I2C0STAT != 0x28);
I2C0CONCLR = (1<<SI) ;
I2C0CONSET = (1<<STO);
i2c_delay();
}
unsigned char *getStrE(unsigned short Addr)
{
static unsigned char readAry[15];
unsigned char i=0;
do{
readAry[i]=getCharE(Addr);
Addr++;
}while(readAry[i++]!='\0');
readAry[i] = NUL;
return readAry;
}
void i2c_delay(void)
{
int i,j;
for(i=0;i<10;i++)
for (j=0;j<8255;j++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -