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.

[参考译文] F29H859TU-Q1:为什么它 n't 清除计时器中断中的中断标志?

Guru**** 2889230 points

Other Parts Discussed in Thread: F29H859TU-Q1

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1643887/f29h859tu-q1-why-it-isn-t-clear-interrupt-flag-in-timer-interrupt

器件型号: F29H859TU-Q1

您好的团队、

我向我的客户询问这个问题。

我们的 TRM 中说明了建议的中断处理过程、表明它应该在从 ISR 返回之前清除中断标志

image.png

在我们的 PWM、ADC 和其他外设中断演示中、它应该在退出 ISR 之前清除 INT 标志

image.png

但不能清除计时器中断标志

image.png

您能解释一下吗? 谢谢

BRS

Shuqing

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

    尊敬的 Shuqing:

    F29H859TU-Q1 上的 CPU 计时器使用硬件自动清除机制 — 当中断控制器在进入 ISR 时确认中断时、计时器溢出标志会自动清除。 这就是为什么与 PWM、ADC 和其他外设演示不同、计时器演示代码不包含显式标志清除代码[1]。

    这是 硬件设计差异、而不是为了疏忽演示代码。

    为什么计时器的行为与 PWM/ADC 不同

    在一起
    标志清除
    原因
    CPU 计时器
    自动(硬件)
    溢出标志在中断确认时自动清除
    PWM (ePWM)
    手动(软件)
    跳闸/事件标志持续存在、直到通过 TZCLR 寄存器明确清除[2]
    挑战
    手动(软件)
    事件标志需要软件设置清除位;如果两者同时发生、则硬件具有优先级[3]
    LIN
    手动(软件)
    必须清除 SCIFLR 标志、验证其是否已清除、然后清除全局中断[4]

    对于 ADC 等外设,标志会被锁存 — 这些标志保持设置状态,直到软件明确将其清除。 如果您不清除它们、则不会再生成该类型的中断[3]。 相比之下、CPU 计时器在硬件中自动处理此操作、从而简化了 ISR 实现。

    也就是说、DriverLib 确实 提供了 CPUTimer_clearOverflowFlag() 是否需要手动清除[1]。 通用 C29x 中断编码器模板仍包含注释、 // Ensure to clear all interrupt flags 以此提醒需要它的外设[5]。

    对于生产代码、遵循 TRM 建议的中断处理序列仍然是一种很好的做法。 虽然 CPU 计时器自动清除其标志、但显式调用 CPUTimer_clearOverflowFlag() 不会增加任何危害、并使代码自记录并与其他外设 ISR 保持一致。


    为了帮助完善这项建议、了解以下信息会有所帮助:

    • 客户是使用 CPU 计时器 0、1 还是 2(行为应该一致,但值得确认)
    • 无论客户遇到任何功能问题(虚假中断,丢失中断)、还是只是寻求对文档不一致的解释

    资源:

    1. F29H85x CPU 计时器 API 文档
    2. F29H85x TRM - ePWM 跳闸区和逐周期行为
    3. F29H85x TRM - ADC 事件状态寄存器
    4. F29H85x TRM — 处理 LIN 中断
    5. C2000 IDEA 中断编码器应用手册

    此致、

    Zackary Fleenor

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

    您好、Zackary、

    您能帮助指出您在 TRM 中提到的陈述在哪里?

    BRS

    Shuqing

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

    尊敬的 Shuqing:

    CPU 计时器模块的 TCR(计时器控制寄存器)字段说明中可以找到相关的 TRM 语句。 具体而言、 F29H85x TRM 的表 2-578 中的 TIF(计时器溢出标志)位说明指出:

    “TIF 不会自动清除、无需清除即可启用下一个计时器中断。“ [1]

    对上一个响应的校正

    我需要澄清前一个答复中的一些重要内容。 TRM 没有 以所述方式描述“硬件自动清除“机制。 相反、TRM 中记录的实际行为是:

    方面
    TRM 说什么
    自动清除?
    否—“不自动清除 TIF “[1]
    下一个中断需要?
    否—“无需清除即可启用下一个计时器中断“[1]
    如何手动清除
    将 1 写入 TIF 位(R/W1C 类型)[1]

    因此、计时器演示代码 不清除中断标志的原因不是 因为它会自动清除、而是因为 清除它并不是计时器生成后续中断的必要条件。 该标志是一个状态指示器、在您明确将其清除之前一直存在、但与 PWM/ADC 标志不同、保持该标志置位 会阻止未来的计时器中断[1]。

    这是关键的硬件设计差异:对于 ePWM 和 ADC 等外设、必须清除中断标志、否则外设不会产生另一个中断。 对于 CPU 计时器、中断机制独立于 TIF 标志状态运行。

    TRM 位置

    您可以在 CPU 计时器一章中找到这一点、特别是:

    • 表 2-578:TCR 寄存器字段说明 —位 15 (TIF)[1]
    • F29H85x TRM 第 899 页 (spruj79a)

    CPUTimer_clearOverflowFlag() 如果客户希望出于状态跟踪目的清除 TIF、则可以使用 DriverLib 函数、但它在功能上是可选的、以生成中断。


    为了帮助进一步完善这一点、了解以下内容会有所帮助:

    • 无论客户是遇到任何功能问题(丢失或虚假中断)、还是这纯粹是一个文档说明问题
    • 正在使用哪个 CPU 计时器实例 (0、1 或 2)

    1. F29H85x TRM - TCR 寄存器字段说明(表 2-578)

    此致、

    Zackary Fleenor