打印

使用硬件I2C中断方式如何实现多个从机器件的通讯?

[复制链接]
3336|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ipman|  楼主 | 2009-10-25 23:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前设计中硬件I2C总线挂了多个设备,为实现多个设备的读写,实用了非中断方式控制,这样系统实时性大大降低,需要等待到发送完成后才能进入下一流程,请教如使用中断方式操作多个I2C期间,如何操作?
如单片机正在通过中断方式发送/读取器件1,器件2需要发送/读取数据,如何避免总线紊乱?
我的构思是所有器件的发送数据统一发送到一个I2C发送缓冲区,主线程判断缓冲区有数据后启动发送,但不同器件地址如何发送?
另一种构思是将发送地址,长度,首地址指针放入发送队列,但如果发送过程中需要读取比较难以实现,请教大侠们是否碰到类似需求?

相关帖子

沙发
夜夜| | 2009-10-26 00:12 | 只看该作者
1、操作多个i2c设备,只是目标地址不一样,跟是否中断操作关系不大。
2、从你的问题来看,你的CPU应该是工作在i2c主模式,那么是否在收发状态由程序控制,可以置状态来避免冲突。
3、后面2个可以看成一个问题,即是如何传递地址,数据长度;这个有很多方法实现,待发送的数据条数总是有限制的,比如所是3条,那么就定义三条数据的缓存和相应的标记,3条都满了就需要等待有空的缓存区才可以操作;地址和数据长度可以放在缓存的开始几个字节。

使用特权

评论回复
板凳
ipman|  楼主 | 2009-10-26 11:11 | 只看该作者
结构体缓冲?
struct{
   u08 addr;
   u08 len;
   u08 *p;
}FIFO_I2C;

使用特权

评论回复
地板
ipman|  楼主 | 2009-10-26 11:13 | 只看该作者
发送一般没有问题,只是不同器件读取到的数据如何分配到不同单元?

使用特权

评论回复
5
夜夜| | 2009-10-26 23:53 | 只看该作者
1、缓存简单点的就是二维数组,结构的也可以,数据比较清楚 还需要有每条数据缓存是否为空的标记
2、读的不同器件的数据,可以通过定数据通讯的协议来识别;如每条数据的第一个字节都发本器件的地址

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

89

主题

550

帖子

4

粉丝