您好,
我需要使用串行I2C EEPROM。 我的MCU是TMS320F2.8027万。
我有点失望,因为许多关于相同主题的帖子对我没有帮助。
我更喜欢没有中断的版本(简单性,线性函数,更适合bootloader)。
控制套件中的中断示例也使用FIFO。 它在超过3个数据字节(FIFO深度4字节)的情况下不起作用,并且它正在总线上重复发送某些内容。
我找到的最好的代码是 e2e.ti.com/.../3806.5126.I2C_5F00_Writing_5F00_Reading_5F00_EEPROM.txt引用的fom
我在使用时做了一些小的修改(1字节地址,在函数末尾设置了STP)。
void I2C_READ (UINT16 Slaver_address,UINT16 Start_address,UINT16 No_of_databytes,UINT16 READ_Array[])
{////////////////////////////////////
//从EEPROM/////////////////////////////////读取数据
I2caRegs.I2CSAR = Slaver_address; //设置从属地址
I2caRegs.I2CCNT = 1; //设置计数为2个地址字节
I2caRegs.I2CDXR = Start_address; //MST EEPROM高地址
I2caRegs.I2CMDR.Bit.TRX = 1; //设置为传输模式I2caReg.I21.Ibit.IDM.I1.
//不在Tx
I2caRegs.I2CMDR.bit.STT =1后释放总线; //发送起始位,传输将跟随
I2caRegs.I2CSTR.bit.XRDY ==0){}; //不执行任何操作,直到数据移出
// I2caRegs.I2CDXR = Start_I2CR=0=0
;EEPROM_ICAREADDR.0=0;EP.ICA.DBY = 0
//设置为接收模式
I2caRegs.I2CMDR.bit.MST = 1; //设置为主模式
I2caRegs.I2CMDR.bit.free = 1; //在空闲模式下运行
//当内部计数器变为0
I2caRegs.I2CMDR.bit.STT = 1;//重复启动,
RDC= I2R=未准备就绪;I2R= I2R=
READ_Array[I]= I2caRegs.I2CDRR;
}
I2caRegs.I2CMDR.bit.STP =1;
}
当我在一个序列中读取两次4字节时,我得到两个不同的读数。 第一个调用将读取另一个字节。
I2C_READ (0x50,0xFD,3,READ_Array);
I2C_READ (0x50,0xFD,3,READ_Array2);
因此,我从第一个读数获得{0x10,0x00,0xEF},从第二个读数获得{0xA,0a10,0x00}。
{0xEF,0a10,0x00}从第三个读数开始。
因此读数会发生变化。
是否有人知道什么可能是错误的?
