Hi, folks,
I encountered a lot of bizarre problems and questions when using C2000's IIC module.
And after struggling for a long time, it's time to the conclusion...
1.
I thought that, is the following statement stands when using IIC module, is it true?
At each session: start condition --> whatever else --> stop condition, afterwards, I must use IRS=0; IRS=1;, in order to start another new session?
2.
At least this IIC module, is out of normal, for example, although in a sense is reasonable to IC/register's point of view, but in another point of view of trying
to programming this IIC module, it's hard to overcome to let IIC work properly.
"TX interrupt is always preceding AAS interrupt to occur at the very beginning of enabling IIC, and no way to overcome by setting IIC registers, instead, software only".
How should I do?
3.
I performed a write and then a read: MOD=0x6E20, MOD=0x6C20.
But I still stuck on the problem: each time I issued a write:MOD=0x6E20, I have no idea why clock is still held low by master since stop condition didn't occur yielding the read:MOD=0x6C20 cannot execute. (NOTE. acks are issued, ack bit is low by slave and then high plus the last nack one, data bus high afterwards, but clock still low, 400KHz). Why inconsistency?
Is anybody kindly to help me this........and another curcial one:
4.
IIC module might sometimes halt in the course of IIC communication. It can sometimes run well in this "system communication test", but it will sometimes be bus lowed and stuck in the same test surroundings. why is it so vulnerable? How do I keep ti alive?
5. The interrupt code did occur: code 0, in which condition will it happen?
Another one, if events has priorities to report to user, that is, in ISR, multiple events queued and the most high priority will manifest/clear first.
If it were true, I suggest that we can have a better IIC module by without being programmable, i.e., ASIC type.
6. It's time to update the IIC datasheep to let it more readable and unambiguous.
. It is must have: some customers seriously suggested since philips' do.
The interrupt events table.
int \ event (Start) (Addr) (R/W) (DAT) (N / ACK) (Restart / Stop)
AL V V V V V x
NACK x
ARDY absolutely not
XRDY it depends
RRDY something like that
SCD
AAS
And BTW, till now, is there any C2000 I2C module's bugs or unreasonable registers/parameters usage were proposed?
Thanks in advance for your answers.