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

📄 at24.c

📁 意法半导体ARM7 STR710+DM9000A的TCP/IP实现
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -