-
支持!!!
-
现在可以下一个结论了,现在已经调通了,地址发出后没有ack的时钟是正确的,在操作的时候一定要按照手册上介绍的顺序来,在发送start后等UCTXIFG置位后一定要写入寄存器地址,这时候第九个clk才能出来,同时也是这个时候开始判断uctxstt位是否已经复位。顺便说明在不开中断的时候UCTXIFG需要软件复位,但是接收中断不需要软件复位。
-
而且为什么没有发出ack的时钟,所以无法使用判断uctxstt位是否复位来判断从机是否响应地址
-
那有没有什么标志位标志着发送或者接收已经ok,发送能不能用busy位来判断,我觉得接收的话只判断接收的中断标志位应该就可以了,但是事实好像不是这样
-
而且按照我的意思理解当UCTXIFG置位的时候并不是buf中的数据已经发送,只是buf中的数据刚刚进入移位寄存器,如果这时候马上写入下一个数据我发现并不会发送任何东西,只有延时后才会有东西显示
-
见图,这是发出start后的波形,地址是0xee,写数据。可以看到没有ack的clk
-
从机接的是气压传感器,在发地址的时候这个问题就存在了,主机少发了一个clk,没有给从机应答的机会
-
我描述的不够清楚吗?大家有没有碰到过i2c这样的问题