为什么带i2c接口的arm cpu不需要时序控制了?
比如,控制单片机,用gpio模拟ic,需要写函数,对clk线拉高拉低,起始条件,终止条件,ACK。void Ack(void) /*应答位*/
{
Sda=0;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
Scl=1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
Scl=0;
}
但是如果你的cpu带了I2c接口,我发觉driver里边看不到什么起始条件,ACK等等了,直接查询I2C的寄存器,ready就把值读过来就好了,起始条件,ack什么完全不用,这个是硬件帮你做好了,还是 ?那所谓的带I2C接口,就是硬件帮你把起始条件什么做好了的意思吗? 这和呼风唤雨一样的道理,所以不再需要起始、停止等信号,能控制它是因为CPU想控制,要去控制 回复【1楼】gold
这和呼风唤雨一样的道理,所以不再需要起始、停止等信号,能控制它是因为cpu想控制,要去控制
-----------------------------------------------------------------------
呼风唤雨? I2C控制器自动做了,设置好频率等参数,写数据寄存器就好了 我还发现带UART接口的也不需要软件去做时序控制。。 回复【3楼】rtems
-----------------------------------------------------------------------
对,这个其实就是控制器的问题了./emotion/em011.gif ack判断还是要做的吧,其余的硬件上比较全面,如果没有ack判断,会死在IIC的。 ACK有状态寄存器的状态位指示,不需要检测时序,读寄存器就可以了。 回复【7楼】rtems
ack有状态寄存器的状态位指示,不需要检测时序,读寄存器就可以了。
-----------------------------------------------------------------------
也就是连ack都硬件发了,是吗 硬件帮你做了很多事,不然要I2C控制器干吗 atmel的TWI(IIC),只需要操作相关寄存器即可,所有时序都是硬件自动完成。 硬件IIC,通讯过程中,切换时钟会怎样?
还是用口线模拟吧。 回复【11楼】TANK99
硬件iic,通讯过程中,切换时钟会怎样?
----------------------------------------
通讯过程中,时钟切换是无效或者延迟到通信完毕才生效的。 下图是PIC12的硬件I2C,CPU只需要访问图中的寄存器就可以完成I2C通信了,时序控制都由这些硬件来完成。
http://cache.amobbs.com/bbs_upload782111/files_50/ourdev_713768O31ETW.PNG
(原文件名:PIC_I2C.PNG) 回复【8楼】winmenaruto
回复【7楼】rtems
ack有状态寄存器的状态位指示,不需要检测时序,读寄存器就可以了。
-----------------------------------------------------------------------
也就是连ack都硬件发了,是吗
-----------------------------------------------------------------------
是的,不光发ACK,也能检测ACK。 i2c接口不错,省了我们很多,我连i2c协议 都不用了解了。。直接查询状态,ready就读,
页:
[1]