如图所示:这个图是eUSCI_B配置成Master mode的图,如我用红色的笔写的,在发送模式下,收到从站ACK信号后,是不是每一个ACK后都会产生UCTXIFG0=1的中断吗?在从发送模式切换成接收模式后的第一个ACK信号还会产生UCTXIFG0=1的中断吗?请指教。
user4132520:
主UCTXIFG0=1的中断不是因为从回复ACK而产生的,而是因为主的数据从UCBxTXBUF移动到移位寄存器中而产生的,标明你可以向UCBxTXBUF填入下一个待发送数据,所以转入接收模式后不会产生这种中断
pinghui lin:
回复 user4132520:
用户手册是像你说的:UCTXIFG0 is set again as soon as the data is transferred from the buffer into the shift register.但是时序图却是将UCTXIFG=1设在ACK信号的后面,而且你可以看到NACK信号产生的中断也是在NACK信号的后面。
我的理解:UCTXIFG0中断的产生也应该在从站确认信号ACK来了后,才能发生。这样才能确保数据被接收后才能发送下一个数据,不然的话,从站没收到数据,你又往下发数据,能就会丢包。
user4132520:
回复 pinghui lin:
1.首先确认“从发送模式切换成接收模式后的第一个ACK信号还会产生UCTXIFG0=1的中断吗”这个问题,你有没有做过实验,是不是像我说的一样并没有产生这个中断
2.注意到芯片手册后面还有一句话“If there is no data loaded to UCBxTXBUF before the acknowledge cycle, the bus is held during theacknowledge cycle with SCL low until data is written into UCBxTXBUF.”
至于你说的丢包问题,我理解的是这样的,并不是说你把要发送的数据填入到TXBUF,就会立刻从线上被发出去,而是会等到合适的条件,比如收到ack才会被发出去,这个过程是由i2c硬件协议决定的,有关i2c协议的问题,你不用担心它的正确性,只需要把流程控制准确就行了,不要出现发送时TXBUF为空却不填入数,或者接收时收到数据没有读出之类的问题就好了