USER GUIDE / PERIPHERALS / I2C / DISABLE I2C

禁用I2C

添加了寄存器 I2C_ENBST 是为了允许软件明确地确定硬件何时完全关闭,以响应 I2C_ENABLE 寄存器的 0 位从 1 设置为 0。

步骤

  1. 定义一个定时器间隔(tI2C_poll),等于系统中使用并由 I2C 支持的最高 I2C 传输速度的信号周期的 10 倍。例如,如果最高的 I2C 传输模式为 400 kb/s,则 tI2C_poll 为 25 us。
  2. 定义一个最大超时参数 MAX_T_POLL_COUNT,这样如果任何重复的轮询操作超过这个最大值,就会报告一个错误。
  3. 执行一个阻塞线程/进程/函数,防止软件启动任何进一步的 I2C 主机事务,但允许完成任何挂起的传输。
注意:如果 I2C 被编程为仅作为 I2C 从机,则可以忽略此步骤。
  1. 变量 POLL_COUNT 被初始化为 0。
  2. 将 I2C_ENB 寄存器的 0 位设置为 0。
  3. 读取 I2C_ENBST 寄存器,并测试 I2C_ENABLE[0]。将 POLL_COUNT 加 1。如果 POLL_COUNT >= MAX_T_POLL_COUNT,请使用相关错误代码退出。
  4. 如果 I2C_ENBST[0] 为 1,则休眠 tI2C_poll 并继续上一步。否则,请使用相关成功代码退出。

总结刷新 TX FIFO 的条件

  1. 当 I2C_ENABLE[0] 设置为 0 时,TX FIFO 在复位时刷新并保持。
  2. TX_ABRT 事件发生。TX FIFO 仍然处于这种刷新状态,直到读取寄存器 I2C_CTXABT。一旦执行了这个读取,TX FIFO 就准备从 APB 接口接收更多的数据字节。
  3. 当作为从机时,从机收到了一个读取命令并且有一些数据存在于 TX FIFO 中,所以从机发出一个 TX_ABRT 中断来刷新 TX FIFO 中的旧数据。

生成 START, STOP 和 RESTART 的条件

只有当用户通过设置写入 I2C_DC 寄存器的命令的第 9 位(Stop 位)来明确请求时,才会生成 STOP 条件。自然地,如果发送的最后一个字节没有设置第 9 位(Stop 位),如果 TX FIFO 变为空,组件不会一个生成 STOP;在这种情况下,组件将 SCL 保持为低电平,使总线停止,直到 TX FIFO 中有新数据可用。

图 1 说明了 I2C 作为主机发送器运行时,TX FIFO 变空时的行为,并显示了 STOP 条件的生成。

主机发送器— Tx FIFO 空/停止生成
图 1 主机发送器— Tx FIFO 空/停止生成

图 2 说明了 I2C 作为主机接收器运行时,TX FIFO 变空时的行为,并显示了 STOP 条件的生成。

主机接收器— Tx FIFO 空/停止生成
图 2 主机接收器— Tx FIFO 空/停止生成

图 3 和图 4 说明了用户可以控制 I2C 总线上 RESTART 条件生成的配置。如果设置了 I2C_DC 寄存器的第 10 位(Restart),并且重启功能被使能(IC_RESTART_EN=1),则在向从机写入或读取数据字节之前会生成一个 RESTART。如果重启功能未被使能,则会生成一个 STOP 后跟一个 START 来代替 RESTART。图 3 说明了作为主机发送器运行期间的这种情况。

主机发送器— 设置了 I2C_DC 的重启位
图 3 主机发送器— 设置了 I2C_DC 的重启位

图 4 说明了相同情况,但是在作为主机接收器运行期间。

主机接收器— 设置了 I2C_DC 的重启位
图 4 主机接收器— 设置了 I2C_DC 的重启位

图 5 说明了作为主机发送器的运行,其中设置了 I2C_DC 寄存器的停止位,并且 Tx FIFO 不为空。

主机发送器— 设置了 I2C_DC 的停止位/Tx FIFO 不为空
图 5 主机发送器— 设置了 I2C_DC 的停止位/Tx FIFO 不为空

图 6 说明了作为主机发送器的运行,其中加载到 Tx FIFO 的第一个字节被允许在重启位设置时变空。

主机发送器— 加载到 Tx FIFO 的第一个字节允许为空,重启位设置
图 6 主机发送器— 加载到 Tx FIFO 的第一个字节允许为空,重启位设置

图 7 说明了作为主机接收器的运行,其中设置了 I2C_DC 寄存器的停止位,并且 Tx FIFO 不为空。

主机接收器— 设置了 I2C_DC 的停止位/Tx FIFO 不为空
图 7 主机接收器— 设置了 I2C_DC 的停止位/Tx FIFO 不为空

图 8 说明了作为主机接收器的运行,其中允许在 TxFIFO 后加载的第一个命令为空,并设置了重启位。

主机接收器—在 TxFIFO 后加载的第一个命令允许为空/重启位设置
图 8 主机接收器—在 TxFIFO 后加载的第一个命令允许为空/重启位设置