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.

[参考译文] TMS320F280041:用于同步 ADC 采样的 ISR

Guru**** 2536010 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/985872/tms320f280041-isr-for-simultaneous-adc-sampling

器件型号:TMS320F280041

你(们)好。

我正在尝试弄清楚当我使用同一 SOC 事件触发两个 ADC 时如何调用 ISR。 根据我对其工作原理的理解、我将 ADC A 和 B 设置为来自 ePWM 模块的相同 SOCA 事件:

AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 5;  // ePWM1 SOCA 上的触发
AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 5;  // ePWM1 SOCA 上的触发

从 ADC 示例中、我假设这两条线

AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0;// SOC0结束将设置 INT1标志
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;//启用 INT1标志

导致跳转至

ADcA1ISR

中断服务路由。 我现在的问题是、我想确保 EOC 也发生在 ADC B 上、如果我在 ADC A 和 B 的 ISR 中读取结果寄存器、它们都将更新。 是否可以对 ADC A 和 B 的 EOC0事件进行逻辑和连接、并相应地触发中断?  

感谢您的帮助、

伦纳特

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

    您好、Lennart、

    您还可以在 ADC-B 上启用 INT1标志(与您发布的代码相同、但 AdcbRegs 而非 AdcaRegs)、然后在 ADC-A ISR 中启用:

    • 检查 ADC-B INT1是否已设置
    • 清除 ADC-B INT1  

    我认为您不想/不需要采用两个 ISR

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

    您好 Devin、

    我恐怕这就是答案。 显然、我希望避免使用两个 ISR、但在 ISR 中等待另一个 ISR 也有点小。 ISR 的目的不是为了让我不必等待事件、而是能够在事件发生时对其做出反应?
    无论如何、在我的示例中应该可以、因为 ADC-A 和 B 将在一个非常相似的时间实例中完成、所以可能没有太多的时间等待。 但是、我认为硬件可能会实施一种"更好"的方法来实现这一目的、例如在触发 CPU 中断之前、PIE 矢量检查两个事件。

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

    您好、Lennart、

    我认为您不应该在 ISR 中等待;只要您选择由最长采样路径(具有最多 SOC 的 ADC)触发的 ISR、就 应该只检查其他 ADC 的 ADCINT 标志并通过或失败。  如果 它们已在 ISR 开始时设置、则会通过完整性检查、或者如果它们未设置、则配置出错、检查失败。   

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

    啊,还可以。 考虑到它只是一个健全的检查、使它听起来更好。 但是、我没有一个信道花费的时间比另一个更长。 它们都必须处理相同数量的 SOC、且所有 SOC 都具有相同的采集窗口。 因此、我希望它们所花费的时间完全相同。
    但我认为、随着彻底检查(这确实很有意义)所增加的时间、两个 ADC 都应该完成、即使一个 ADC 花费的时间比触发 ISR 的时间稍长。

    感谢你的帮助。 如果它不能按预期工作,我会回来的;)

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

    您好、Lennart、

    如果 SOC 数量相同、则可以选择任何 ADC 来触发 ISR (正确的做法是、如果并行 SOC 使用不同的 S+H 持续时间、则理论上时间可能会有所不同、 但出于多种原因、通常建议并联 SOC 使用相同的采集窗口持续时间、您已经在这样做了)。 在这种情况下、两个 ISR 标志应完全同时置1。   由于到 ISR 的上下文切换 是由一个标志变为高电平引起的、并且切换需要一些时间、因此您可以假设在  ISR 开始运行任何校验代码之前应设置其他标志。  

    此外、请不要忘记清除其他标志、否则您的检查将在第一次迭代后始终成功。   

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

    您好 Devin、

    感谢您提供更多详细信息和 提醒。 那么、我应该全部设置好。