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.

[参考译文] TCA9555:在几次输入变化后停止生成中断

Guru**** 2584245 points
Other Parts Discussed in Thread: TCA9555

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/693321/tca9555-stop-generating-interrupt-after-few-input-changes

器件型号:TCA9555

您好!

我已将 TCA9555端口0配置为输入、端口1配置为输入的前4个引脚和配置为输出的其余引脚。 TCA9555与 TM4C292NCPDT 搭配使用以实现输入操作。 只要我们在其中一个端口中提供输入、使所有引脚变为高电平或低电平、器件就会持续生成中断。 但是、如果我们在一分钟内提供两个端口组合的输入、则在主机读取端口状态 或端口输入状态改变后、它无法生成中断。 中断引脚始终取消置位。

有人能不能建议这种行为的原因是什么?

此致

巴拉

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

    这听起来很奇怪、我想不出什么可能导致器件停止生成中断。 仅为了隔离问题、您是否认为您可以探测 INT 输出以及您希望切换的其中一个输入、以便我们可以清楚地看到 INT 没有正确响应? 我想确保输入改变状态并保持在新状态足够长的时间来触发中断。

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

    尊敬的 Max:

    查找 INT 引脚和其中一个端口引脚的示波器捕获。

    缩放图像  

    此致

    巴拉

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

    我的初始想法:
    发生这种情况的最简单方法是写入器件而不是读取器件、并通过配置寄存器将器件设置为输出。 当该器件的 GPIO 设置为输出时、INT 引脚将停止标记、但我认为 INT 引脚应保持高电平、如果是这样...

    我想仔细检查一下、以防万一、您能否提供配置寄存器的读取事务的范围截图?

    另一个想法是在发生这种情况之前查看 o 示波器上的 Vcc 和复位引脚、以查看是否发生了任何异常情况。
    ------------------------------------------------------
    您是否能够在此处为我们提供原理图? 如果没有、我们可以尝试通过电子邮件执行此操作。

    此外、您如何翻转端口上的逻辑? 示例:您是将一根导线从端口引脚 x 连接到 GND 和 Vcc、是将其连接到 MCU 并使其将其输出切换为高电平还是低电平、还是将其连接到某个传感器?

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

    您好、Bobby、

    [引用用户="Bobby Nguyen ]我的初始想法:
    发生这种情况的最简单方法是写入器件而不是读取器件、并通过配置寄存器将器件设置为输出。 当该器件的 GPIO 设置为输出时、INT 引脚将停止标记、但我认为 INT 引脚应保持高电平、如果是这样... [/报价]

    我们在系统初始化时定义端口 I/O 配置–这不会改变运行时间。

    [引用用户="Bobby Nguyen "]另一个想法是在发生这种情况之前查看 o 范围上的 Vcc 和复位引脚、以查看是否发生任何异常情况。

    此器件没有复位引脚。

    [引用 user="Bobby Nguyen ]您是否能够在此处为我们提供原理图? 如果没有、我们可以通过电子邮件尝试执行此操作。

    请分享您的电子邮件、以便我可以分享原理图。

    [引用 USER="Bobby Nguyen ]此外,您如何在端口上翻转逻辑? 示例:您是将一根导线从端口引脚 x 连接到 GND 和 Vcc、是将其连接到 MCU 并将其输出切换为高电平还是低电平、还是将其连接到某个传感器?[/quot]

    所有端口 A 均配置为输入。 端口 B 的一部分是输入。 这是静态配置,不会更改。 输出驱动 MOSFET 的栅极。 输入处于逻辑电平、由示波器测量确认。  

    此致

    巴拉

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

    "我们在系统初始化时定义端口 I/O 配置–这不会改变运行时间。"
    -我想确保您在阅读时不会意外地书写、因为我看到客户有时会产生编码错误、导致写入。 我认为这也不是问题、但我想再次检查。

    '此器件没有复位引脚。'
    -Woops。 你是对的…

    "请分享您的电子邮件、以便我可以分享原理图。"
    duynguyen@ti.com

    "所有端口 A 均配置为输入。 端口 B 的一部分是输入。 这是静态配置,不会更改。 输出驱动 MOSFET 的栅极。 输入处于逻辑电平、由示波器测量确认。 "
    您的示波器屏幕截图显示端口随时间的推移从高电平变为低电平、因此我想知道您在端口上执行的操作。 (在另一侧有上拉电阻的情况下、按下连接到 GND 的按钮?) 不过、我假设我将能够查看它们与您的原理图连接的内容。

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

    您好、Bobby、

    [引用 user="Bobby Nguyen "-我想确保您在阅读时不会意外地编写内容、因为我看到客户有时会编写导致写入的编码错误。 我认为这也不是问题、但我想再次检查。 [/引述]此处是用于更好地理解的范围捕获。 这次使用 SCL 和 SDA。

    这是最后一个中断的缩放版本。

    最后一个中断后的最后一个 I2C 事务的缩放图像。

    I2C 传输前的最后一个


     

    [引用用户="Bobby Nguyen ]您的示波器画面显示端口随着时间的推移从高电平变为低电平、因此我想知道您在端口上执行的操作。 (在另一侧有上拉电阻的情况下、按下连接到 GND 的按钮?) 不过、我假设我能够看到它们与您的原理图连接的内容。这是外部输入、我们不知道确切的输入是什么。 为了进行仿真、我们生成了通用脉冲。

    我将通过邮件分享原理图。

    我从示波器中观察到、最后一次 I2C 读取的数据应全部为低电平。 但只有端口0变为低电平、端口1保持最后的状态、即高电平。 这是不生成中断的常见情况。 即、任何一个端口都不会更改为新状态或使用端口本身某些引脚会更改为新状态、而某些引脚会保持旧状态。

    此致

    巴拉

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

    这种情况似乎与前面的解释略有不同。

    首先、INT (bar)为低电平有效、而不是高电平有效。  所以问题不在于中断没有被发出、而是保持被发出。

    其次、在不对数据传输进行详细的位分析的情况下、I2C 端口传输数据的数据传输似乎几乎正常(但见下文第五部分)、以响应导致当前中断的输入端口转换。

    但是、第三、在每个有问题的情况下、在 I2C 数据转换期间都会发生输入端口转换、因此中断逻辑正确保持中断有效。

    第四、问题不是 TCA9555、而是 ISR 不响应新中断。

    此外、第五、数据表规定了100kHz 的最大时钟频率。 对于大约350kHz 的时钟频率、示波器迹线显示在20uS 内大约7个周期。  这可以解释图像 Jun 01 21:50:06中的 runt daa 脉冲。

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

    您好、Bala、

    感谢您提供示波器截图和原理图。

    很遗憾、我没有看到您发送的原理图有任何问题。

    Scopeshots:

    看一下干扰之前的事务、我没有发现任何问题。

    事务经过干扰后,此事务看起来与上一个事务完全相同,但端口0返回的值发生翻转(这是您更改输入端口0)。

    这是我第一次看到这种问题弹出。 我与我们团队中的一位高级成员谈论这一点、看看他的想法。

    我将尝试让您知道他明天一天结束时告诉我的信息。

    谢谢、

    -Bobby

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

    您好、Bobby、

    请看一下我今天早些时候发表的评论。

    谢谢、

    多利奇

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

    您好、Matthew、

    "首先、INT (bar)为低电平有效、而不是高电平有效。  所以问题不在于中断没有被置为有效、而是保持被置为有效。"

    该器件的 INT 引脚是一种开漏架构、因此它意味着线路锁存为低电平、然后 INT 引脚的 NFET 将拉低(如您建议的那样)、或者 INT 总线上有另一个器件将其拉低。

    "第二、在不对数据传输进行详细的位分析的情况下、I2C 端口传输数据的数据传输似乎几乎正常(但见下文第五部分)、以响应导致当前中断的输入端口转换。"

    我查看了这些位、没有发现任何东西表明主器件在事务处理中做了任何错误。

    "但是、第三、在每个有问题的情况下、在 I2C 数据转换期间都会发生输入端口转换、因此中断逻辑正确地将中断保持置为有效。"

    嗯。 第一张图片显示、当端口在事务发生前发生变化时、INT 引脚会拉低。

    "因此、第四个问题不是 TCA9555的问题、而是 ISR 不响应新中断的问题。"

    ISR?

    "此外、第五、数据表规定最大时钟频率为100kHz。 对于大约350kHz 的时钟频率、示波器迹线显示在20uS 内大约7个周期。  这可以解释图像 Jun 01 21:50:06中的 runt daa 脉冲。"

    该器件能够在400kHz 下工作:

    我相信您所讨论的 runt 脉冲(在 SDA 上?) 是当从器件和主器件交换 SDA 线的控制时(在一个 ACK 之前和一个 ACK 之后)。

    谢谢、

    -Bobby

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

    第一个
    MR1:"首先、INT (bar)为低电平有效、而不是高电平有效。 所以问题不在于中断没有被置为有效、而是保持被置为有效。"

    Bobby 1:该器件的 INT 引脚是漏极开路架构、因此它意味着线路锁存为低电平、然后 INT 引脚的 NFET 将拉低(如您建议的那样)、或者 INT 总线上有另一个器件将其拉低。


    第二个
    MR1:"第二、在不对数据传输进行详细的位分析的情况下、对于 I2C 端口传输数据以响应导致当前中断的输入端口转换、数据传输似乎几乎正常(但见下文第五部分)。"

    Bobby 1:我看了这些位、没有发现任何东西表明主器件在交易中做了任何错误。


    第三个
    MR1:"但是、第三、在每个有问题的情况下、在 I2C 数据转换期间都会发生输入端口转换、因此中断逻辑正确地保持中断有效。"

    Bobby 1:嗯。 第一张图片显示、当端口在事务发生前发生变化时、INT 引脚会拉低。

    MR2:是图片 Jun 01 21:48:54及其缩放的图片 Jun 01 21:54:05确实显示了 INT 输出在事务之前拉低(置位)、以响应输入引脚转换为低电平。 在事务期间、输入引脚转换为高电平。 此正常状态导致 INT 继续拉低(有效)。
    为什么:请参阅 tca9555数据表图23。 假设该图缺少 XOR 和 INT (bar)之间的逻辑反转。 在传输之前、但在输入线路变为低电平之后、输入端口寄存器与线路数据不匹配、使用中断 XOR 将 INT 置为有效。 在传输过程中、读脉冲明显会在输入线路变为高电平之前锁存输入线路的状态、因此人们可能会期望 INT 短暂变为高电平(未置位)。 但是、一旦输入线路变为高电平、线路和输入端口寄存器的状态将不再匹配、因此 INT 将(再次)置为有效。 此处未解释 INT 上是否存在未断言的干扰、但图23简化了。 请注意、在之前的事务中、中断在从寄存器向 I2C 主器件传输数据时失效。


    第四个
    MR1:
    "因此、第四个问题不是 TCA9555的问题、而是 ISR 不响应新中断的问题。"

    bobby1:ISR?
    MR2:中断服务例程。
    或者、中断控制器被配置为忽略继续通过中断响应被应答的中断。


    第五个
    MR1:"此外、第五、数据表规定最大时钟频率为100kHz。 对于大约350kHz 的时钟频率、示波器迹线显示在20uS 内大约7个周期。 这可以解释图像 Jun 01 21:50:06中的 runt daa 脉冲。"

    Bobby1:此部件能够以400kHz 的频率工作:
    MR2:是的、您回答正确。 幸运的是。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bala、

    我与我团队的另一位成员交谈。 他提出了两个问题:

    1) 1)在 I2C 事务中、您正在读取0x00并使用自动递增功能、但您能否独占读取0x01并查看它是否会将 INT 复位?

    2) 2) 2)您能否验证连接到 INT 引脚的 MCU 引脚是否为输入引脚、并且未主动将 INT 线路拉至低电平?

    在执行测试时、是否所有 PORT0引脚都连接在一起(P00至 P07)和 Port1 (引脚 P10至 P13)?

    此外、您是否在端口引脚中使用函数发生器或是否使用 MCU?

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

    您好、Bobby、

    您对我昨天的最后一封邮件有什么意见吗?  

    问题似乎只是在中断服务例程读取数据寄存器时数据输入发生变化、因此 INT 输出正确保持有效。  假设向上计数中断控制器配置为边沿敏感、则说明观察到的行为。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bala、
    当您继续执行读取操作、最终是否会清除 nINT 时会发生什么情况? 在您发送的波形中、它似乎错过了清除 INT、因为它发生在事务期间。 如果在它进入该状态后向它发送手动读取、会发生什么情况?
    -Francis
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Francis、

    已尝试在 INT 引脚进入该状态后手动读取、其保持无效。 请找到示波器捕获。 当端口状态在 I2C 事务期间发生更改时、此情况会上升。

    缩放图像

    此致

    巴拉

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

    您好、Bala、Francis、

    现在 TCA9555工作正常似乎很明显、问题出在 ISR 中。  你同意吗?

    第二次读取数据将会回答的问题是、确认在观察到的输入端口在数据传输期间发生变化的情况下、读取数据端口确实会清除 INT。  由于数据输入在第二次数据传输期间再次发生变化、范围观察结果不能回答此问题。  要回答这个问题、数据输入必须在第二个事务中保持恒定(高电平)。

    此外、就术语而言、INT 为低电平、不会被"断言"、也不会被否定、而是会被断言。  INT 低电平信号中断。

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

    Matthew、您好!

    [引用用户="Matthew Reich"] 现在 TCA9555 工作正常、问题似乎出在 ISR 中。  您是否同意?[/引述]否 查看另一个示波器捕获。 处理器未能读取第二个中断、但根据 数据表建议、无论 I2C 读取如何、当端口状态发生变化时、INT 引脚将进入高电平状态。

    当端口在 I2C 总线上进行数据传输时改变状态时、会出现问题。

    此致

    巴拉

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

    您好、Bala、

    我认为、在如何切换 INT 方面会产生一些困惑。  我已附上控制 INT 引脚的简化版原理图。  请注意、INT 引脚由 XOR 控制、这意味着如果它们是 Q 和 IO 引脚之间的差值、它将打开 FET 的栅极以将 nINT 引脚拉低。    如果两者均为高电平 或两者均为低电平、则 INT 不置为有效(低电平)。  

    这意味着、如果 IO 在读取前改变状态、则中断被置为有效(将 INT 引脚拉为低电平)。  这还意味着、如果 IO 引脚返回到其原始状态、则假设未发生读取 (INT 被释放并通过上拉电阻器被拉高)、INT 将被取消置位。  您显示的波形显示部件工作正常。  

    -弗朗西斯·胡德

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

    您好、Bala、

    示波器图片显示了正确的 TCA9555操作。

    以下是事件的顺序:

    INT H、端口 L、无传输:初始状态。 Int 取反

    int L、port H、no transaction:端口状态变化导致内部数据(即 L)与输入数据不相等,导致 INT 置位。

    INT H、端口 H、事务:之前 INT 置位触发 ISR、调度数据事务。  事务对端口数据进行采样、将内部数据更改为 H、匹配端口数据、导致 INT 否定。

    int L、port L、no transaction:端口状态变化导致内部数据 H 与输入数据不相等、导致 INT 置位。

    int H、port H、no transaction:端口状态变化导致内部数据(H)等于输入数据、导致 INT 否定。

    INT H、端口 H、事务: 之前 INT 置位触发 ISR、调度数据事务。  事务对端口数据进行采样、从而将内部数据保持在 H、与端口数据匹配、从而导致 INT 保持否定状态。

    此序列中没有问题。