IIC(二)

在上一节中了解了IIC协议的基本内容和硬件接口,其实可以发现,虽然IIC控制简单(只有SCL和SDA两条线),但是IIC的控制时序还是有一点麻烦的,在使用IIC协议操作设备时有两种方式,一种使用GPIO来模拟SDA和SCL,这时候就要严格按照上一节中IIC的时序要求来操作GPIO,比如IIC协议的数据时高位先行,那么就要把要发送的数据一位一位的进行拼装,然后将SCL的gpio引脚拉低,将数据发出去之后再将SCL拉高这样来模拟IIC协议的时序。另一种就是使用IIC控制器,IIC控制器会帮助我们发出那些复杂的时序,而我们要做的就是操作IIC控制器的某些寄存器来使它为我们来服务,在jz2440开发板进行IIC的实验也是实验IIC控制器来进行的,就先来了解一下IIC控制器。
1、IIC控制器
在这里插入图片描述

1、上面这张图中包含了IIC控制器的一些寄存器,寄存器也不是很多,首先SCL时钟它是根据IICCON寄存器来配置系统时钟PCLK得到的,
2、IICSTAT是用来发出开始信号、结束信号、ACK等等
3、IICDS用来写入数据

jz2440开发板的IIC总线可以支持四种模式

  1. 作为主设备发送数据
  2. 作为主设备接收数据
  3. 作为从设备发送数据
  4. 作为从设备接收数据
    2、对ACK的要求
    为了完成一个字节数据的传输,接收设备必须向发送设备发送一个响应位,也就是ACK。一个字节数据需要8个时钟,ACK应该在第9个clk发出,在主机发出去8bit的数据之后就会把SDA拉高释放SDA,这个时候从机会把SDA拉低向主机发送ACK,主机检测到SDA被拉低就表示从机收到了数据,可以继续发送。ACK功能位可以通过IICSTAT寄存器来选择启动或者禁用,
    在这里插入图片描述
    3、模式
    在执行任何IIC Tx / Rx操作之前,必须执行以下步骤。
    1.如果需要,在IICADD寄存器上写入自己的从机地址。
    2.设置IICCON寄存器。
    a)使能中断
    b)定义SCL周期
    3.设置IICSTAT以启用串行输出
    在这里插入图片描述
Master Tx模式
1、配置为master Tx模式
2、写从地址到IICDS寄存器
3、写0xf0到ICISTAT寄存器发出start信号,IICDS寄存器中的数据就会被发送出去
4、是否有ACK应答,如果没有ACK的话表示从设备不存在,直接结束,发出stop信号
5、在第9个clk接收到ACK并且接收到中断,SCL被拉低占用IIC总线,如果想要结束通信,写0xD0到IICSTAT发出stop信号,清除中断位,等待结束信号生效
6、继续发送数据,写下一个数据到IICDS寄存器中,清除中断标记,恢复IIC操作,IICDS寄存器中的数据就会被发送出去
7、重复第4步操作,检测是否有ACK......

在这里插入图片描述

Master Rx模式
1、配置IIC控制器为master Rx模式
2、写从机地址到IICDS寄存器
3、写0xB0到IICSTAT寄存器,表示start信号,同时从设备地址将会被发送出去
4、检测ACK响应,检测到ACK并且想结束接收数据写0x90到IICSTAT发出结束信号,清除中断位,等待结束信号生效
5、继续接收数据,从IICDS寄存器中读取新的数据,清除中断位恢复IIC操作,读取下一个数据
6、重复第4步操作

从上面的过程图可以看出在使用IIC控制器的情况下,大多数的操作IIC控制器都会帮我们执行,而我们需要做的只是去操作几个寄存器而已,在这一节中熟悉了IIC控制器的基本操作之后,在下一节中来实际使用IIC控制器进行编写程序。

发布了33 篇原创文章 · 获赞 2 · 访问量 1027

猜你喜欢

转载自blog.csdn.net/weixin_41791581/article/details/103058994
IIC
今日推荐