加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
24c16.c 2.35 KB
一键复制 编辑 原始数据 按行查看 历史
dk鲁晓东 提交于 2020-02-24 19:51 . 24c0XX系列驱动
#include "24c16.h"
//#define I2C_Speed 100000
#define I2C1_SLAVE_ADDRESS7 0xA0 //1010 000 x 参考P233 林立单片机教材
//#define I2C2_SLAVE_ADDRESS7 0xA4 //1010 010 x FOR 24c04
//#define I2C2_SLAVE_ADDRESS7 0xA8 //1010 100 x FOR 24c08
#define I2C_PageSize 256
u8 FRAM_ADDRESS;
//I2C向地址WriteAddr以u8* pBuffer为起始写NumByteToWrite个
u8 I2C_FRAM_BufferWrite( u16 WriteAddr,u8* pBuffer, u16 NumByteToWrite)
{ bit Op_ok;
u8 Addr = 0, count = 0; //Addr 是页地址(容量256),count是本页的地址
Addr = WriteAddr / I2C_PageSize;//根据绝对地址计算
count = WriteAddr % I2C_PageSize;
Addr = Addr << 1; //这些操作时形成地址帧SLA
Addr = Addr & 0x0F;
FRAM_ADDRESS = I2C1_SLAVE_ADDRESS7 | Addr;//当超过256自动切换到下一个页地址,
//根据时序第1个先写器件地址
Op_ok=I2C_SendByte(FRAM_ADDRESS);
if(!Op_ok){I2C_Stop(); return FALSE; }
//第2个写段内地址
Op_ok=I2C_SendByte(count);
if(!Op_ok){I2C_Stop(); return FALSE; }
// 下面则是n个数据
while(NumByteToWrite--)
{ Op_ok=I2C_SendByte(* pBuffer);
if(!Op_ok){I2C_Stop(); return FALSE; }
else pBuffer++;
}
I2C_Stop();
//注意:因为这里要等待EEPROM写完,可以采用查询或延时方式(10ms)
delay_ms(10);
return TRUE;
}
////////////////////////////////////////////////////////////////////////////////
//I2C从地址WriteAddr为起始读NumByteToWrite个存在u8* pBuffer为起始的数组里
u8 I2C_FRAM_BufferRead( u16 WriteAddr,u8* pBuffer, u16 NumByteToRead)
{ bit Op_ok=0;
u8 Addr = 0, count = 0;
Addr = WriteAddr / I2C_PageSize;
count = WriteAddr % I2C_PageSize;
Addr = Addr << 1;
Addr = Addr & 0x0F;
FRAM_ADDRESS = I2C1_SLAVE_ADDRESS7 | Addr;//有专门的格式
if (!I2C_Start()) return FALSE;
//根据时序第1个先写器件地址
Op_ok=I2C_SendByte(FRAM_ADDRESS);
if(!Op_ok){I2C_Stop(); return FALSE; }
//第2个写段内地址
Op_ok=I2C_SendByte(count);
if(!Op_ok){I2C_Stop(); return FALSE; }
Op_ok=I2C_SendByte(FRAM_ADDRESS | 0x01);
if(!Op_ok){I2C_Stop(); return FALSE; }
while(NumByteToRead)
{
*pBuffer = I2C_ReceiveByte();
if(NumByteToRead == 1)I2C_NoAck();
else I2C_Ack();
pBuffer++;
NumByteToRead--;
}
I2C_Stop();
return TRUE;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化