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.

[参考译文] TMS570LS1224:ADG1MAXCOUNT 与 ADG1INTFLG 中的 G1_END 字段的交互

Guru**** 2692745 points

Other Parts Discussed in Thread: TMS570LS3137, TMS570LC4357, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1580456/tms570ls1224-adg1maxcount-interaction-with-g1_end-field-in-adg1intflg

器件型号: TMS570LS1224
TMS570LC4357、TMS570LS3137、 HALCOGEN》中讨论的其他器件

我们已经确定在读取 ADG1MAXCOUNT 寄存器时、与 ADG1INTFLG 中的 G1_END 字段存在意外的间歇性(可能与时序相关)交互。

重复测试已确认、读取 ADG1MAXCOUNT 寄存器有时会清除 ADG1INTFLG 寄存器中的 G1_END 字段。

该应用程序未启用增强通道选择模式、但会定期检查 ADG1MAXCOUNT 寄存器是否保持“Value after reset“、作为 ADC 模块寄存器状态检查的一部分。

根据我们可以确定的情况、技术参考手册 (SPNU515C) 中没有提到如果未启用增强型通道选择模式、则不应读取该寄存器。

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

    尊敬的 Paulo:

    正确、G1_END 位不应被清除以读取  ADG1MAXCOUNT 寄存器。 但是,也许你知道为什么定期读取 ADG1MAXCOUNT 即使你没有进入增强模式的原因?

    而且、您阅读它的频率有多高? 如果可能、共享演示代码进行测试并在结束时确认、即使不可能也没问题、我将创建一个演示代码并进行测试。

    --
    此致、
    Jagadish。

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

    尊敬的 Jagadish:

    即使应用没有启用增强通道选择模式、我们也会定期读取 ADG1MAXCOUNT 的原因是作为模块寄存器定期状态检查的一部分、以确保配置保持在预期范围内。

    完成初始化后、我们进入每 20ms 执行一次的主循环、其中会调用该函数、该函数读取并返回来自两个 ADC 硬件实例 (ADC1 和 ADC2) 的最新数据。 随后会调用函数、该函数 对多个 ADC 模块寄存器(包括 ADG1MAXCOUNT 寄存器)进行定期状态检查 。

    在调用读取函数和状态检查函数之间、会调用大量其他函数、这些函数会 在其他硬件模块上执行定期状态检查。

    调用读取函数和调用状态检查函数之间经过的时间估计将少于 250us、如果您认为这些信息有益、我们可以对此进行测量。

    应用仅在两个 ADC 硬件实例 (ADC1 和 ADC2) 上使用转换组 1。

     

    此致、

    Paul。

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

    尊敬的 Jagadish:

    您是否设法重现此问题?

    我是否可以提供任何其他信息来帮助您?

    此致、

    Paul。

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

    尊敬的 Jagadish:

    有人要求我对一个答复采取后续行动... 您是否设法复制了这个问题?

    我是否可以提供任何其他信息来帮助您?

    此致、

    Paul。

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

    您好、Paul:

    对延迟的回复表示歉意!

    我没有完全相同的电路板、因此我尝试了另一个 Hercules 电路板 (TMS570LC4357):

    在这里、我无法重现问题、如上转换后所示、我正在 while 循环中连续读取 MAXCOUNT 寄存器、但并未清除 G1_END 位。

    我还有另一个 TMS570LS3137 板、我也会尝试使用它。 平均时间、您能否验证我的流程并确认?

    --
    此致、
    Jagadish。

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

    尊敬的 Jagadish:

    对拖延答复表示歉意、但我现在收到了我的同事的以下消息、他首先报告并一直在调查这一问题...

    我花了一些时间研究今天,并开始设置一个测试例程尽可能接近下面由 Jagadish 提供的示例.

    通过读取 ADG1MAXCOUNT 寄存器、我能够复制其结果、因为 G1_END 位不受影响/清除。

    然后、我创建了一个新例程来检查所有 ADC 组的 MAXCOUNT 寄存器。

    我在 ADC_GetStatus 末尾添加了对这个新例程的调用

    如果调用 ADC1、则对 ADC1 的所有读取都失败(未设置 G1_END 位)。

    如果调用 ADC2、则所有 ADC2 读取都失败(G1_END 位未设置)。

    因此、系统中的行为是一致的、如果我们尝试读取 ADC 组的 MAXCOUNT 寄存器、则会导致转换失败(未完成)。

    然后、我改进了例程以单独查看组、发现读取 ADC_group2 总是导致转换失败。

    然后我返回并修改了简单的测试线束以轮询组 2 而不是组 1、发现这确实清除了 G1_END 标志以某种方式影响转换、从而导致转换不完成。

    我一直在使用我们的 ADC 文件的修改版本,而不是回到 HALCOGEN 源代码,所以有一些不同的测试 Jagadish 已经进行了。

    这提供了与我在 2025年07月29日 手册中详述的测试结果略有不同的测试结果、根据这些说明、我们从 ADC_Group1 读取时会看到间歇性故障。 迄今为止、我无法使用小型测试线束使 MAXCOUNT ADC_Group1 读取失败、但 MAXCOUNT ADC_GROUP2 读取会导致 ADC1 和 ADC2 的故障始终发生(每次调用)。

    话虽如此、但自我最初的测试以来、ADC.c 代码发生了重大变化、尤其是寄存器读取的顺序、哪些因素可能会对这产生一定影响?

    根据上述附加信息、请 告知我您现在是否能够 重现我们所看到的问题。

    此致、

    Paul。

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

    您好、Paul:

    对延迟的回复表示歉意。

    是否可以设置一个实时调试会话? 我想验证这个问题是否活跃。

    我将在美国时间上午 9 点至晚上 9 点提供。

    --
    此致、
    Jagadish。