📄 i2ceprom_driver.c
字号:
/************************************************************/
/* PROJECT NAME: I2C EEPROM Driver */
/* Project: LPC2129 Training course */
/* Engineer: Y.Stalin stalin@nstlindia.com */
/* Filename: GPIO_Driver.c */
/* Language: C */
/* Compiler: Keil ARM GCC */
/* Assembler: */
/* */
/************************************************************/
/* COPYRIGHT: NSTL 2008 */
/* LICENSE: PROPRIETORY */
/************************************************************/
/* Function: */
/* */
/* Example */
/* */
/* Demonstrates Use of the LPC2129 GPIO */
/* */
/* Oscillator frequency 12.000 Mhz */
/* Target board NSTL NST2100 */
/************************************************************/
#include <LPC214X.H>
#include "gpio.h"
#include "lcd.h"
#include "common.h"
#include "i2ceprom.h"
void i2cInit(void)
{
PINSEL0 |= 0x50; //Switch GPIO to I2C pins
I2SCLH = 50; //Set bit rate 14.7456Mhz/VPBDIV+SCLH+SCLL = 14.7456/4+8+8 = 57.6Khz
I2SCLL = 50;
}
void putCharE(unsigned char AddrH,unsigned char AddrL,unsigned char Data) // 24128,256,512.....
{
I2CONCLR = 0x000000FF; //Clear all I2C settings
I2CONSET = (1<<I2EN); //Enable the I2C interface
I2CONSET = (1<<STA); //Start condition
while(I2STAT != 0x08);
I2CONCLR = (1<<STA);
I2CONCLR = (1<<SI);
I2ADR = SLA_W;
I2DAT = SLA_W;
I2CONCLR = (1<<SI);
while(I2STAT != 0x18);
I2DAT = AddrH;
I2CONCLR = (1<<SI);
while(I2STAT != 0x28);
I2DAT = AddrL;
I2CONCLR = (1<<SI);
while(I2STAT != 0x28);
I2DAT = Data;
I2CONCLR = (1<<SI);
while(I2STAT != 0x28);
I2CONCLR = (1<<SI) ;
I2CONSET = (1<<STO);
delay(100);
}
unsigned char getCharE(unsigned char AddrH,unsigned char AddrL)
{
unsigned char RxData = 0;
I2CONCLR = 0x000000FF; //Clear all I2C settings
I2CONSET = (1<< I2EN); //Enable the I2C interface
I2CONSET = (1<< STA); //Start condition
while(I2STAT != 0x08);
I2CONCLR = (1<<STA);
I2CONCLR = (1<<SI);
I2ADR = SLA_W;
I2DAT = SLA_W;
I2CONCLR = (1<<SI);
while(I2STAT != 0x18);
I2DAT = AddrH;
I2CONCLR = (1<<SI);
while(I2STAT != 0x28);
I2DAT = AddrL;
I2CONCLR = (1<<SI);
while(I2STAT != 0x28);
I2CONSET = (1<<STA) | (1<<AA); //Start condition
I2CONCLR = (1<<SI);
while(I2STAT != 0x10);
I2ADR = SLA_R;
I2DAT = SLA_R;
I2CONCLR = (1<<SI);
I2CONCLR = (1<<STA);
while(I2STAT != 0x40);
I2CONCLR = (1<<SI);
while(I2STAT != 0x50);
RxData = I2DAT;
I2CONCLR = (1<<SI);
delay(1);
I2CONCLR = (1<<SI);
I2CONSET = (1<<STO);
return RxData;
}
void putStrE(unsigned char Hword,unsigned char Lword,unsigned char *strPtr)
{
while(*strPtr)
{
putCharE(Hword,Lword,*strPtr++);
if(Lword==0xFF)
{
Hword++;
Lword=0;
}
Lword++;
}
}
unsigned char *getStrE(unsigned char Hword,unsigned char Lword,unsigned int nob)
{
int i=0,j=0,EHword,ELword;
static unsigned char readAry[100];
EHword = nob / 256;
ELword = nob % 256;
for(i=0;i<=EHword;i++)
{
for(j=0;j<=ELword;j++)
readAry[i+j] = getCharE(Hword + i, Lword + j);
}
readAry[i+j] = NUL;
return readAry;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -