📄 at24.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 + -