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.

[参考译文] TMS570LC4357:将 RTI 中断 Pendig 标志复位-通过软件与自动复位

Guru**** 2403425 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1357203/tms570lc4357-reset-the-rti-interrupt-pendig-flag---by-software-vs-automatically

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

您好!

我们使用以下文档中描述的方法为我们的操作系统生成系统节拍: https://www.ti.com/lit/fs/spna123/spna123.pdf

在这个示例中(以及我们的实现中)、我们 用软件将 RTI 中断标志寄存器(RTIINTFLAG)中的中断挂起位 INT3复位(因为我们使用了比较3)。

我想以这种方式对其进行更改、该中断挂起位将自动复位。 对于此 I  

- 在  RTI 比较3清除寄存器(RTICOMP3CLR)中定义了计数器值 CMP3CLR 和

-通过写入 RTI 比较中断清除使能寄存器(RTIINTCLRENABLE)的 INTCLRENABLE 3位中的0xA 来激活自动复位、

但它不起作用。

另一方面、我们还使用通过使用自动复位功能、由 RTI 的比较0循环触发的内部 ADC 的转换。 工作正常。

RTI 自动复位功能是否存在限制? 或者我有什么问题吗?

我在问我的、为什么 spna123.pdf 中的示例不使用自动复位功能?

感谢您的帮助。

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

    Jens、您好!

    我们已开始处理您的问题、并将尽快为您提供更新。

    --
    谢谢。此致、
    Jagadish。

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

    Jens、您好!

    很抱歉我的回复延迟了。 在这段时间里,我一直在担心其他的问题。

    我不明白中断标志的自动复位是什么意思。

    在每次比较匹配后都会设置中断标志、例如、如果我将中断设置为1ms、则每设置1ms、都会设置中断标志、我们需要验证该标志并需要执行相应操作。 在执行该操作之后或之前、我们应清除中断标志以标识下一个中断标志。

    我不明白您为什么要自动清除这个中断标志。 没有人会这么做。

    如果您验证 HALCoGen 生成的中断代码、您可以看到驱动程序处理程序代码的第一步是清除中断标志、然后调用通知函数。

    在通知功能中、我们可以由用户执行必要的操作。

    如果你根本不需要 RTI 中断、那么你也可以使用轮询方法、这是验证标志的手动方法。

    我在这里附加了两个代码:一个是轮询方法、另一个是中断方法。

    请回顾这两项内容。

    e2e.ti.com/.../8562.RTI_5F00_1msec_5F00_TEST.zip

    e2e.ti.com/.../3386.RTI_5F00_Interrupt_5F00_Generation_5F00_For_5F00_50ms_5F00_LC4357.zip

    --
    谢谢。此致、
    Jagadish。

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

    您好 Jagadish:

    如果您需要有关初始化步骤/值的更多详细信息、请告诉我。

    此致、

    延斯

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

    Jens、您好!

    请参考我最后的评论。

    --

    谢谢。此致、
    Jagadish。

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

    您好 Jagadish:

    感谢您的帮助。

    首先:有关 初始化步骤/值的更多详细信息、请忽略我之前的回答。 由于我的浏览器没有刷新此页面、我没有看到您的答案。

    现在、您的答案是:

    >我不明白中断标志的自动复位是什么意思。

    我的意思是使用 RTICOMPxCLR 寄存器(x = 0..3)。

    >我不明白您为什么要自动清除此中断标志。

    由于 RTI 比较中断清除使能寄存器(RTIINTCLRENABLE)的描述……

    来源: 技术参考手册、 SPNU563A、 2018年3月、第 17.3.35章

    ...我认为,这是一个很好的功能,当没有必要清除 INT-Flag 手动。

    对我来说、使用"自动清除"功能 将会满足我的需求。

    >没有人会这样做。

    使用此 MCU 提供的功能不是一个好主意吗?

    但回到我的问题...

    我将比较3 用于系统节拍(1ms)。  

    配置比较3后、自由运行计数器0启动。

    比较0配置为触发内部 ADC 循环(2ms)。 为此、它还使用自由运行的计数器0。

    对于比较0、自动清除正常工作、对于比较3则不工作。

    比较3 INT-FLAG 不起作用的自动清除可能是什么原因?

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

    Jens、您好!

    使用此 MCU 提供的功能是否是个好主意?

    抱歉!

    我在 RTI 中的自动清除功能之前从未看到或使用过、这就是我提出这个问题的原因。

    现在、问题来了:

    仔细阅读本文档后、我了解到该自动清除功能不适用于中断、它仅在我们配置 RTI 触发到 DMA 或其他外设时有用。

    如果在产生 RTI 中断的情况下启用这个自动清除功能、那么情况就是 RTI 标志将在产生中断之前被清除。 因此、这意味着我们无法再转到处理程序例程(rtiCompare0Interrupt 或 rtiCompare3Interrupt 等)。

    但是、在 RTI 触发生成到 DMA 或其他外设的情况下、在这种情况下、我们不需要运行处理程序中的任何代码。 我们只是希望 RTI 触发器需要路由到相应的 DMA 或外设、因此在这种情况下、此自动清除功能将很有用。

    我还在实践中验证了这一点、我对上述行为的看法是正确的。

    --
    谢谢。此致、
    Jagadish。

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

    您好 Jagadish:

    >仔细阅读此文档后、我了解到该自动清除功能不适用于中断、只有在 我们配置 RTI 触发到 DMA 或其他外设时才有用。

    我怕你比我更仔细地阅读这篇文章! :-)

    如果在产生 RTI 中断的情况下启用这个自动清除功能,那么所发生的情况就是 RTI 标志将在产生中断之前被清除。 因此、这意味着我们无法再转到处理程序例程(rtiCompare0Interrupt 或 rtiCompare3Interrupt 等)。

    我想知道如果清除计数器值是比较-计数器-更新值的一半、为什么在生成中断之前会将该 RTI 标志清零。

    从0开始自由运行计数器之前的初始值为:

    RTICOMP3 = 1000

    RTIUDCP3=1000

    CMP3CLR = 1500

    (在我们的系统中、1000为1000 µs = 1ms)

    但是、无论如何... 您已经测试并确认自动清除不适用于比较中断。

    感谢您的帮助!!!

     此致、

    延斯