⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2ceprom_driver.c

📁 implementation OF i2c in lpc2148
💻 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 + -