This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
I2C_MasterTransmitter源码如下:
其中196行的I2C_MasterTransmitter函数源码如下:
问题1.
上图中的延时150uS是什么用意?
例程的IIC时钟是100000KHz即周期10uS,发送起始位后,IIC外设是应该会自动发送设备地址吧,7位设备地址+1位读写控制位+1位从设备ACK,共计需要9个SCL时钟即10uS,这里设置150uS,是为了确保下面的
status = handleNACK(base);这条语句能够检测到ACK位吗,也就是status将会为0x0000;
问题2.
如以上两图所示,第一张图FIFO中写入了eeprom数据写入地址,即以 //Example 1: EEPROM Byte Write,要写入数据的eeprom地址为0x0000,此时fifo中将会有2个数。
我不明白第二张图片while循环的功能。这个while是要发送eeprom的写入数据地址吗?也就是第一张图片中写入到fifo中的0x00,0x00?
若如此,第二张图片中while循环中的status检测为什么要return呢?数据是按照100KHz的SCL一位一位发的,如果这里在while循环中以10uS间隔不停判断是否收到ACK,那么在8bit数据发送过程中一定会检测到NACK,一旦检测到NACK就报错并且return结束函数运行了,这样不会有问题吗?
不知道我对这段代码理解的对不对?
问题3.
这里的9,是因为8bit数据+1bit的ACK共占用9个SCL吗?还有这里的(I2C_Params->NumOfAddrBytes + 2U),是指给发送这两个eeprom写入数据地址字节预留了一倍的可以尝试的发送时间吗?
问题4.
如上图所示,这里设置iic的CNT寄存器为3有什么意义呢?在这条语句之前调用的函数I2C_TransmitSlaveAddress_ControlBytes中,已经使能了repeat模式,
在该模式下,CNT无效
问题5.
请问以下例程,有没有详细的说明文档:
i2c_ex4_eeprom_polling
i2c_ex6_eeprom_interrupt
原来只有i2c_eeprom例程,感觉iic例程相比其他外设例程都要复杂些