IIC介绍(三)之主机介绍

来源:互联网 发布:拜占庭东罗马知乎 编辑:程序博客网 时间:2024/06/06 11:40

      IIC可以分为三个部分,分别是IIC总线、IIC主机和IIC从机。这里对IIC主机进行简要介绍。

      本文以STM32F40X和S3C2440的IIC控制器为例来介绍。

      首先简要介绍STM32F40X的IIC框图。

      

      由上图可知,在STM32F40X中,IIC的SCL线的时钟信号是由IIC接口根据时钟控制寄存器(CCR)控制,控制的参数主要为时钟频率。CCR寄存器中12位的配置因子CCR与IIC外设的输入时钟源(PCLK1)共同作用来产生SCL时钟。

      IIC的SDA信号来源于数据移位寄存器,而数据移位寄存器的数据来源于数据寄存器(DR)、地址寄存器(OAR)以及PEC寄存器。

      最终,IIC的工作模式是根据配置的控制寄存器(CR1/CR2)的参数而改变。而当IIC工作时,“状态寄存器(SR1和SR2)”会根据IIC的工作状态而被控制逻辑所改变。因此,IIC的工作状态便可通过读取状态寄存器相关的寄存器位而获得。

 

    由上图可知,在芯片发出对应信号后,如果IIC总线上发生了对应的响应,则状态寄存器的对应位会被改变,比如:

    当STM32芯片产生起始信号后,事件“EV5”便会发生,也就是说SR1寄存器的“SB”会被置1来表示起始信号已发送;

    当从机对主机所发送的信号产生响应时,事件“EV6”和事件“EV8”便会发生,也就是说SR1寄存器的“ADDR”位和“TXE”位会被置1;

   往IIC的“数据寄存器DR”写入要发送的数据,则TXE位会被重置为0,而在IIC将DR中的数据通过SDA信号线发送出去后,“EV8”事件便会发生,也就是说TXE位会被置1,如果此时ITEVFEN和ITBUFEN这两位均置1,则STM32芯片便会产生一个中断。重复上述过程便可实现多字节数据的发送;

    如果在上次数据传输结束前TXE已置1但数据尚未写入DR寄存器中,则BTF位会被置1,而接口会延长SCL的低电平,直到IIC_DR寄存器被写入,从而将BTF位清零。

      在发送数据完成后,当IIC总线发生了上述的”EV8_2“事件后,软件会将STOP位 置1 从而生成一个停止位。

      与之类似的,当stm32芯片作为主接收器时,它的示意图如下:


          其中,EV5、EV6、EV7和EV9都可在软件未完成时保持SCL为低电平来等待软件完成对应的事件。

   然后介绍一些S3C2440的IIC框图


      上面两幅图分别为S3C2440作为主机时发送模式下和接收模式下的两个流程图,可以发现其数据之间的衔接是通过中断来判断。

       而S3C2440的数据传输与接收的格式如下:


可以发现其与STM32的传输格式基本一致。

小结:

        在裸机的情况下,S3C2440的IIC与STM32的IIC传输机制基本一致,不过是S3C2440偏向于通过中断来进行数据传输过程中状态的判断,而STM32是直接通过一定的事件来进行判断,但实质两者的区别不大。