IIC介绍(三)之主机介绍

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

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

      首先简要介绍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来表示起始信号已发送;im

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

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

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

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

      与之相似的,当stm32芯片做为主接收器时,它的示意图以下:


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

   而后介绍一些S3C2440的IIC框图


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

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


能够发现其与STM32的传输格式基本一致。

小结:

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