关于I2C控制器的几个疑问

您好,最近在使用DSP6713 的I2C控制器时发现几个问题,请教下各位,还望赐教:

1.向I2C命令寄存器中写入命令0x2420时,通过memory观察命令寄存器地址,发现只写进去了0x0420,如果强行再次写入0x2420时,该寄存器内容为0x2420,请问这是正常的么?(停止命令也一样)

2.I2C初始化时,需要增加将状态寄存器STR中的BB位写1清零的操作么?

3.在设置II2C为Master模式,处于接收状态时,RM=0情况下,采用轮询方式接收数据, 手册中的流程图中显示需要判断状态寄存器的ARDY位,当ARDY位为1时,可以设置停止位STP=1,然后读取I2CDRR最后一个字节数据。

但我在按照此流程图实际编码调试时,发现,当我要接收多个字节的情况下,接收完第一个字节时,ARDY就置1了,这个ARDY位在接收条件下,是每接收1个字节就会变为1么,那么我要接收多个字节的时候,ARDY怎么再变为0呢?

另外在发送状态时,ARDY的含义也是发送了一个字节就置1么?ARDY的含义到底是什么?

ARDY  NACK  ICRRDY (ICXRDY)这些状态位在收发过程中变化的先后是什么样的呢?

4.我采用轮询方法访问I2C,如果我在该发送停止位的时候(向命令寄存器STP位写1)被中断打断,写停止位时间会晚1ms左右,会对总线通讯有影响么,会造成BB一直是忙位的情况么?

5.我遇到过BB一直为1,向命令寄存器写停止位也不恢复的情况(复位I2C控制器可以BB=0),如果发生这种情况,我向I2C状态寄存器BB位写1清零是不是也没有实际作用,只是改变了状态寄存器的值,总线忙的实际状态没有改变呢?

问题有点多,麻烦大家了,谢谢。

29 个回复