This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSPM0G1507:关于 I2C 目标模式切换方法

Guru**** 2834805 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1631664/mspm0g1507-about-the-i2c-target-mode-switching-method

部件号: MSPM0G1507

尊敬的专家:

切换的详细信息
中导出 禁用(端口高电平‑Z) 最终目的 启用(具有中断的 I2C 目标) 、和
中导出 启用(具有中断的 I2C 目标) 返回 禁用(端口高电平‑Z)

请确认以下几点 寄存器操作过程 是否适合每次过渡?

在切换过程中:

  • SCL/SDA 端口保持在高电平‑Z 状态 、和
  • I2C 外设的任何编程 清除挂起或意外中断 以便器件在转换后处于干净状态。

1) 配置 I2C 引脚、同时将端口保持在高电平‑Z 状态

  • PINCMx.PC = 0:断开外围设备
  • PINCMx.INENA = 0:禁用输入路径
  • PINCMx.PF = 0:未选择外围设备功能
  • PINCMx.HIZ1 = 1:启用高‑Z
  • PINCMx.PIPU/PIPD = 0:禁用内部上拉/下拉电阻器

2) 启用 I2C 目标模式之前的‑μ s 处理(推荐)

  • I2Cx.TFIFOCTL.RXFLUSH = 1:清空 RX FIFO
  • I2Cx.TFIFOCTL.TXFLUSH = 1:清空 TX FIFO

3) 启用目标模式

  • I2Cx.TCTR.ACTIVE = 1
  • I2Cx.TOAR.OAR = xx:配置目标自身地址

4) 将 SCL/SDA 连接到 I2C 外设

  • PINCMx.PF = xxh <PF value for I2C_SCL or I2C_SDA>
  • PINCMx.PC = 1:连接外围设备
  • PINCMx.INENA = 1:启用输入路径
  • PINCMx.HIZ1 = 0:禁用高‑Z

5) 配置中断

  • I2Cx.ICLR (1048h / 1078h / 10A8h) = 1
    清除所需的目标中断标志
  • I2Cx.IMASK (1028h / 1058h / 1088h) = 1
    仅启用所需的目标中断
  • NVIC_ICPR[n] = 1:清除挂起中断
  • NVIC_ISER[n] = 1:启用 IRQ

Target⇒高‑Z

1) 等待通信停止

  • I2Cx.TSR.BUSBSY:I2C 总线忙状态
    0 = bus idle

2) 禁用中断

  • I2Cx.IMASK (1028h / 1058h / 1088h) = 0
    屏蔽目标中断
  • I2Cx.ICLR (1048h / 1078h / 10A8h) = 1
    清除目标中断标志
  • NVIC_ICPR[n] = 1:清除挂起中断
  • NVIC_ICER[n] = 1:禁用 IRQ

3) 禁用目标模式

  • I2Cx.TCTR.ACTIVE = 0

4) 强制 SCL/SDA 为高电平‑Z

  • PINCMx.PC = 0:断开外围设备
  • PINCMx.INENA = 0:禁用输入路径
  • PINCMx.PF = 0:未选择外围设备功能
  • PINCMx.HIZ1 = 1:启用高‑Z
  • PINCMx.PIPU/PIPD = 0:禁用内部上拉/下拉电阻器

最好的注意、

IBUKI ENDO

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1) 配置 I2C 引脚、同时保持端口处于高电平‑

    我认为下面的代码可以删除

    • PINCMx.INENA = 0 :禁用 输入路径(因为输入模式也是高阻态,不会影响外部信号)
    • PINCMx.PIPU/PIPD = 0 :禁用内部上拉/下拉电阻器 (对于 I2C、通常具有外部上拉电阻器、因此不需要启用/禁用内部上拉电阻器)

    如果您对上述操作流程有任何问题、请告诉我。