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.

[参考译文] RM48L952:嵌套中断问题、FIQ 中断 IRQ

Guru**** 2463330 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/656391/rm48l952-problems-with-nested-interrupts-fiq-interrupting-irq

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

您好!

我无法在此处发布我的代码、但我将尝试解释我的方案、我想问这是否是有效的方案。  我们的项目有2个中断(IRQ 和 FIQ)。 IRQ (RTI -比较1)每1毫秒运行一次、而 FIQ (RTI -比较0)每125微秒运行一次。 1ms 中断需要超过200us 才能完成其执行、它最终使用  TI (FAPI)提供的仿真 EEPROM 代码。 下图显示了它们之间的关系:

X 表示 CPU 处理。 您可以看到、有时 IRQ 会被 FIQ 中断、当它发生时、FIQ 处理其代码、返回、 但与 IRQ 相关的中断堆栈已损坏、并且在 IRQ 返回时、系统崩溃。 在我看来、由于某种原因、FIQ 正在破坏 IRQ 保存的堆栈。

问题:

  • 当 FAPI 在由 IRQ 调用的中断服务中运行时、它是否支持被 FIQ 中断?
  • 上述方法(FIQ+IRQ)是否有效 ?


PS:如果我修改了代码、将 FIQ 更改为 IRQ 并使用 TI 提供的代码、此代码允许 IRQ 被另一个高优先级的 IRQ 抢占、则问题不会出现、它按预期运行。

此致、

Thiago Esteves

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

    ARM Cortex-R4内核不支持一次获取多个 IRQ。 这主要是因为它只有一个 SPSR 和一个 LR 寄存器。 如果 IRQ 被另一个 IRQ 中断、这些 CPU 寄存器将被覆盖(损坏)、并且以后不再能够恢复处理器状态。 如果要使用不建议使用的嵌套 IRQ、ISR 处理程序需要保留堆栈上的 CPU 通用寄存器(SPSR、LR 等)。

    Fiq+IRQ 正常工作。 您能否在 ISR 中尝试不使用闪存操作的 FIQ+IRQ? 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Wang、

    感谢您的回答、我创建 了一个 EEPROM 存根来仿真 EEPROM、当它从 FIQ 返回到 IRQ 时、结果仍然相同、系统会丢失堆栈(我可以通过 code composer 调试看到)。 我注释掉了所有 FIQ 代码、ISR 不执行任何操作。 我想我缺少一些配置。 我正在使用 HALCOGEN 并检查寄存器、在我看来、RTI 比较0被正确配置为 FIQ、RTI 比较1被配置为 IRQ。 我缺少什么吗? 我附加了一个具有我的配置的映像。 我更改了 rtiCompare0Interrupt 调用的函数、只是为了避免它们共享相同的函数。

    kr

    Thiago Esteves

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、
    我解决了我的问题、IRQ+FIQ 确实可以正常工作。 我在 IRQ 期间遇到堆栈溢出。 HALCOGEN 中为 IRQ 配置的堆栈对我的项目来说太小了。

    非常感谢
    Thiago Esteves