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.

[参考译文] RTOS/TMS570LS0432:GIOA 和 GIOB 中断问题

Guru**** 2620905 points

Other Parts Discussed in Thread: HALCOGEN, TMS570LS0432

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/788744/rtos-tms570ls0432-issue-with-gioa-and-giob-interrupts

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

工具/软件:TI-RTOS

我使用 HALCOGEN 为具有 FreeRTOS 支持的 Hercules LaunchPad 开发板的 TMS570LS04x 创建了一个简单项目。 我只想让 GIOA2 LED 闪烁、同时按下电路板上的 GIOA7按钮。 在 HALCOGEN I 中、在下降沿触发 GIOA7按钮的中断、然后我为 Code Composer Studio 生成了代码。 在 CCS 中、我添加了一些用于使 GIOA2 LED 闪烁的代码。 我在 GIOA ISR 处理程序中设置断点。

我遇到的问题是根本不会触发 GIOA ISR。 我是说 TMS570 CPU 应该在通道9上设置中断标志并为 GIOA 触发我的 ISR。 相反、我注意到我在 vimREG->INTREQ0寄存器的通道23 (GIOB)上获得中断标志。  

我已经检查了 VIM 中断通道映射、一切都正常。 这意味着存在映射 INT_REQ9 -> INT_CHAN9和 INT_REQ23->INT_CHAN23。 因此、当我按下 GIOA7按钮时、我应该在通道9上获得中断、但它在通道23上显示为中断。  

如何解释这种影响?

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

    您好!
    通道9是0级中断、通道23是1级中断。 检查 HALCoGen 中的 GIO 设置以查看已启用的中断级别。

    此致、
    米罗

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好 您能更准确、更详细地描述一下我应该怎么做吗? 我不熟悉此开发板。 在哪里可以找到给定中断的级别? 中断的确切级别是什么? 您是指中断 FIQ 还是 IRQ 级别?

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

    您好!

    以下是 GIO 方框图:

    在 HALCoGen 中、您可以设置此图中所示的所有寄存器。

    关于中断、如果您在特定引脚(GIOENASET/GIOENACLR)上启用 GIO 中断、那么您可以选择(通过设置 GIOLVLSET/GIOLVLCLR 寄存器)该 GIO 的两个中断级别-级别 A/高级中断(由 VIM 通道9提供服务)和级别 B/低级中断(由 VIM 通道23提供服务)。

    在设置 GIO 模块之后、您可以在 VIM 模块中选择此 GIO 引脚是生成 IRQ 还是 FIQ。

    HALCoGen 在 Gio.c 中为您选择的级别生成中断处理程序。 例如:void gioHighLevelInterrupt (void)

    此致、

    米罗

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我没有在我的第一个帖子中写入我为 HALCoGen 中的 GIOA 选择了 IRQ (非 FIQ)。

    问题是 VIM 告知 IRQ 来自通道23 (GIOB)、但是应该报告通道9 (GIOA)。 当我按下 GIOA7按钮时、VIM 将 INTREQ0寄存器中的位23 (GIOB)置位、这是错误的、因为它应该将位9 (GIOA)置位。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Adam、
    您如何在 GIO->Port A 选项卡中设置高/低优先级(我在第二张图片中标记了红色圆圈)? 根据图19-4、如果您选择了低优先级(第二幅图中的红圈)、那么 GIO 中断被映射到 B 级/低电平中断(由 VIM 通道23提供服务)。

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

    您好 Miroslav、

    是的,我将 GIO->Port A 设置为与您相同的低优先级(用红色圆圈选择)。 但我不清楚为什么在 INTREQ9的通道映射(HALCoGen 中的 VIM 通道0-31选项卡)中、通道23会为 GIOA 中断提供服务、我有通道9 (而不是23)。

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    TMS570LS0432可生成低电平中断 B 和高电平中断 A。这由 GIOLVLSET 和 GIOLVLCLR 完成。 低电平中断 B 的优先级低于高电平中断 A。在 VIM 模块(矢量中断管理器模块)中、编号较小的通道具有更高的优先级、它们首先被处理。 通道9的优先级高于通道23。
    TMS570LS0432只有 GIO 端口 A (GIOA)。 但对于具有更多 GIO 端口的器件(例如、GIOA 和 GIOB)、情况是相同的。 GIOA 和 GIOB 端口将由 GIO Int A (通道9)和 GIO Int B (通道23)提供服务。
    在您的情况下、如果您选择"高优先级"(我用红色圆圈标记的设置)、则由 GIOA[7]生成的 GIO 中断(在此图中、显示了 GIOA[7])将按通道9提供服务。

    希望这对您有所帮助。

    此致、
    米罗
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我想现在我看到了我的误解。 我认为"GIO Int A"是针对 GIOA 的中断、"GIO Int B"是针对 GIOB 的中断。 您的最后一个答案已将其清除。 GIO INT x 涉及中断级别、而不是直接涉及 GIO 端口。 谢谢你。