我正在使用 TMS320F28034的 I2C 在 EEPROM AT24C08C 中读取和写入数据。
我在 ramdon 读取操作方面遇到问题。
情况1)
按照以下顺序->写入字地址->从同一字地址读取-> reg (I2CDRR)加载正确的数据。 但是变量 四字节
未加载正确的数据。 我需要调用两 次读取函数 UINT16 Reade2Prom (UINT16 e2promaddress)来获得 四字节= I2caRegs.I2CDRR;
在 四字节= I2cRegs.I2CSTR.bit.SCD 之前检查标志是否正确;在四字节= I2cRegs.I2CDRR 之前;?
情况2)
当 调用 reas 函数 UINT16 Reade2Prom (UINT16 e2promaddress) 来读取不同 的字地址时、它不起作用 I2CDRR 不更新。
我的以下代码中有什么问题?
有人能帮我举个例子、让我正确执行这些操作吗?
for (;;) //infinite loop
{
IF (FlagTestI2CREAD = 1)
{
quadbyteTEST = Reade2Prom (e2promaddress);
FlagTestI2CREAD=0;
}
IF (FlagTestI2CWRITE = 1)
{
Write2Prom (e2promaddress、EEdata);
FlagTestI2CWRITE = 0;
}
}
空 I2CInit (空)
{
I2caRegs.I2CMDR.bit.IRS = 0;
I2caRegs.I2CPSC.all = 5;//
I2caRegs.I2CCLKH = 21;//
I2caRegs.I2CCLKL = 69;//
I2caRegs.I2CIER.ALL = 0x0000; //
I2caRegs.I2CFFTX.ALL = 0x6040;
I2caRegs.I2CFFRX.ALL = 0x2040;//
I2caRegs.I2CMDR.ALL = 0x0020;
}
uint16 Reade2Prom (uint16 e2promaddress)
{
uint16地址慢速;
uint16地址;
address slow = e2promaddress & 0x00FF;
addressshigh =(e2promaddress>>8)和0x00FF;
I2caRegs.I2CSAR = EEPROM_ADDR;//0x0050;
I2caRegs.I2CCNT = 0x0002;
I2caRegs.I2CDXR =地址高;
I2caRegs.I2CDXR =地址慢速;
I2caRegs.I2CMDR.ALL = 0x2620;//发送器模式-主控模式//启动
while (!I2cRegs.I2CSTR.bit.ARDY);
I2caRegs.I2CCNT = 0x0001;
I2caRegs.I2CMDR.ALL = 0x2C20;//接收器模式-主控模式//启动-
while (!I2cRegs.I2CSTR.bit.SCD);
Quadbyte = I2caRegs.I2CDRR;
return (quadbyte);
}
空 Write2Prom (uint16 e2promaddress、uint16 EEdata)
{
uint16地址慢速;
uint16地址;
address slow = e2promaddress&0x00FF;
address shigh =(e2promaddress>>8)&0x00FF;
I2caRegs.I2CSAR = EEPROM_ADDR;//0x0050;
I2caRegs.I2CCNT = 3 ;
I2caRegs.I2CDXR =地址高;
I2caRegs.I2CDXR =地址慢速;
I2caRegs.I2CDXR = EEdata;
I2caRegs.I2CMDR.ALL = 0x2E20;//发送器模式-主控模式//启动
while (!I2cRegs.I2CSTR.bit.SCD);
I2caRegs.I2CSTR.bit.SCD = 1;
}