at24.c

来自「意法半导体ARM7 STR710+DM9000A的TCP/IP实现」· C语言 代码 · 共 95 行

C
95
字号
#include "71x_lib.h"
#include "AT24.h"

void DelayTWR(void)
{
	int i;
	for(i = 0; i < 0x800; i++);
}

void WriteByte(int addr, u8 data)
{
	//Enable Start generation
	I2C_STARTGenerate(I2C0, ENABLE);
	while(!(I2C0->SR1 & I2C_SB));

	//Send the slave address
	I2C0->DR = 0xA0 | addr >> 7 & 0x0E;	// Tx
	while(!(I2C0->SR2 & 0x20));			// ENDAD
	I2C0->CR |= 0x20;					// Set PE

	//Send Data to the slave
	while(!(I2C0->SR1 & I2C_BTF));
	I2C0->DR = addr & 255;
	while(!(I2C0->SR1 & I2C_BTF));
	I2C0->DR = data;
	while(!(I2C0->SR1 & I2C_BTF));

	//Stop the communication
	I2C_STOPGenerate(I2C0, ENABLE);
	while(I2C0->CR & I2C_STOP_Mask);
}

u8 ReadByte(int addr)
{
	u8 c;

	//Enable Start generation
	I2C_STARTGenerate(I2C0, ENABLE);
	while(!(I2C0->SR1 & I2C_SB));

	//Send the slave address
	I2C0->DR = 0xA0 | addr >> 7 & 0x0E;	// Tx
	while(!(I2C0->SR2 & 0x20));			// ENDAD
	I2C0->CR |= 0x20;					// Set PE

	//Send Data to the slave
	while(!(I2C0->SR1 & I2C_BTF));
	I2C0->DR = addr & 255;
	while(!(I2C0->SR1 & I2C_BTF));

	//Stop the communication
	I2C_STOPGenerate(I2C0, ENABLE);
	while(I2C0->CR & I2C_STOP_Mask);

	//Disable I2C acknowledge feature
	I2C_AcknowledgeConfig(I2C0, DISABLE);

	//Enable Start generation
	I2C_STARTGenerate(I2C0, ENABLE);
	while(!(I2C0->SR1 & I2C_SB));

	//Send the slave address
	I2C0->DR = 0xA1 | addr >> 7 & 0x0E;	// Rx
	while(!(I2C0->SR2 & 0x20));			// ENDAD
	I2C0->CR |= 0x20;					// Set PE

	//Read Data from the slave & stop the communication
	while(!(I2C0->SR1 & I2C_BTF));
	I2C_STOPGenerate(I2C0, ENABLE);
	c = I2C0->DR;
	while(I2C0->CR & I2C_STOP_Mask);

	return c;
}

void At24Read_MB(u8 addr,u8 len,u8 *strData)
{
	u8 i;
	for(i=0;i<len;i++)
	{
		*strData++=ReadByte(addr+i);
	}
}


void At24Write_MB(u8 addr,u8 len,u8 *strData)
{
	u8 i;
	for(i=0;i<len;i++)
	{
		WriteByte(addr+i,strData[i]);
	}


}

⌨️ 快捷键说明

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