现在遇到很多用户,通讯要求我们是从机I2C,仿照EEPROM的方式读取和写入。
当读的时候,从机收到地址,将地址对应的数据放到寄存器中,主机再发时钟就可以读回。
但是当要求读的数据是short型2个字节,就会遇到数据一致性的问题。
例如主机发来地址,从机先返回高字节,然后返回低字节。
第一种方法:
如果从机在中断中直接读取2个字节数据,那么先发出去的高字节,这个时候主程序把低字节变了,那么再发低字节,数据就不一致了。
第二种方法:
放到主程序处理,当从机在中断中收到地址后,置标志位,告诉主循环,主循环不再更新数据,知道这一帧数据处理完毕。好处是数据一致性有保证,坏处是主循环要求很快,MCU来不及告诉主循环不要更新数据。
大家有什么好招介绍一下?
|