貌似有一部分人在IIC的读部分碰到问题,或许是有BUG你没发现。也许这些问题只有我这个菜鸟才会碰见,不过我还是要说说,希望能帮到像我一样的菜鸟。这一部分属于裸奔,干操作系统的同志可以避开了。 44b0的IIC控制器感觉跟其他片子有点不同。因为在读的时候需要对IICCDS读两次才能读出有效的数据。至于第一次读出的数据是什么呢? 仿真了多次,的确就是写在IICDS的24Cxx的器件地址。需要首先将他读出之后,再读一次才能接收到有效数据。这种解释正好符合了三星的官方例程。而有些书上则省略了第一次读,所以在仿真的时候第一次读出的数据往往是错误的。 这个问题困扰了我很久,因为开始我写的代码只读了一次IICDS就结束了,所以怎么也得不到有效的数据,总么弄都是错误,IIC搞了很久,直接有点绝望的感觉,没想到就因这个。
对于IIC控制器的操作感觉44B0已经优化到一定程度了,ACK,NOACK完全可以通过判断中断标志位来实现。够简便了啊。