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.

[参考译文] PROCESSOR-SDK-AM62X:M4 FreeRTOS 中断禁止功能不起作用(HwiP_disable)

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1368454/processor-sdk-am62x-m4-freertos-interrupt-disable-not-working-hwip_disable

器件型号:PROCESSOR-SDK-AM62X
主题中讨论的其他器件:SysConfig

工具与软件:

尊敬的 TI 专家:

我使用的是 MCU+ SDK 8.06版、重点介绍运行 FreeRTOS 的 M4F。

您是否有任何建议/实施以下2项的正确方法?

1.禁用来自 ISR 内部的中断。

2.禁用任务内部的中断。

---

我正在玩 Hwip_disable () API,发现它不工作如文件所述。

3.我找到了 SDK 版本9.02的下面的线程,并想知道同样的修补程序是否适用于 SDK 版本8.06 ?

不确定为什么此 API 函数在 SDK 版本8.06和9.02中损坏... 因此、我想知道是否甚至建议使用此 API 来禁用中断?

->我设置了一个优先级= 4的计时器(syscfg 中的默认值)、并在任务之外调用 Hwip_disable ()、只是为了测试它的功能。  与下面的线程的情况相同、我只能在计时器 PRIO = 7时禁用计时器中断。 此外、出于某种原因、如果我在 HwIP 禁用后立即调用 ClockP_SLEEP 或 DebugP_LOG、则计时器中断会像不调用 HwIP 禁用一样触发。 请注意、我尚未应用下面主题中所述的修复。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1362394/processor-sdk-am62x-interrupts-cannot-be-disabled-by-calling-hwip_disable?tisearch=e2e-sitesearch&keymatch=am62%25252520disable%25252520interrupt#

希望从你的端得到一些建议 如果我的理解有误、请纠正我。 感谢您一如既往的支持!

供参考:

SYSCFG 中的计时器设置

测试代码

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

    您好、Stephen:

    感谢您访问德州仪器(TI) E2E 支持论坛。

    [报价用户 id="606578" url="~/support/processors-group/processors/f/processors-forum/1368454/processor-sdk-am62x-m4-freertos-interrupt-disable-not-working-hwip_disable "]

    1.禁用来自 ISR 内部的中断。

    2.禁用任务内部的中断。

    [报价]

    您可以调用 Hwip_disable () ISR 中的 API 以及非 ISR 上下文中的 API。

    请注意、我尚未应用下面主题中提到的修复程序。

    您可以在执行 先前回复中提到的 e2e 线程中建议的步骤后再试一次吗?

    请告知我们结果。

    您能否说明在上述代码中清除了中断的位置?

    此致、

    Tushar

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

    你好、Tushar、明白了。 将尝试实施修复并更新有关结果。

    您能告诉在上述代码中清除中断的位置吗?

    ->抱歉、我不确定具体的意思、但是中断是在上面的 SYSCFG (调用 my_timer_callback 的 ISR)函数生成的定时器 ISR 中清除的。 此外、以防万一、我尚未在上述代码中调用 Hwip_restore、但仍会触发计时器中断、但我的预期是它不会触发、因为我尚未再次启用中断。  

    1.不过、出于好奇心、可以不可以知道在哪里可以找到其他外设的中断优先级? 据我所知、IPC 通信还利用中断、可以知道 IPC 通信的优先级吗? 此外,我假设在实施修复并调用 Hwip_disable ()后,这将被禁用。

    2.我也尝试过调用 taskENTER_critical (),并发现与 Hwip_disable 的行为完全相同(修复未实现)... 在中断禁用方面、您是否有机会确认上述2个函数是否具有相同的功能?  

    感谢您的支持!

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

    尊敬的 Stephen:

    将尝试实施此修复并更新结果。
    [报价]

    谢谢、我们将等待结果。

    抱歉、我不确定具体意思是什么、但是在上面的 SYSCFG 生成的定时器 ISR (ISR 调用 my_timer_callback)函数内正在清除中断

    您需要在 ISR 内清除计时器溢出状态。

     TimerP_clearOverflowInt() 是用于清除计时器溢出中断的 API。

    请参阅  计时器 API 。  

    [报价 userid="606578" url="~/support/processors-group/processors/f/processors-forum/1368454/processor-sdk-am62x-m4-freertos-interrupt-disable-not-working-hwip_disable/5226168 #5226168"]出于好奇心、我可以知道在哪里可以找到其他外设的中断优先级了吗? 据我所知、IPC 通信也利用中断、我可以知道 IPC 通信的优先级吗?[/quote]

    我需要在内部查看此详细信息。 请等待一段时间再回来。

    。 我还尝试了调用 taskENTER_CRITICAL (),并发现与 Hwip_disable 的行为完全相同(未实现修复)... 在中断禁用方面、您是否有机会确认上述2个函数是否具有相同的功能?  [报价]

    我已经检查了流程,发现 taskENTER_CRITICAL ()内部正在使用 Hwip_disable () API。 请尝试一次、实施修复。

    此致、

    Tushar

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

    尊敬的 Stephen:

    我可以在哪里找到其他外设的中断优先级吗? 据我所知、IPC 通信也利用中断、我可以知道 IPC 通信的优先级吗?

    您可以设置外设的优先级、同时在示例中使用它们、就像在计时器外设中一样。  

    可否通过 IPC 常见内容来详细说明一下您是指 IPC 驱动程序中断优先级?

    此致、

    Tushar

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

    尊敬的 Tushar:  

    是的、正确。 IPC 驱动器中断。 我运行 rpmsg_echo_linux 示例程序、我认为是否正确使用了中断? 我对它的优先级感到好奇。 对于这个、SysConfig 中的 IPC 下没有中断优先级。

    如果我的理解不正确、请告知我。  

    谢谢!

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

    尊敬的 Stephen:

    感谢您的答复。

    我已经检查了驱动程序代码。 如果中断的优先级并非由应用代码决定、则将中断设置为默认优先级(即尽可能低的优先级)。

    对于 M4F 内核、中断的默认优先级为7、而对于 R5F、默认优先级为15。 希望这些信息有所帮助。

    此致、

    Tushar

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

    Tushar、您好、感谢您提供这些信息。

    1)

    我已检查驱动程序代码。 如果中断的优先级不是由应用程序代码决定的、则中断将设置为默认优先级(即尽可能低的优先级)。[/QUOT]

    我可以知道在哪里可以查看这个吗?

    2) 2)我实施了您发送的修复。 这对我来说是可行的、但我必须重新构建整个 SDK 库才能使它正常工作... 我不确定之前是否犯了什么错误。 感谢你的评分

    3.对于  taskenter_critical () 使用 Hwip_disable (),我是否可以知道这是在哪里? 实施修复后、我可以使用 HwiP_disable 同时禁用计时器中断和 IPC 中断、但对于 taskEnter_Critical、似乎没有任何效果。

    4.关于 IPC 通信的中断映射、只要我知道入口点就是位于中的此函数

    {SDK 安装路径}/source/drivers/ipc_notify/v0/ipc_notify_v0.c

    您可以帮助指出 在发生中断时是如何调用它的吗? 我正在查找一个文件 、其中将此函数注册为用于 IPC 通信的 ISR ...

    5.您是否知道在中断禁用后调用 ClockP_SLEEP 或 DebugP_LOG 会导致再次触发中断的原因? 我的案例定时器 ISR。  

    [报价 userid="16414" url="~/support/processors-group/processors/f/processors-forum/1368454/processor-sdk-am62x-m4-freertos-interrupt-disable-not-working-hwip_disable/5226855 #5226855"]  TimerP_clearOverflowInt() 是用于清除计时器溢出中断的 API。[/QUOT]

    我已检查、一旦在 syscfg 中包含计时器、该函数就将由自动生成的 ISR 函数调用。

    谢谢你

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

    尊敬的 Stephen:

    感谢您的答复。

    我可以在哪里查看这个吗?

    请检查  Hwip_Params_init ()  用于将 Hwip_parameter 初始化为默认值的 API。 您可以在内部找到该 API ${MCU+SDK}/source/kernel/dpl/nortos /[M4/R5]/[hwip_armv7m.c/Hwip_armv7r_vim.c]  子目录。

    我已经实施了您发送的修复程序。 这对我来说是可行的、但我必须重新构建整个 SDK 库才能使它正常工作... 我不确定之前是否犯了什么错误。 感谢您的修复。

    感谢您的确认。

    关于  使用 HwiP_disable ()的 taskENTER_critical ()我是否可以知道它位于何处? 实施修复后,我可以使用 Hwip_disable 同时禁用计时器中断和 IPC 中断,但对于 taskEnter_Critical 似乎没有任何效果。[/报价]

    每个内核都有不同版本的 API。 您需要在 SDK 源代码中回溯来找到确切的实现。 我在其中查看过与 C7x 内核相关的矢量。 。 taskenter_critical () API 位于 ${MCU+SDK}/source/kernel/freertos/FreeRTOS-Kernel/include/task.h  初始文本文件。

    你是否知道在中断禁用后调用 ClockP_SLEEP 或 DebugP_LOG 会导致再次触发中断的原因? 我的案例定时器 ISR。  [报价]

    您能否提供用于检查此情况的示例代码? DebugP_LOG()和 ClockP_SLEEP() API 与中断功能无关。

    您能否说明 在发生中断时是如何调用此函数的? 我正在查找一个文件 、该文件将此函数注册为 IPC 通信的 ISR ...
    [/quote]

    在中完成中断设置  IpcNotify_init()  API、在内部调用  TI_DRIVERS_CONFIG.c 生成的头文件。

    请参阅下图。

    此致、

    Tushar

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

    Tushar、您好、非常感谢您提供以上信息。 我将检查它们。

    您能提供一个用于检查此问题的示例代码吗? DebugP_LOG()和 ClockP_SLEEP() API 与中断功能无关。

    这也是我的期望。 实际上、我很难确定发生了什么、直到我能够将其展开到我用于调试目的的两个代码。 您是否需要项目本身? (虽然代码很杂乱)至于简化的代码、您可以参阅我之前粘贴的上面的片段。

    正如你在 timer main 下看到的,调用 Hwip_disable ()后,我没有调用 Hwip_restore。 所以我希望永久禁用计时器 ISR。 但是、这段时间你调用 ClockP Sleep 或 DebugP log。 ISR 似乎再次被触发(计数器递增)。  

    中断设置在中完成  IpcNotify_init()  API、在内部调用  TI_DRIVERS_CONFIG.c 通过 SysConfig 生成的文件。[/QUOT]

    谢谢您的回答。 错过了这个。 但是... 如果我错了、请更正我(不确定此问题是否正确)

    但是、据我所知、还有一个类似 ISR 函数也被映射到内存地址/寄存器。  可能是中断矢量表之类的... 包含在1个文件中... 不确定是否也有这种映射? 一旦使用 Hwip 回调来注册 ISR 函数、如何将此映射到中断寄存器\地址/跳转点...?

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

    您好、Stephen:

    类似于 中断矢量表的内容可能…… 包含在1个文件中... 不确定是否也有这种映射?

    有关 M4F 内核的矢量表和中断的详细信息、请参阅 ${MCU+SDK}\source\kernel\[nortos/freertos]\dpl\m4\Hwip_armv7m_handler_[nortos/freertos].c 初始文本文件。

    此致、

    Tushar

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

    尊敬的 Tushar:

    感谢您的观看。

    我将等待有关 DebugP_LOG 和 ClockP_SLEEP 的更新、这些更新会影响中断禁用。

    谢谢你

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

    尊敬的 Stephen:

    我将等待有关 DebugP_LOG 和 ClockP_SLEEP 影响中断禁用的更新。

    我将创建一个演示项目并检查以上场景。

    请等待一段时间再回来。

    此致、

    Tushar

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

    Tushar 您好,谢谢您将等待您的更新。

    BTW,我可以知道何时发布 Hwip_disable ()的官方修补程序吗? 我认为在新版本的 SDK 中呢?  

    谢谢!

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

    尊敬的 Stephen:

    指定的专家将于下周初离职、请期待延迟回复。

    感谢您的耐心。

    此致、

    Vaibhav

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

    您好、Stephen:

    感谢您的耐心。

    我已为此问题提出内部 Jira 工单、并将更新有关修复版本的信息。

    同时、我创建了一个示例项目来重现您的问题、并将检查根本原因。

    请等待一段时间再回来。

    此致、

    Tushar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我创建了一个示例项目以复制您的问题、并将检查根本原因。

    尊敬的 Tushar:

     在禁用中断后、您是否能够重现我使用调试日志或时钟睡眠时遇到的问题?  

    谢谢!

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

    尊敬的 Stephen:

    感谢您的耐心。

    您是否可以 复制在禁用中断后使用调试日志或时钟睡眠时遇到的问题?  [报价]

    是的、我能够在最后重复这个问题

    我已为此问题提交了内部 Jira 工单、并将 在收到开发团队的反馈时向您进行更新。

    此致、

    Tushar  

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

    尊敬的 Stephen:

    感谢您的耐心。

    我们从开发团队那里获得信息。 请查看以下回复。

    这是预期行为。 DebugP_Log() 需要 UART 中断。

    ClockP_SLEEP() 需要计时器中断。

    希望上述信息对您有所帮助。

    此致、

    Tushar

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

    谢谢您。

    如何解决 HwIP 中断禁用问题? 我们是否有预期的发布日期?  

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

    尊敬的 Stephen:

    如何修复 HwIP 中断禁用问题? 我们是否有预期的发布日期?  [报价]

    该小组需要分析实施修补程序对整个系统的影响。 因为此 API 在 SDK 中的各种位置使用。

    未计划在即将发布的 SDK 版本中修复 Hwip_disable () API。 但我们将更新有关 Hwip_disable () API 的文档或发行说明。

    谢谢、此致、

    Tushar

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

    尊敬的 Tushar:

    明白了。 我理解情况。 如果我们想禁用某个中断或所有中断、您有什么建议/替代方法吗?  

    (抱歉、尚未尝试搜索此内容)

    谢谢!

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

    您好、Stephen:

    如果我们要禁用某个特定中断或所有中断?  [报价]

    如果您想禁用特定中断、可以使用 hwiP_disableInt (intrNum) API 并将中断号作为参数传递。  

    要了解有关 Hwip API 的更多信息、请参阅  DPL_HWIP_API_guide

    此致、

    Tushar