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.

[参考译文] LAUNCHXL-F28379D:带有 SysConfig 的 I2C --无停止条件

Guru**** 2465890 points
Other Parts Discussed in Thread: SYSCONFIG, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1364341/launchxl-f28379d-i2c-with-sysconfig----no-stop-condition

器件型号:LAUNCHXL-F28379D
主题中讨论的其他器件:SysConfigC2000WARE

您好!

我要在379D 上使用 I2C 模块。

我考虑了 i2c_ex1_loopback 示例、但无法直接下载(在更改软件包并为 SDA 和 SCL 插入适当的引脚时的编译问题)。

我使用 SysConfig 重新创建了环回

-发射器模式

– 每个数据字节8位

-数据计数= 2 (默认情况下重复模式关闭)

-目标地址= 0x2

-自有地址= 0x01

- Loopbackmode =开

- FIFO 模式

-上拉开漏

在计时器溢出时、我 在缓冲区中发送 Put 数据、发送启动条件、然后为下一次准备数据

我在 FIFO 中断中读取接收到的数据:

我从不发送停止条件、因为这必须在非重复模式下在发送2个字节后自动生成  

我很惊讶、因为在前两个传输字节之后、SCL 永远不会返回到高电平  (下面的橙色曲线)

连接数字分析仪时、我实际上从未看到任何停止条件:

当取消激活环回并请求分析仪作为从器件(0x02)时、此从器件无法确认主器件消息:

上拉电阻器似乎有问题:

有人能帮我吗?

谢谢你

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

    您好、Vincent

    Unknown 说:
    我考虑了 i2c_ex1_loopback 示例、但无法直接下载(更改软件包并为 SDA 和 SCL 探测适当的引脚时出现编译问题)。

    在 C2000Ware 封装之间、如果您选择了相同的器件并使用了 I2C 特定引脚、则应该不会出现编译错误。 我建议确保始终使用最新版本进行开发(如果可选)。

    除了内部上拉电阻外、I2C 还需要外部上拉电阻。 请参阅此 应用手册 、了解如何选择拉电阻器以及过去讨论过相同问题的已解决 E2E。 在 I2C TRM 部分、我们建议电阻值为2.2千欧。

    此致、

    Aishwarya.

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

    您好、Aishwarya、

    谢谢您的回答。

    感谢您提供应用手册、我将尝试使用外部电阻器。

    但我想了解为什么内部电阻器不起作用,而只对 SCL(对 SDA 没有问题):即使该值不是最好的,考虑到响应时间,例如,为什么 SCL 线不返回高电平后的 ACK ? 在进行任何传输之前、空闲状态为高电平。

    配置是否低于我必须选择的配置?

    编辑:我确认:这不是一个上拉问题。 使用外部上拉电阻器时、情况也是如此。 我尝试断开内部上拉电阻器、它的作用也是如此。 我认为微控制器将 SCL 拉至 GND 是我不理解的原因

    Edit bis:TI 示例的问题不是编译、而是 SysConfig 中的打包切换(无法使用 GPIO……我不想进一步)

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

    Vincent

    I2C (以及 PMBus)使用开漏引脚、这些引脚只能将通信驱动为低电平。 如果线路未由开漏配置主动驱动为低电平、SDA 和 SCL 上的上拉电阻器会将这些线路拉至高电平、前提是 SDA/SCL 的高电平和低电平电压正确(可在数据表中找到)。 确保同时使用内部和外部上拉电阻器。 更多信息、请参阅 TI 上有关 I2C 的许多资源(包括共享的应用手册)。 在 GPIO 配置方面、SysConfig 设置看起来是正确的。

    Unknown 说:
    /support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1364341/launchxl-f28379d-i2c-with-sysconfig----no-stop-condition/5209255编辑 bis:TI 示例的问题不在于编译、而在于 SysConfig 中的封装切换(无法使用 GPIO……我没找别的地方)

    请参阅以下主题、了解如何解决与 SysConfig 相关的问题: (+) TMS320F280025C:SysConfig:嵌入式 CLI 参数无法正常工作

    此致、

    Aishwarya.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="573843" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1364341/launchxl-f28379d-i2c-with-sysconfig----no-stop-condition/5211340 #5211340"]I2C (以及 PMBus)使用开漏引脚、该引脚只能将通信驱动为低电平。 假定 SDA/SCL 的高电平和低电平电压正确(可在数据表中找到)、当线路未由开漏配置主动驱动为低电平时、SDA 和 SCL 上的上拉电阻器会将这些线路拉至高电平[/报价]

    当然、我知道开漏的用途

    确保您使用的是内部和外部上拉电阻。 有关更多信息、请参阅 TI 上有关 I2C 的许多资源、包括共享的应用手册[/QUOT]

    你告诉我怎么做,但你不告诉我为什么。 为什么我们必须同时连接这两者? 我没有在共享的应用手册中看到解释(很抱歉、我在阅读时漏掉了此详细信息)

    当然,我遵循你的建议,但再次,它做了同样的:见下文, SCL 从来没有回到高水平

    我设法将 TI 示例引入 launchxl 中、但遗憾的是、通信是连续的、并采用重启的条件。 我看不到保姆停止条件

    因此、我真的认为我不了解软件中的某些重要内容、而不了解硬件中的重要内容。

    我加入我自己的示例、如果您有时间看看(您可以直接在 LANCHXL 上运行它)

    感谢您的支持。 文森特。

    e2e.ti.com/.../7823.TISupport.zip

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

    您好、 Aishwarya

    我真的希望我今天能有一些答案...我不知道我是否足够清楚。

    我想我们可以通过回答这个问题来取得进展:为什么在 TI 示例中看不到任何停止条件?

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

    您好、Vincent:

    感谢您的耐心。 在这种非重复模式(RM = 0)的情况下、I2CCNT 用于生成停止条件、因此 仅当 I2CCNT 等于0时才会设置 ARDY。  一旦 I2C 获得 NACK 条件、会立即设置 ARDY 位。  我需要了解的另一项内容是 重复启动条件、不过位数设置为8并且您正在传输8位。

    此外、就像为了响应 NACK、硬件通过设置 I2CSTR.NACK 位并 将 SCL 保持在低电平来重置 I2CMDR.STP。 尝试设置 I2CMDR.STP 来释放 SCL、因为这是处理此事件的正确方法。

    此致、

    Aishwarya.

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

    您好!

    我不知道我能不能理解你。  

    我修改了 TI 示例以确保没有 NACK。 我要求 I2C 模块发送2个字节、每个896ms、而不是连续发送数据:

    -用2个字节填充缓冲区

    -发送2个字节的起始条件

    在第一个帧之后、正如我所说的、SCL 被保持在低电平:

    我看不到任何 NACK。

    您建议的是请求停止条件。 通常我不必这样做。 如果需要、我必须确保数据已传输。 所以我刚刚在 FIFO 空中断:

    所以、我加入到我的例子中。 它与 TI 相同。

    您能否看一下并告诉我错误在哪里?

    这适用于第一个帧、但通信结束。

    我可以理解、TI 不能花一些时间查看用户的代码。 那么、如果您不能、您能否在 LAUNCHXL379D 上运行 TI 示例"lookback"、告诉我您是否可以看到 SLC 处于保持低电平状态、并告诉我为什么?  

    谢谢你。

    e2e.ti.com/.../TISupport_5F00_v2.zip

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

    Vincent

    下面是第二版代码的一些突出特点:

    • 请将 GPIO 配置恢复为您发送给我的原始屏幕截图。 同步通信外设的 GPIO 不应符合 GPIO 和 I2C 部分中所述的同步要求。
    • 我看到您使用的是 FIFO、因此 INT_myI2C0_ISR 不是必需的。
    • 我看到您使用 I2C_putData 在 ePWM 计时器 ISR 中传输数据、以每 896ms 发送一次数据、但您能告诉我您如何检查 I2C 此时实际上是否已准备好进行传输吗? TXFF 标志通常用于指示 FIFO 模式下的发送就绪。 我想问题可能是、如果您在前一个事务完成之前设置新的写入并开始新的事务(生成新的开始)、停止条件会受到影响/被取消。

     

    [报价 userid="573787" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1364341/launchxl-f28379d-i2c-with-sysconfig----no-stop-condition/5221462 #5221462"]我明白 TI 不能花些时间查看用户的代码。 那么、如果您不能、您能否在 LAUNCHXL379D 上运行 TI 示例"lookback"、告诉我您是否可以看到 SLC 处于保持低电平状态、并告诉我为什么?  [报价]

    对于独立  i2c_ex1_loopback 示例、  不存在 停止条件、因为它是来回数据传输的无限循环。 该示例就是这样呈现的。  当 修改  无限循环以发送某些有限数据包并手动发送停止条件时、这会导致停止条件、这与您在上一次响应中看到的情况相同。 此外、示例和配置之间的仿真模式也不同、因此您在调试时看到的结果肯定会有所不同。

    此致、

    Aishwarya.

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

    您好!

    请在此处查看我对您的笔记的回答:

    [报价 userid="573843" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1364341/launchxl-f28379d-i2c-with-sysconfig----no-stop-condition/5223626 #5223626"]请将您的 GPIO 配置恢复为您发送给我的原始屏幕截图。 同步通信外设的 GPIO 不应符合 GPIO 和 I2C 部分中所述的同步要求[/QUOT]

    当然我以前也试过。 它不会改变任何值

    我发现您使用的是 FIFO、因此 INT_myI2C0_ISR 不是必需的

    我同意。 但为了将 FIFO 中断与 SysConfig 一起使用、我被迫声明"使用中断"。 然后我可以启用中断和 FIFO 中断。 尽管定义了 ISR、但我启用 FIFO 之外的任何 I2C 中断。

    [报价 userid="573843" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1364341/launchxl-f28379d-i2c-with-sysconfig----no-stop-condition/5223626 #5223626"]您明白您正在使用 I2C_putData 在 ePWM 计时器 ISR 中传输数据以每 896ms 发送一次数据、但是您能告诉我此时是如何检查 I2C 实际上是否已准备好传输的吗? TXFF 标志通常用于指示 FIFO 模式下的发送就绪。 我认为问题可能是、如果您在前一个事务完成之前设置新的写入并开始新的事务(生成新的开始)、则停止条件会受到影响/取消

    我 做了。 您将在此回复中找到我的应用程序的其他版本:

    -在计时器中断时,我查看是否设置了标志。 如果支持、我会在 FIFO 缓冲区中加载数据并发出启动条件

    -回扫模式被启用,并在 FIFO 接收中断中读取数据

    -在 FIFO transmitt 中断中(当 FIFO 为空时),我设置新加载的 Flag

    通常、我不必手动生成任何停止条件

    不过、SCL 信号永远不会回到高电平。

    [报价 userid="573843" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1364341/launchxl-f28379d-i2c-with-sysconfig----no-stop-condition/5223626 #523626"]对于独立  i2c_ex1_loopback 示例、  不存在  STOP 条件、因为它是一个来回数据传输的无限循环。 该示例就是这样呈现的。  当 修改  无限循环以发送某些有限数据包并手动发送停止条件时、这会导致停止条件、这与您在上一次响应中看到的情况相同。 此外、示例和配置之间的仿真模式也不同、因此您在调试时看到的结果必然会不同。[/QUOT]

    同样、通常情况下、此示例中没有停止条件。 如果我错了,你能告诉我为什么吗?

    TI 能否向我提供一个具有非重复模式的简单示例、在该模式下我可以看到 SCL 返回到高级别? (将程序下载到 LAUNCHXL 后、请查看信号)。 我必须确保能够将 I2C 与 TI 工具一起用于我的项目?

    SysConfig 或 DriverLib 是否有问题?

    e2e.ti.com/.../TISupport_5F00_v3.zip

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

    Vincent

    我已经  我们的其他 I2C 专家进行了联系、希望在一两天内与您联系。

    TI 能否提供一个具有非重复模式(可以在该模式下查看 SCL 恢复为高级别)的简单示例? (将程序下载到 LAUNCHXL 后、请查看信号)。 我必须确保能够在我的项目中将 I2C 与 TI 工具结合使用?[/QUOT]

    同样、该问题通常是由弱上拉电阻和/或时钟速率不正确导致的、但正如您提到的、2.2-4.7k Ω 电阻器无法解决该问题、并且没有可见的时序问题/代码冲突。

    非重复模式的一个例子就是:将 无限循环修改为某些有限的数据包、手动添加停止条件(您已经完成了该操作)。  C2000Ware 中的示例都是我们提供的示例。 我建议在论坛上搜索更多示例、因为人们发布了 可能也有用的 I2C 代码。

    SysConfig 或 DriverLib 是否有问题?

    是否有您指的具体功能或特性?

    此致、

    Aishwarya.

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

    另一项建议、在 ISR 中、除了检查是否设置了相应的标志外、还应通过读取状态寄存器来检查缓冲区是否为空。 如果在总线就绪之前发送/接收数据、则可能会出现异常 I2C 通信。  

    [报价 userid="573787" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1364341/launchxl-f28379d-i2c-with-sysconfig----no-stop-condition/5221462 #5221462"]

    这适用于第一个帧、但通信结束。

    [报价]

    最终、生成停止条件的方法是设置 I2CMDR.STP 条件位。 否则、 当 I2CCNT 达到0时、I2C 不会执行任何操作。 如果 此代码片段 仅适用于第一帧、这是合理的、因为配置是非重复模式并且仅用于传输两个字节。 如果要一次发送多个2字节、配置必须是重复启动模式。 换言之、您看到的内容与配置一致。

    对于 I2C 环回示例、让我再次检查一下波形是否正确、尽管我在过去没有看到任何问题。 感谢您的耐心。

    此致、

    Aishwarya.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    关于 I2C 环回示例、让我再次检查以确认波形是否正确、尽管我以前没有发现这些波形有任何问题。 感谢您的耐心

    谢谢你。 "我要你帮我!" 我有大约10天时间来控制这个外设

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

    Vincent

    到周五、我一定会向您发送我在示例3中看到的内容。 示例1是内部回送、因此无法直接进行示波。 我将回复您。

    此致、

    Aishwarya.  

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

    您好!

    在示例1中、只需按如下方式设置 pinmux:

    回送非常有用、因为您不需要任何从器件来确认帧

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

    Vincent

    您使用 SysConfig 上的哪些 C2000Ware、CCS 和器件封装? 使用 C2000Ware 5.02、CCS 12.7和默认的100PTP 时、我只会看到以下选项:

    此致、

    Aishwarya.

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

    你好。 正如我说过的、我使用 LAUNCHXL379D。 我的软件包是:

    此外、您还必须将您的 C200Ware 版本升级到5.02、因为5.01不允许将输出配置为 Open DRAIN

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

    您好、 Aishwarya、

    您是否有任何关于此问题的消息要提供给我?

    谢谢。 文森特

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

    Vincent

    我已经测试了示例、但无法重现问题。  为了能够确定范围和查看所看到的内容、您对示例硬件/软件做了哪些更改?

    此致、

    Aishwarya.

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

    您好!

    在 TI 示例中、除了 pinmux、我没有更改任何内容。 我加入本期的此示例。 由于通信是连续运行的,你怎么能看到 SCL 恢复到高水平? 你能提供一个屏幕快照你的振荡?

    由于您可以在 LAUNCHXL 上运行测试、您是否可以下载我的示例(本回复中也提供了)、并告诉我 SCL 是否恢复到高级别? (此示例与 TI 完全相同、但2个通信之间有一个暂停)?

    您能否通过插入暂停来修改 TI 示例、以便我看到 SCL 恢复到高级别?

    感谢你的帮助。

    文森特

    e2e.ti.com/.../2024_5F00_06_5F00_19_5F00_LIEBExample.zipe2e.ti.com/.../2024_5F00_06_5F00_19_5F00_TIExample.zip

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

    Vincent

    我在下面附上了示波器截图、我使用的设置与您向我介绍的设置相同。 我还使用了多个 LP 尝试了此目的、因此这表明问题 与 SW 示例无关。 我还将注意到没有使用外部上拉电阻

    您也可以尝试以下步骤来帮助我们解决此问题:

    1. 尝试使用 I2CB 的相同环回示例。  
    2. 使用 GPIO 切换示例(gpio_ex2_toggle)测试 I2CA 和 I2CB GPIO 以确保 GPIO 本身正常工作。

    如果 I2CB 通过但无法通过 I2CA、则 I2CA GPIO 可能存在问题、反之亦然。 如果两者都不起作用、那么问题就出在其他地方。

    此致、

    Aishwarya.

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

    您好!

    感谢您连接微控制器进行测试。

    您使用的是哪一个示例? 似乎不是 TI 网站提供的示例、因为在2帧之间有暂停。

    如果不是我的例子,你能把它发给我吗? 您能测试我提供的示例吗? (只是测试、我不要求您调试我的代码)

    如果您下载了我的示例、您能告诉我是否使用了 LAUNCHXL379D 吗?

    我还会在两种不同的 LAUNCHXL 上尝试您提出的每件事:

    -我不能看到任何信号使用 I2CB 模块(GPIO02和03或40和41)

    -我可以看到使用 I2CA 与 GPIO0和 GPIO1完全相同

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

    Vincent

    我已经提到过、这是我为此主题重新安装的 C2000Ware 5.02中的 I2C Ex1环回示例。 我甚至重写了代码以不使用 SysConfig (手动使用 driverlib 函数)、但我仍然看不到任何问题。 我添加了附件、如果您想尝试它、它称为 ex3、但它是示例1。GPIO 切换示例也适用于 LP 支持的所有 I2C GPIO。

    在 GPIO 示例中、您是否看到寄存器中的值正确? 这可能已经没问题、但请确保确定使用与 GPIO 关联的正确标头。  

    此致、

    Aishwarya.

    e2e.ti.com/.../i2c_5F00_ex3_5F00_external_5F00_loopback.zip

    //#############################################################################
    //
    // FILE:   i2c_ex1_loopback.c
    //
    // TITLE:  I2C Digital Loopback with FIFO Interrupts
    //
    //! \addtogroup driver_example_list
    //! <h1>I2C Digital Loopback with FIFO Interrupts</h1>
    //!
    //! This program uses the internal loopback test mode of the I2C module. Both
    //! the TX and RX I2C FIFOs and their interrupts are used. The pinmux and I2C
    //! initialization is done through the sysconfig file.
    //!
    //! A stream of data is sent and then compared to the received stream.
    //! The sent data looks like this: \n
    //!  0000 0001 \n
    //!  0001 0002 \n
    //!  0002 0003 \n
    //!  .... \n
    //!  00FE 00FF \n
    //!  00FF 0000 \n
    //!  etc.. \n
    //! This pattern is repeated forever.
    //!
    //! \b External \b Connections \n
    //!  - None
    //!
    //! \b Watch \b Variables \n
    //!  - \b sData - Data to send
    //!  - \b rData - Received data
    //!  - \b rDataPoint - Used to keep track of the last position in the receive
    //!    stream for error checking
    //!
    //
    //#############################################################################
    //
    // 
    // $Copyright:
    // Copyright (C) 2013-2024 Texas Instruments Incorporated - http://www.ti.com/
    //
    // Redistribution and use in source and binary forms, with or without 
    // modification, are permitted provided that the following conditions 
    // are met:
    // 
    //   Redistributions of source code must retain the above copyright 
    //   notice, this list of conditions and the following disclaimer.
    // 
    //   Redistributions in binary form must reproduce the above copyright
    //   notice, this list of conditions and the following disclaimer in the 
    //   documentation and/or other materials provided with the   
    //   distribution.
    // 
    //   Neither the name of Texas Instruments Incorporated nor the names of
    //   its contributors may be used to endorse or promote products derived
    //   from this software without specific prior written permission.
    // 
    // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
    // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
    // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
    // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
    // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
    // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
    // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
    // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    // $
    //#############################################################################
    
    //
    // Included Files
    //
    #include "driverlib.h"
    #include "device.h"
    //#include "board.h"
    
    //
    // Defines
    //
    #define SLAVE_ADDRESS   0x3C
    
    //
    // Globals
    //
    uint16_t sData[2];                  // Send data buffer
    uint16_t rData[2];                  // Receive data buffer
    uint16_t rDataPoint = 0;            // To keep track of where we are in the
                                        // data stream to check received data
    
    //
    // Function Prototypes
    //
    __interrupt void i2cFIFOISR(void);
    void I2C_init(void);
    void myI2C0_init(void);
    
    //
    // Main
    //
    void main(void)
    {
        uint16_t i;
    
        //
        // Initialize device clock and peripherals
        //
        Device_init();
    
        //
        // Disable pin locks and enable internal pullups.
        //
        Device_initGPIO();
    
        GPIO_setPinConfig(GPIO_104_SDAA);
        GPIO_setPadConfig(104, GPIO_PIN_TYPE_OD | GPIO_PIN_TYPE_PULLUP);
        GPIO_setQualificationMode(104, GPIO_QUAL_ASYNC);
    
        GPIO_setPinConfig(GPIO_105_SCLA);
        GPIO_setPadConfig(105, GPIO_PIN_TYPE_OD | GPIO_PIN_TYPE_PULLUP);
        GPIO_setQualificationMode(105, GPIO_QUAL_ASYNC);
    
        //
        // Initialize PIE and clear PIE registers. Disables CPU interrupts.
        //
        Interrupt_initModule();
    
        //
        // Initialize the PIE vector table with pointers to the shell Interrupt
        // Service Routines (ISR).
        //
        Interrupt_initVectorTable();
    
        //
        // Board initialization
        //
    //    Board_init();
    
            EALLOW;
    
    //        PinMux_init();
            I2C_init();
    
            EDIS;
    
        GPIO_setDirectionMode(104, GPIO_DIR_MODE_OUT);
        GPIO_setDirectionMode(105, GPIO_DIR_MODE_OUT);
    
        //
        // For loopback mode only
        //
        I2C_setOwnSlaveAddress(I2CA_BASE, SLAVE_ADDRESS);
    
        //
        // Interrupts that are used in this example are re-mapped to ISR functions
        // found within this file.
        //
        Interrupt_register(INT_I2CA_FIFO, &i2cFIFOISR);
    
        //
        // Initialize the data buffers
        //
        for(i = 0; i < 2; i++)
        {
            sData[i] = i;
            rData[i]= 0;
        }
    
        //
        // Enable interrupts required for this example
        //
        Interrupt_enable(INT_I2CA_FIFO);
    
        //
        // Enable Global Interrupt (INTM) and realtime interrupt (DBGM)
        //
        EINT;
        ERTM;
    
        //
        // Loop forever. Suspend or place breakpoints to observe the buffers.
        //
        while(1)
        {
         // A FIFO interrupt will be generated for each Tx and Rx based
         // on the Interrupt levels configured.
         // The ISR will handle pushing/pulling data to/from the TX and
         // RX FIFOs resp.
        }
    
    }
    
    void PinMux_init()
    {
        //
        // PinMux for modules assigned to CPU1
        //
    
        //
        // I2CA -> myI2C0 Pinmux
        //
        GPIO_setPinConfig(GPIO_104_SDAA);
        GPIO_setPadConfig(104, GPIO_PIN_TYPE_OD | GPIO_PIN_TYPE_PULLUP);
        GPIO_setQualificationMode(104, GPIO_QUAL_ASYNC);
    
        GPIO_setPinConfig(GPIO_105_SCLA);
        GPIO_setPadConfig(105, GPIO_PIN_TYPE_OD | GPIO_PIN_TYPE_PULLUP);
        GPIO_setQualificationMode(105, GPIO_QUAL_ASYNC);
    
    
    }
    
    //*****************************************************************************
    //
    // I2C Configurations
    //
    //*****************************************************************************
    void I2C_init(){
        myI2C0_init();
    }
    
    void myI2C0_init(){
        I2C_disableModule(I2CA_BASE);
        I2C_initController(I2CA_BASE, DEVICE_SYSCLK_FREQ, 400000, I2C_DUTYCYCLE_50);
        I2C_setConfig(I2CA_BASE, I2C_CONTROLLER_SEND_MODE);
        I2C_enableLoopback(I2CA_BASE);
        I2C_setOwnAddress(I2CA_BASE, 0);
        I2C_setOwnAddress(I2CA_BASE, 0);
        I2C_setTargetAddress(I2CA_BASE, 60);
        I2C_setBitCount(I2CA_BASE, I2C_BITCOUNT_8);
        I2C_setDataCount(I2CA_BASE, 2);
        I2C_setAddressMode(I2CA_BASE, I2C_ADDR_MODE_7BITS);
        I2C_enableFIFO(I2CA_BASE);
        I2C_clearInterruptStatus(I2CA_BASE, I2C_INT_RXFF | I2C_INT_TXFF);
        I2C_setFIFOInterruptLevel(I2CA_BASE, I2C_FIFO_TX2, I2C_FIFO_RX2);
        I2C_enableInterrupt(I2CA_BASE, I2C_INT_RXFF | I2C_INT_TXFF);
        I2C_setEmulationMode(I2CA_BASE, I2C_EMULATION_STOP_SCL_LOW);
        I2C_enableModule(I2CA_BASE);
    }
    
    
    //
    // I2C A Transmit & Receive FIFO ISR.
    //
     __interrupt void i2cFIFOISR(void)
    {
        uint16_t i;
    
        //
        // If receive FIFO interrupt flag is set, read data
        //
        if((I2C_getInterruptStatus(I2CA_BASE) & I2C_INT_RXFF) != 0)
        {
            for(i = 0; i < 2; i++)
            {
                rData[i] = I2C_getData(I2CA_BASE);
            }
    
            //
            // Check received data
            //
            for(i = 0; i < 2; i++)
            {
                if(rData[i] != ((rDataPoint + i) & 0xFF))
                {
                    //
                    // Something went wrong. rData doesn't contain expected data.
                    //
                    ESTOP0;
                }
            }
    
            rDataPoint = (rDataPoint + 1) & 0xFF;
    
            //
            // Clear interrupt flag
            //
            I2C_clearInterruptStatus(I2CA_BASE, I2C_INT_RXFF);
    
        }
        //
        // If transmit FIFO interrupt flag is set, put data in the buffer
        //
        else if((I2C_getInterruptStatus(I2CA_BASE) & I2C_INT_TXFF) != 0)
        {
            for(i = 0; i < 2; i++)
            {
                I2C_putData(I2CA_BASE, sData[i]);
            }
    
            //
            // Send the start condition
            //
            I2C_sendStartCondition(I2CA_BASE);
    
            //
            // Increment data for next cycle
            //
            for(i = 0; i < 2; i++)
            {
               sData[i] = (sData[i] + 1) & 0xFF;
            }
    
            //
            // Clear interrupt flag
            //
            I2C_clearInterruptStatus(I2CA_BASE, I2C_INT_TXFF);
        }
    
        //
        // Issue ACK
        //
        Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP8);
    }
    
    //
    // End of File
    //
    

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

    您好!

    在这个连续的例子中,你怎么能告诉 SCL 返回到高水平?

    此外、为什么要考虑一个旧示例、例如没有 SysConfig? 我只需确保 SysConfig 和 DriverLib 都没有问题。

    您能做到:

    -在您的示例中插入一个2 transmitt 之间的延迟,让我返回到高水平? (不是第一种状态)

    -使用网站上提供的示例? (具有 SysConfig)

    -请只是用我提供给你的例子做测试。 我不要求您调试我的代码、而是告诉我 SCL 是否拉至低电平。

    今天、我看不到任何解决这个问题的办法。 这是我第一次有这样一个简单的问题:(

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

    Vincent

    与您的示波器屏幕截图表明  SCL 从不返回高 电平类似、我发送的示波器屏幕截图表明、在运行环回示例时 SCL 确实一直返回到正确的电平。 我提供了一个放大版本来查看多个时钟。

    示波器屏幕截图来自使用 SysConfig 的示例版本(来自 C2000Ware)。 为了全面起见、我还采用了该原始 示例中生成的代码、并在没有 SysConfig 的情况下运行它。 相同的结果。

    我将在周二能够使用 LaunchPad 和示波器、并可  延迟运行示例、然后再运行您的示例。  

    [报价用户 id="573787" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1364341/launchxl-f28379d-i2c-with-sysconfig----no-stop-condition/5262201 #5262201"]-我在使用 I2CB 模块(GPIO02和03或40和41)时看不到任何信号[/QUOT]

     与此同时、请进行调试、看看使用给定的 I2CA 和 I2CB 切换示例无法看到 GPIO 切换的原因。 如果 GPIO 未切换、则可能是 不同的问题。  
    此致、

    Aishwarya.  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我提供了一个缩放版本以查看多个时钟。

    您好!

    即使缩放,你怎么能看到任何暂停之前的时钟变低? (老实说、我认为您的照片是对第一个边缘的单次采集)

    您的代码运行过程完全没有停顿。

    您是否使用 LAUNCHXL379D?

    我必须在此板上进行任何连接吗?

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

    您好、Vincent:

    这位专家目前不在办公室、到7月1日为止。 请预计届时响应会有延迟。 感谢您的耐心。

    此致、

    Allison

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

    Vincent

    我暂时找了一家 LP、今天将在其上运行代码。

    至于运行示例时的原始设置、 除了调节 IO 范围外、我在 LAUNCHXL379D 上未使用任何外部连接。 此环回示例中没有暂停、会在软件中持续循环。

    此外、您能否确认 GPIO 切换示例是否适用于所有 I2C IO。 需要进行此确认才能排除 GPIO 连接问题。

    此致、
    Aishwarya.

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

    你好。

    正如您问我的、我测试了 GPIO105、这个 用于 SCL 的 GPIO

    -上拉开漏

    -直接在应用中,禁用 I2CA 的输出,并要求 GPIO 的链接

    一切都很好。

    此回送示例中没有暂停、该示例在软件中连续循环。

    同样、由于没有暂停、您发送给我的屏幕截图无法查看、但就在第一次传输之前。 重要的是、在该传输结束时、SCL 不会从高电平变为低电平、而是会从低电平变为高电平

    我很高兴您能将代码加载到 LP 中。 我感到愤怒,你不会再帮助我了。

    我希望我很快就能告诉你。

    祝你度过美好的一天!

    Vince

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

    您好、Vincent:

    我会在7月8日(星期一)给您回复我的回复。 感谢您的理解。

    Aishwarya.

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

    您好、Vincent:

    艾什瓦里亚位于受飓风贝丽尔影响的地区,未来2-3天可能无法响应。 请预计在她回来之前会有延迟回复。 感谢您的理解。   

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

    Vincent

    感谢您的耐心。 除了我为 C2000Ware 软件示例提供的调试之外、我将无法调试您的代码。 此时、我建议运行 i2c_ex3_external_loopback 并确定其范围、以查看结果是什么。  

    我将邀请我们的软件专家来回答您的具体问题、即为什么以原样编写此示例。 请预计1-2天内得到解答。

    此致、

    Aishwarya.

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

    您好!

    我希望你们对飓风没有严重的问题。

    我将等待您的专家的回答。 谢谢你

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

    Vincent

    谢谢你。 我将在接下来的几天内离开办公室、但已经跟我们的 I2C 软件专家进行了跟进。

    此致、

    Aishwarya.

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

    你好,对不起打扰你,但没有人回来给我。 我不知道是否必须等待 TI 的回答。 这个问题会变得严重...

    您能否检查一下您的一位专家是否考虑到了我的问题?

    非常感谢。

    Vince

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

    Vincent

    我已经再次跟我们的 I2C 软件专家进行了跟进。

    此致、

    Aishwarya.

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

    Vince

    这是我们使用该 C 文件运行后观察到的波形(/cfs-file/__key/communityserver-discussions-components-files/171/modified_5F00_ex.c )、

    我们可以看到、在传输后 SCL 引脚变为高电平。   

    此致

    Siddharth

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

    你好。

    首先我要感谢您再次来到我的网站。

    我还没有试过,我希望我能在我的假期前测试它。 为了帮助我更快地运行:必须将 TI 示例中的 C main 文件替换为此文件以查看 SCL 的空闲状态吗? 您修改了什么?

    我必须为此工程使用 SysConfig (这对我们很重要)。因此、如果此示例在 LAUNCHXL 上运行、我将使用 SysConfig 并查看生成的 DriverLib 命令是否相同。 有任何建议?

    尽快打电话给你。 Vince。

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

    您好、Siddharth、

    我尝试了运行你们发给我的示例。

    我只需更改 PinMux 和 PinConfig、使其可在 LaunchXL 上运行(在演示板上所有 GPIO 都不可用)

    我理解的是、您发送第一个具有 I2CA 的帧、只是为了检查 SCL 是否返回到高电平。  

    不会使用程序的其余部分。

    那么、我让我的示波器在 SCL 边沿触发一个、并以调试模式运行您的程序:

    SCL 也不会回到高电平。

    但是、尽管我将 GPIO40连接到 GPIO104并将 GPIO41连接到 GPIO105、但编程也会在 ESTOP 处停止:

    您能否在 LAUNCHXL379D 上测试您的程序?

    非常感谢

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

    Siddarth、您好!

    你看到我以前的答案了吗?

    我很抱歉打扰您,但您能像我在 LAUNCHXL 上一样测试您的程序吗?

    非常感谢。

    Vince。