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:有效地使用 ARM

Guru**** 2455360 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1160270/tms570lc4357-using-arm-effectively

器件型号:TMS570LC4357

您好!

我对 ARM 架构有些陌生、并有一些小问题。  几十年来、我在 ARM 上进行了 C/C++编程、但主要在 Linux 或某些 RTOS 上、因此不必处理一些更晦涩的问题。

我的直接问题是关于 CPSR。  根据某些文档、当进入 FIQ 处理程序时、I (IRQ)位被置位(以屏蔽 IRQ)。  但是、我看到 F (FIQ)位仍然清零。  这似乎表明 FIQ 仍然可能发生(堆栈式中断)、但我很确定不会发生 FIQ 堆栈。  有人能向我澄清这种行为吗?

我拥有的代码是:

uint32 _mask_IRQ_FIQ ()

_asm ("\tmrs r0、CPSR");
_asm ("\tand r0、r0、#0xc0");
_asm ("\tlsr r0、r0、#6");

在 FIQ 处理程序(通知处理程序)中...

uint32 intmask =_MASK_IRQ_FIQ ();

intmask 为0x2。

谢谢。

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

    尊敬的 Peter:

    Cortex R4/5本身不支持中断嵌套。 如果确实需要嵌套中断、则需要完全由应用程序代码管理。 除了挂起中断状态标志之外、没有其他硬件机制可以帮助实现这一点。

    下面的应用 程序可以很方便地完成此操作

    基于 Hercules ARM Cortex-R4/5的微控制器上的嵌套中断(TI.com)

    --

    谢谢、此致、

    Jagadish。

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

    大家好、Jagadish、

    我不需要/不需要嵌套中断。  我的问题是、为什么在 FIQ 处理程序中、CPSR 中的 F 位为_not _ set、以指示 FIQ 中断被屏蔽关闭(禁用)。  I 位_is _置1、指示 IRQ 中断被屏蔽、这在 ARM 文档中有所指示(因为 IRQ 的优先级低于 FIQ)。

    在我看来、FIQ 处理程序应该看到同时设置了_F 和 I 位、这表示从这一点开始 FIQ 和 IRQ 中断都不能被处理(FIQ 从嵌套到 IRQ 从较低优先级)。

    对这种行为的任何见解都将帮助我更好地了解 ARM 的工作方式。

    非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="521569" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1160270/tms570lc4357-using-arm-effectively/4363117 #4363117"]我的问题是为什么在 FIQ 处理程序中、CPSR 中的 F 位为_not _ set、以指示 FIQ 中断被屏蔽(禁用)。[/quote

    通过搜索在 基于 Hercules ARMRegisteredCortexRegistered-R4/5的微控制器上找到中断和异常处理 、 其中第2.5节快速中断请求(FIQ)包含:

    [引用] FIQ 在 Hercules MCU 中实现为不可屏蔽中断。 这意味着、一旦被应用程序激活(通过清除 CPSR 中的 F 位、请参阅第2节)、它就不能再次被屏蔽。 激活 FIQ 后屏蔽 FIQ 的唯一方法是执行 CPU 系统复位。[/QUERP]

    这能回答您的问题吗?

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

    啊、那确实回答了我的问题、并且同意我的意见。

    但是、作为后续问题、如果 FIQ 不可屏蔽、FIQ 中断处理程序是否可以中断(通过另一个 FIQ)、从而使其可堆栈?  我没有看到这种情况发生。  也许 FIQ 中断是"触发级别"的、在处理程序退出之前、它不能被重新布防(并重新触发)。  有什么见解吗?

    非常感谢。

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

    尊敬的 Peter:

    [引用 userid="521569" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1160270/tms570lc4357-using-arm-effectively/4364410 #436410"] FIQ 中断处理程序是否可以中断(通过另一个 FIQ)、使其可以堆栈?

    否、FIQ 处理程序不能中断。

    FIQ 处理程序不可重入、这意味着  

    不可重入函数不能被中断。

    --

    谢谢、此致、

    Jagadish。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="521569" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1160270/tms570lc4357-using-arm-effectively/4364410 #436410"] FIQ 中断处理程序是否可以中断(通过另一个 FIQ)、使其可以堆栈?

      《ARM Cortex-R 系列编程人员指南》的"外部中断请求"部分中、找到:

    [引用]在 Cortex-R 系列处理器中、可以配置处理器、以便 FIQ 不能被软件屏蔽。 这称为不可屏蔽 FIQ、由在处理器复位时采样的硬件配置输入信号控制。 在发生 FIQ 异常时、仍会自动屏蔽它们。

      Cortex-R4和 Cortex-R4F 技术参考手册的中断部分中、r1p4说明了不 可屏蔽快速中断(NMFI)的以下内容:

    [引用]启用 NMFI 行为时、FIQ 中断不能由软件屏蔽。 启用 NMFI 行为可确保当 FIQ 屏蔽、即 CPSR.F 位被复位处理程序清零时、除处理快速中断期间外、始终尽可能快地处理快速中断。 这使得快速中断适合于发出关键事件信号。 NMFI 行为由配置输入信号  CFGNMFI 控制、该信号被置为高电平以启用 NMFI 操作。 NMFI 没有软件控制。[/报价]

    中断部分还介绍了如何:

    • 软件可以通过读取 SCTLR 的 NMFI 位来检测是否启用 NMFI 操作
    • 当启用 NMFI 时、向 CPSR.F 位写入 B1的指令如何保持不变。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    啊、您为我提供的信息比我目前能够吸收或使用的信息更多、但我真的很欣赏对所有这些信息的整合方式的深入了解。

    我需要对 ARM 架构进行深入了解和研究、了解其7种模式及其交互方式。  我在 TI 论坛和一般网上找到了几个对我有所帮助的资源。  不幸的是、我必须在学习有用的东西和现在完成工作之间进行调拨。

    缓慢但肯定会。

    非常感谢。

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

    尊敬的 Peter:

    如果您对答案满意、我们可以关闭此主题。

    --

    谢谢、此致、

    Jagadish。

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

    大家好、Jagadish、

    请暂时保持此主题处于打开状态。

    我有很多关于 ARM 的问题、我希望在不久的将来提出这些问题、我更喜欢将它们收集在一个线程中、而不是分散在许多线程中。

    不幸的是、现在我非常忙、让 Launchpad 子项目正常工作、无法充分组织我的问题和想法来编写有凝聚力的问题。  正如我提到过的、我需要做功课、阅读有关 ARM 架构和设计的几篇文章和视频、并进行足够的理解、以避免浪费他人的时间。  但是、希望很快就能实现。

    非常感谢。

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

    尊敬的 Peter:

    好的、我们将继续打开这个线程。

    --

    谢谢、此致、

    Jagadish。