本发明涉及计算机通信领域,尤其是一种实现i2c重复读写控制的装置。
背景技术:
在i2c(inter-integratedcircuit内部集成电路,一种标准接口电路,是由philips公司提出发明的)的某些应用场合比如面板控制(包括led显示和按键扫描),需要主控制器按照一定间隔读取i2c面板的按键输入值,判断是否有按键输入,由此必然大量耗费主控制器的处理时间。
鉴于上述技术问题,现有技术实现了“一种实现自动读写内部集成电路设备的装置和方法”(公开号cn1558332),其公布了一种用硬件实现而非cpu模拟的方式读写i2c设备。该现有技术如果需要按照一定间隔重复读写i2c设备通常做法如下:主控制器每隔一定时间向i2c控制器发送读写命令,等待i2c控制器返回操作完成状态,如果i2c控制器返回出错状态,则执行错误处理。如果该操作是读操作,主控制器还需判断i2c控制器返回的数据是否有效以便触发下一个事务处理。由于i2c设备为慢速设备,此方法占用主控制器大量处理时间,间隔越小,则占用的处理时间越多。
技术实现要素:
为解决上述技术问题,本发明的目的是提供占有cpu时间极少的一种实现i2c重复读写控制装置。
本发明采用的技术方案是:
一种实现i2c重复读写控制的装置,包括主控制器、重复读写控制器、i2c控制器,该重复读写控制器连接在主控制器与i2c控制器之间;
主控制器通过重复读写控制器向i2c控制器发送读写命令,i2c控制器直接关联外部i2c设备以执行所述读写命令;
i2c控制器根据执行结果向重复读写控制器反馈完成状态信号、错误状态信号以及所采集的数据;
重复读写控制器对i2c控制器反馈的信号进行识别且仅仅反馈有效信号给主控制器。
其中,所述重复读写控制器包括寄存器模块以及与该寄存器模块电连接的中断控制器、数据比较器、启动次数计数器、定时器、启动信号产生器、有效状态计数器;
该寄存器模块通过内部总线与主控制器电连接以用于接收主控制器发来的配置寄存器以及返回寄存器内容给主控制器;
启动次数计数器、定时器、启动信号产生器依次连接,中断控制器、数据比较器、启动信号产生器、有效状态计数器、寄存器模块皆与i2c控制器连接,中断控制器输出端用于输出中断信号给主控制器。
进一步,所述寄存器模块包括启动次数寄存器、启动寄存器、间隔寄存器;
该启动次数寄存器与启动次数计数器连接,启动次数寄存器用于设置发送次数,每发送成功一次启动次数计数器会自动加一,如果达到启动次数寄存器设置的次数,则停止发送启动信号;如果计数寄存器为0,则一直循环发送;
该启动寄存器分别与启动次数计数器、定时器连接,启动寄存器用于控制产生启动信号;间隔寄存器与定时器连接以用于设置start信号的发送周期,定时器根据此间隔寄存器配置产生周期性的使能信号给启动信号产生器。
进一步,所述寄存器模块包括中断状态寄存器,中断状态寄存器分别与中断控制器、有效状态计数器连接,该中断状态寄存器包含三个中断信息:分别是读到有效状态,操作出错以及计数次数满。
进一步,所述寄存器模块包括读写寄存器,读写寄存器分别与i2c控制器、有效状态计数器连接,用于指示当前操作是写操作还是读操作。
进一步,所述寄存器模块包括期望数据寄存器,期望数据寄存器与所述数据比较器连接,用于比较i2c控制器读回数据,如果比较成功,由中断控制器产生中断信号给主控制器。
进一步,所述寄存器模块包括读回数据寄存器,读回数据寄存器与i2c控制器连接,用于主控制器未及时响应中断的情况下可以存储i2c设备的连续有效状态。
进一步,所述寄存器模块包括有效状态数寄存器,该有效状态数寄存器与有效状态计数器连接,以用于记录有效状态计数器所存储的有效状态数目。
本发明的有益效果:
本发明通过在主控制器和i2c控制器之间增加了一个重复读写控制器,来代替主控制器等待和处理对i2c控制器的读写命令,仅仅反馈有效信号给主控制器,即不会浪费主控制器的处理时间,大大解放主控制器的负荷。
附图说明
下面结合附图对本发明的具体实施方式做进一步的说明。
图1是本发明的原理框图;
图2是重复读写控制器的内部结构图;
图3是本发明的流程图。
具体实施方式
如图1所示,为本发明的一种实现i2c重复读写控制的装置,包括主控制器、重复读写控制器、i2c控制器,该重复读写控制器连接在主控制器与i2c控制器之间。
本发明的工作原理为:主控制器通过重复读写控制器向i2c控制器发送读写命令,i2c控制器直接关联外部i2c设备以执行所述读写命令;
i2c控制器根据执行结果向重复读写控制器反馈完成状态信号、错误状态信号以及所采集的数据;
重复读写控制器对i2c控制器反馈的信号进行识别且仅仅反馈有效信号给主控制器。
作为本发明的重要发明点,在于重复读写控制器的结构设计,重复读写控制器包括寄存器模块以及与该寄存器模块电连接的中断控制器、数据比较器、启动次数计数器、定时器、启动信号产生器、有效状态计数器;如图2所示。
该寄存器模块通过内部总线与主控制器电连接以用于接收主控制器发来的配置寄存器以及返回寄存器内容给主控制器;
启动次数计数器、定时器、启动信号产生器依次连接,中断控制器、数据比较器、启动信号产生器、有效状态计数器、寄存器模块皆与i2c控制器连接,中断控制器输出端用于输出中断信号给主控制器。
作为本技术方案的进一步细化,所述寄存器模块包括启动次数寄存器、启动寄存器、间隔寄存器;
该启动次数寄存器与启动次数计数器连接,启动次数寄存器用于设置发送次数,主控制器只需设置一次即可。每发送成功一次启动次数计数器会自动加一,如果达到启动次数寄存器设置的次数,则停止发送启动信号;如果计数寄存器为0,则一直循环发送;
该启动寄存器分别与启动次数计数器、定时器连接,启动寄存器用于控制产生启动信号;间隔寄存器与定时器连接以用于设置start信号的发送周期,定时器根据此间隔寄存器配置产生周期性的使能信号给启动信号产生器。
作为本技术方案的进一步完善,所述寄存器模块包括中断状态寄存器,中断状态寄存器分别与中断控制器、有效状态计数器连接,该中断状态寄存器包含三个中断信息:分别是读到有效状态,操作出错以及计数次数满。
作为本技术方案的进一步完善,所述寄存器模块包括读写寄存器,读写寄存器分别与i2c控制器、有效状态计数器连接,用于指示当前操作是写操作还是读操作。
作为本技术方案的进一步完善,所述寄存器模块包括期望数据寄存器,期望数据寄存器与所述数据比较器连接,用于比较i2c控制器读回数据,如果比较成功,由中断控制器产生中断信号给主控制器。
作为本技术方案的进一步完善,所述寄存器模块包括读回数据寄存器,读回数据寄存器个数为n,n为大于等于1的正整数,n的大小由系统设计中根据需要自行定义。读回数据寄存器与i2c控制器连接,用于主控制器未及时响应中断的情况下可以存储i2c设备的连续有效状态。
作为本技术方案的进一步完善,所述寄存器模块包括有效状态数寄存器,该有效状态数寄存器与有效状态计数器连接,以用于记录有效状态计数器所存储的有效状态数目。
如图3所示,本发明的工作流程为,上电初始化,先配置i2c控制器,再配置重复读写控制器,并设置好启动寄存器,中断控制器检测i2c控制器是否有中断信号产生,没有中断信号产生就循环检测,如果有中断信号产生则进一步判断读操作是否正确完成,没有完成则判定出错,若读操作正确完成则进一步对读取的数据与期望数据寄存器存储的数据进行比较,比较不成功就返回检测前述中断信号,比较成功则读取该有效状态,并判断有效状态是否已读完,未读完就继续读取有效状态,若已读完则执行下一个事务,并返回检测前述中断信号。
以上所述仅为本发明的优先实施方式,本发明并不限定于上述实施方式,只要以基本相同手段实现本发明目的的技术方案都属于本发明的保护范围之内。