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.

[参考译文] TMS320C6654:检查挂起中断

Guru**** 2614265 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/572396/tms320c6654-check-pending-interrupt

器件型号:TMS320C6654
Thread 中讨论的其他器件:SYSBIOS

您好!

我有一个中断、可以 在很短的时间内再次触发。 因此、我想在我的中断子例程结束时检查中断是否再次挂起。

我找到的唯一解决方案是读取中断标志寄存器。 您能否确认没有更好的解决方案? (我在 SYSBIOS 和 CSL 中找不到任何内容)

您是否有 一个使用 MVC 读取 C/C++代码中的 IFR 的示例?

感谢你的帮助

(我在 tms320c6654上使用 SYSBIOS 6.46.00.23、CCS 6.1.3)

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

    我已将此事转交给专家。 他们的反馈应发布在此处。

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

    请查看 TI RTOS/SYSBIOS 中 HWI 的中断屏蔽功能。 n`t 情况下、TI RTOS 中的所有中断 HWI 都设置为 MAskingOption_SELF、这意味着允许中断嵌套、但相同的 ISR ca μ s 中断本身。 通过提供自定义掩码或将此掩码指定为 MaskingOption_None 或 MaskingOption_bitmask、可以更改此默认行为
    但是、这非常危险、您可能会遇到 intto 系统问题。

    我建议您查看以下有关 TI RTOS 屏蔽的文档:
    software-dl.ti.com/.../IHwi.html

    为了更好地理解、您还可以在 TI RTOS 的 TI 培训系列中查看此设置的说明:
    training.ti.com/ti-rtos-workshop-series-5-10-using-hwi

    注意:中断屏蔽在该视频开始后30 - 35分钟的时间间隔内覆盖

    平台开发套件(PDK)中器件的 CSL 代码提供用于读取和写入 IFR 的 C 代码。 如果您使用的是 SDK 软件、则会在 pdk_c665x_x_x_x\packages/ti\csl 下的 csl_chipAux.h 文件中定义 CSL 函数

    我希望这有助于提供一些指导。

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

    您好!

    您将情况描述为"interrupt may get sond time"、而 ISR 仍在忙于处理之前的请求。 实际上、这意味着中断事件周期可以比 ISR 持续时间短。 此时、您会考虑第二次发生中断、是的、您可能可以使用标志寄存器检测中断。 但请尝试超越以下方面:如果在 ISR 运行期间不仅第二次触发中断、而且第三次触发中断、会发生什么情况? 您将无法检测到它。

    假设您希望 ISR 像触发中断一样多次运行。 然后我建议另一个时间表。 对于外部中断、请制作一个非常短的 HWI 处理程序、该处理程序将实际 ISR 发布为 SWI。 然后可以使用 Swi_inc ()函数来更新 SWI 触发计数器。 如果您决定这样做,请仔细阅读 SysBIOS 用户指南中的3.5.5 Using a Swi Object’s Trigger Variable,以避免对触发变量的误解。

    希望这对您有所帮助。

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

    感谢您的回答。
    我不需要为第二个 ISR 提供服务、而只是需要在上一个 ISR 结束之前通知它发生了。

    因此、Rahul 基于 CSL 的解决方案应该是我最需要的解决方案。 我要尝试一下

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

    读取 IFR 是正常操作、但它不允许我检查我的挂起中断。

    我已将待处理的检测代码放入我要监视的中断的子例程中、而不附加任何内容。
    我已经将同一代码放入另一个中断中、它检测到我要监视的中断正暂挂。

    如果我们当前正在处理该中断、是否有任何保护措施可防止 IFR 中的 IFM 位变为高电平
    我在 springh7中没有找到任何有关这方面的信息。

    如果这可能会产生影响、我的中断是 gpio18、我使用 CpIntc 映射和分派它

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

    没有人能解释为什么当我在处理前一个中断时第二次发生同一中断时、我在 IFR 中看不到 IFM 位被置位。
    这是否意味着我丢失了第二个 ISR?

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

    您能否共享中断例程中的代码、其中一个用于检查 IFR、另一个用于检测中断是否挂起? 我不确定是否存在导致这种情况的路由问题。 您是否还查看 了 www.ti.com/.../sprugw0c.pdf 中的第9.4.1节 、以确保 IER 和 GIE 位设置正确。

    就我所知、该寄存器没有保护功能、但我可以在内部检查设计中是否存在未记录的内容。

    此致、
    Rahul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    另一个需要检查的问题是、当 TI RTOS 进入 ISR 时、它是否以某种方式禁用中断。 请查看这里解释的屏蔽中断和嵌套中断部分、看看您是否正在运行以下情况之一:
    training.ti.com/ti-rtos-workshop-series-5-10-using-hwi

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

    我的检查在两个中断例程中是相同的:
    if (0!=(IFR &(1 << myInterruptNumber))))

    为了进行测试、我在我的例程中、在之前的 IFR 检查之前、在 timer7上添加了一段时间、以确保第二次中断。
    我还尝试添加一个 Hwi_post (myInterruptNumber)、在这种情况下、IFM 位被置位、我通过我的检查来正确检测它。

    我尝试在计时器中断时执行相同的操作。 在计时器中断例程中、我添加了比配置的计时器更长的时间、在这段时间后、我检查了与该计时器对应的 IFR 位。 我的检查正确检测到了挂起中断

    因此、似乎是 GPIO 中断信号未存储到 IFR 中。 这可能是由于 GPIO 模块或 CpIntc_Dispatch 的使用造成的?

    我已经阅读了您的文档、并确认掩码不在 GPIO 和 IFR 之间、而是在 IFR 和 CPU 之间。 因此、即使子例程由于中断被屏蔽而未被调用、IFR 也应反映接收到的中断信号。

    此致
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Rahul、
    对我的问题没有任何想法?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我在 CpIntc_dispatch 源代码中找到了我的答案、该源代码首先禁用主机中断。
    因此、如果使用 CpIntc_Dispatch、必须将挂起的中断检查到 CIC 寄存器、而不是 IFR 寄存器中

    此致