Part Number:TMS320F28374SOther Parts Discussed in Thread:C2000WARE
在TI例程中,看到了如下两个语句:
for(i=I2C_Params->NumOfAddrBytes-1;i>=0;i–)
{
I2C_putData(base, (temp >> (i*8U)) & 0xFF);
}
I2C_sendStartCondition(base);
for循环里应该是把数据送入I2C_O_DXR,数据发送寄存器
这里有几个困惑:
1.这里使用for循环来给DXR寄存器赋值是什么意思呢?for循环内,下一次送入的数据岂不是会把上一次送入DXR寄存器的数据覆盖了吗?
2. 最后一个语句是发送START启动数据发送信号,这个是不是应该放在for循环的前面?因为从I2C的数据发送时序图来看,先发送了START后,才开始传输DXR中的数据的
3. 这里的移位操作为啥是先发送temp的高8位,然后逐步右移8位呢
Yale Li:
具体是哪个例程?提供一下路径
,
user980814:
感谢大佬回复。
该TI例程是位于C2000Ware_4_02_00_00\driverlib\f2837xs\examples\cpu1\i2c里的i2c_ex6_eeprom_interrupt工程
相关截图如下
,
Yale Li:
1. 请看一下spruhx5g_TMS320F2837xS Microcontrollers Technical Reference Manual (Rev. G)第2205页19.6.2.9 I2CDXR Register:
数据被写入I2CDXR寄存器后,就被送入了发送移位寄存器I2CXSR;
如果使用的是FIFO模式,I2CDXR则相当于是发送FIFO缓存器;
2. 使用的是FIFO模式:
i2cLib_FIFO_master_interrupt.c,第143行:
3. 我已经咨询了相关工程师:
https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1259661/tms320f28374s-function-i2c_transmitslaveaddress_controlbytes-in-i2c_ex6_eeprom_interrupt
,
user980814:
感谢大佬回复!
,
Yale Li:
客气了~相关的工程师正在休假,我们等一下他的回复。