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

📄 i2c_oper.c

📁 在LPC2132的ARM处理器上
💻 C
字号:
/***************************************************************************/

#include "config.h"

/***************************************************************************/
uint16 ReadEEROM(uint8 *DataAddr, uint8 SaveAddr, uint16 DataSize)	
{
	uint16 ByteSize;
	
	*DataAddr = SaveAddr;
	
	ByteSize = I2cRead(CAT1025, DataAddr, DataAddr, 1, DataSize);
	
    if (ByteSize != DataSize)
		return ERROR;
	
	return SUCCESS;	
}	

/***************************************************************************/
void WriteEEROM(uint8 *DataAddr, uint8 SaveAddr, uint16 DataSize)
{
	uint8 DataBuf[17], TempAddr = SaveAddr;
	uint16 j, i = DataSize;
	uint8 *BufAddr;
	
	while( i > 16)
	{
	    BufAddr =  DataBuf;
	    *BufAddr++ = TempAddr;
		for(j = 0; j < 16; j++)
		  	*BufAddr++ = *DataAddr++;
		  	
		I2cWrite(CAT1025, DataBuf, 17);
		OSTimeDly (OS_TICKS_PER_SEC / 50);		//延时20毫秒
		i = i - 16;
		TempAddr += 16;
	} 
	
	 BufAddr =  DataBuf;
	 *BufAddr++ = TempAddr;
	 for(j = 0; j < i; j++)
		*BufAddr++ = *DataAddr++;
	
	I2cWrite(CAT1025, DataBuf, (i + 1));
	OSTimeDly (OS_TICKS_PER_SEC / 50);		//延时20毫秒
		
}

/***************************************************************************/
//在CAT1025芯片的前128字节(0x00~0x7f)存储传感器地址信息,
//从0x80开始存储I2C1的当前指针信息,其表示下一条来车信息在I2C1存储的起始地址,
//	0x80			0x81			0x82				0x83			    0x84				0x85
//	0xa5        	0x5a        当前I2C1高位地址	当前I2C1低位地址   前I2C1高位地址	   前I2C1低位地址
/***************************************************************************/
unsigned int GetI2C1CurAddr(void)
{
	unsigned char	Buffer[6];
	
	ReadEEROM(Buffer, 0x80, 6);
	
	if ((Buffer[0] == 0xa5) && (Buffer[1] == 0x5a)){
		//CurI2C1Addr[0] = Buffer[2];
		//CurI2C1Addr[1] = Buffer[3];
		//PerI2C1Addr[0] = Buffer[4];
		//PerI2C1Addr[1] = Buffer[5];
		return	SUCCESS;
	}
	
	Buffer[0] = 0xa5;
	Buffer[1] = 0x5a;
	Buffer[2] = 0x00;
	Buffer[3] = 0x00;
	Buffer[4] = 0x00;
	Buffer[5] = 0x00;
	
	OSTimeDly (OS_TICKS_PER_SEC / 50);		//延时20毫秒
	
	WriteEEROM(Buffer, 0x80, 6);
	
	//CurI2C1Addr[0] = 0x00;
	//CurI2C1Addr[1] = 0x00;
	//PerI2C1Addr[0] = 0x00;
	//PerI2C1Addr[1] = 0x00;
		
	return	SUCCESS;
	
}

/***************************************************************************/
void ClearI2C1CurAddr(void)
{
	unsigned char	Buffer[6];
	
	Buffer[0] = 0xa5;
	Buffer[1] = 0x5a;
	Buffer[2] = 0x00;
	Buffer[3] = 0x00;
	Buffer[4] = 0x00;
	Buffer[5] = 0x00;
	
	WriteEEROM(Buffer, 0x80, 6);
	
	//CurI2C1Addr[0] = 0x00;
	//CurI2C1Addr[1] = 0x00;
	//PerI2C1Addr[0] = 0x00;
	//PerI2C1Addr[1] = 0x00;

}

/***************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -