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.

[参考译文] TMS320F280038C-Q1:意外的 ADC 中断周期偏差

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1611425/tms320f280038c-q1-unexpected-adc-interrupt-period-deviation

器件型号: TMS320F280038C-Q1

您好:

我有一个功能齐全的数字电源控制板。 为了测量 ADC 中断所花费的时间、我在例程的开头和结尾添加了`GPIO=high`、并在例程的末尾添加了`GPIO=low`。 其他函数不使用此 GPIO。 在工程中、我使用 ADC 中断、可以接收中断。

每 30 μ s 触发一次 ADC 中断。 我计算该中断所需的控制器工作。

消息到达时触发 CAN 中断。

我开始检查中的示波器 高采集 并注意到我的 ADC 中断触发时间经常变化。 我添加了图像。

1) 如何确定这种情况的根本原因? 你有什么建议?

2) 可能导致这种情况的因素有哪些?

3) 是否有一个寄存器组可用于通过调试跟踪此情况?

 isr_000.png

 

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

    尊敬的 Gokhan:

    您在示波器上看到的通常是中断服务延迟/抖动、而不是 ADC 触发器本身的变化。 在 ADC ISR 的开始/结束时切换 GPIO 测量 CPU 何时开始处理中断、如果任何其他 ISR 正在执行、或者如果在短窗口中禁用全局中断、则可以发生移位。

    在 C2000 上、当您进入 ISR 时、CPU 通常会设置 INTM=1(全局中断被屏蔽)、直到您返回。  因此、如果 CAN 消息到达接近您的 30us ADC 中断、ADC ISR 将得到处理、从而导致 GPIO 脉冲序列上出现明显的周期偏差。

    即使 ADC 在逻辑上具有更高的优先级、除非显式实现中断嵌套、否则它仍然无法运行、直到当前执行的 ISR 完成。

    此致、

    Masoud

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

    尊敬的 Masoud:

    感谢您的明确回答。

    作为一名设计师,当我在用户手册上阅读以下句子时,我不会期待这样的行为。 这是勘误表吗?

    3.5.5 PIE 通道映射
    表 3-3 显示了每个外设中断的 PIE 组和通道分配。 每行都是一个组、每列都是其中的一个通道
    业务线经理。 当多个中断挂起时、编号最小的通道是编号最小的组、首先处理该组。 因此、顶部的中断
    表中的中断具有最高优先级、而底部的中断具有最低优先级。

    为了解决这个问题、如何实现中断嵌套? 您是否建议在 C2000 软件中提供任何示例软件(如果有)。

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

    尊敬的 Gokhan:

    这是预期行为、不是勘误表。  PIE 通道映射/优先级文本描述了当 CPU 可以自由接收中断时将首先处理哪个挂起中断。 在 C28x 上、一旦 CPU 向量进入 ISR、CPU 默认会设置全局中断屏蔽 (INTM=1)、因此在您从 ISR 返回或在 ISR 嵌套内显式重新启用中断之前、没有其他可屏蔽中断可占先。 因此、如果在 30us ADC 中断挂起时 恰好执行 CAN RX ISR、ADC ISR 开始时间将在之后发生变化、正好是您在 GPIO 时序测量中看到的周期偏差。

    对于嵌套、您可以参阅这篇文章:

    https://software-dl.ti.com/C2000/docs/c28x_interrupt_nesting/html/index.html

    此致、

    Masoud

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

    如果您确实需要 ADC 始终开启时间、请在较低优先级 ISR (CAN) 中启用中断嵌套。 这可使高优先级 ADC 抢占 CAN。 这是周期性快速响应(ADC/控制环路)与缓冲串行 (CAN) 工作负载的标准方法。

    此致、

    Masoud