I2C总线学习—查缺补漏—S3C2440的I2C控制器

I2C总线学习—查缺补漏—S3C2440的I2C控制器

                 学习了IIC总线协议的理论部分,觉得应该学习具体操作2440的IIC控制器,毕竟最终都是为了学习S3C2440,所以就把这一部分补上。 S3C2440的I2C接口有四种工作模式:主机发送器、主机接收器、从机发送器、从机接收机。其内部结构如下图所示。


          从上图可以看出,S3C2440提供4个寄存器来完成所有的IIC操作。SDA线上的数据从IICDS寄存器经过移位寄存器发出,或通过移位寄存器传入IICDS寄存器;IICADD寄存器中保存S3C2440当做从机时的地址;IICCON、IICSTAT两个寄存器用来控制或标识各种状态,比如选择工作工作模式,发出S信号、P信号,决定是否发出ACK信号,检测是否接收到ACK信号。下面详细接收各寄存器的用法。

IICCON寄存器IIC-Bus control register




注意事项:
  1. IIC中断发生在以下三种情况:当发出地址信息或接收到一个从机地址并吻合时,当总线总裁失败时,当发送/接收完一个字节的数据(包括响应位)时。当发出地址信息或接收到一个从机地址并吻合时产生中断,在中断处理函数中要准备发送或者接收数据,即读取或设备IICDS寄存器,或者发出P信号。当总线总裁失败时产生中断,在中断处理函数中决定时候延时后再次竞争总线等。当发送/接收完一个字节的数据(包括响应位)时产生中断,在中断处理函数中要准备下次要发送或者接收数据,即读取或设备IICDS寄存器,或者发出P信号。
  2. 基于SDA、SCL线上时间特性的考虑,要发送数据时,先将数据写入IICDS寄存器,然后再清除中断。清除中断,即向IICCON[4]写入0,也就是将SCL线拉高,此时产生一个上升沿,将移位寄存器中的数据发送到SDA线。至于先将数据写入IICDS寄存器,然后再清除中断,可能是数据稳定需要一个时间吧。在清除中断前要数据保持问的那个。
  3. 如果IICCON[5]==0,IICCON[4]将不能正常工作。所以,即使不使用IIC中断,也要将IICCON[5]设为1。

IICSTAT寄存器

IICADD寄存器

                        用到IICADD寄存器的位[7:1],表示从机地址。IICADD寄存器在串行输出使能位IICSTAT[4]为0时,才可以写入;在任何时候都可以读出。IICSTAT[4]为0时,禁止接收/发送功能,即此时SCL线被拉低。

IICDS寄存器

                      用到IICDS寄存器的位[7:0],其中保存的是要发送或已经接收到的数据。IICDS寄存器在串行输出使能位IICSTAT[4]为1时才可以写入;在任何时候都可以读出。IICSTAT[4]为1时,使能接收/发送功能,也就是释放了SCL线。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值