Part Number: MSP430FR5969
Hello,
I've recently been working on an I2C driver interface for one of my company's products. The control firmware is built on an MSP430FR5969 and utilizes eUSCI B0 configured for I2C.
I've put a great amount of effort into designing a high-speed non-blocking ISR state machine and so far it is entirely stable up until about 500KHz.
The firmware is configured for master only, and hardware configuration has been verified by our electrical engineering team.
The current issue is that I see the same Receive behavior no matter how the first byte transaction is configured. If I assert a UCTXSTT and react on a UCRX0IFG I receive two bytes, this I am aware is as intended. If I assert both (UCTXSTT | UCTXSTP) at the same time, even before enabling the I2C lines or the interrupts, I always receive one byte after a slave ACK. The User guide mentions that slave data is received following an ACK only if the UCTXSTT is not set; my question is, why am I still clocking in another byte? We have equipment that reacts differently to both Zero-Byte READs *and* WRITEs. How can I implement an entirely non-blocking zero-byte READ with the eUSCI module?
Also, are there any more detailed references on non-blocking I2C with the eUSCI? The TI examples I've been able to find have been severely limited and lack edge-case and error-condition logic. A FSM diagram would be incredible!
