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.

[参考译文] TMS320C6748:有关使用 NMI 中断的帮助

Guru**** 2584275 points
Other Parts Discussed in Thread: TMS320C6748

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/594792/tms320c6748-help-on-using-nmi-interrupt

器件型号:TMS320C6748

您好!

我需要有关在 TMS320C6748 DSP 中使用不可屏蔽中断(NMI)和触发 NMI 时观察到的 CPU 复位(异常)的专家建议。

平台:TMS320C6748

CPU 时钟:450MHz

编译器优化:-O3.

代码位置:外部 SDRAM、缓存至 L1。

 

在平台中、我们利用 DSP NMI 引脚连接外部器件、以在周期性间隔之后生成中断、因此这意味着我们将 NMI 用作功能中断。 NMI ISR 具有小型实现、可启动 UPP 外设以进行数据采集。

在正常执行(我将说为空闲状态)下、NMI 中断能够完美无缺地工作。 但是、当 NMI 中断在循环中执行一些数学运算的代码段时、我们会看到突然的 DSP 复位。 我们在异常寄存器的帮助下尝试解决了这个问题,但是找不到任何东西,因为 NMI 和异常共享同一个中断矢量。

 

下面是 NMI 中断正常工作的代码段、

while (execute 挂起任务())

{}

 

下面是示例代码段、当被 NMI 中断时、会导致 DSP 复位、

浮点平均值= get_mean_over_Float_Vector (pData、sampleCount);

float x =((mean*y)/ offset)*(1 - Fasta);

我们需要有关该情形的帮助、这里是我们的问题、

  1. 是否建议在嵌入式应用中将 NMI 中断用作功能中断?
  2. 我们能否同时使用 NMI 中断和异常、并使用 EFR、IERR 寄存器确定中断/复位的原因?
  3. NMI 对软件流水线(SPLOOP)指令的中断是否会导致某些不需要的行为? 如果是、我们是否需要采取任何预防措施/实施来避免这种情况?
  4.  中断延迟和正常中断延迟的变化是否可以降低到与 NMI 中断延迟和延迟变化相似的水平(例如、通过使用编译器选项、如-interrupt_threshold)?

当 CPU 时钟频率为450MHz 时、我们观察到 NMI 中断的典型延迟为~500毫微秒、正常中断的延迟为~1微秒。

 

谢谢你。

Shri

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

    您可以使用 NMI 中断。
    2.这应该是可能的。 让 RTOS 专家确认/更正我的陈述
    3、我将再次让设计团队在这里详细说明。
    4.您可以尝试设置中断优先级,这样可以加快 IRQ 的处理速度。

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

    我谨对 Yordan 关于第1项的意见不一,这一项使其他问题成为没有意义的问题。 虽然从技术上讲、您可以将 NMI 用作功能中断、但应将其视为禁止的选择。

    许多高度优化的例程都使用谨慎的中断屏蔽(DINT/RINT 对)、以便充分利用 C6000流水线架构。 如果在其中一个 DINT/RINT 对内发生 NMI、则该算法将失败。

    在可屏蔽中断的 ISR 内、DINT 可以是假定状态、因此可以利用流水线技术、此时的 NMI 将导致应用程序故障。

    CPU 和指令集参考指南讨论了 NMI 行为的详细信息、此行为可破坏一个 SPLOOP。

    NMI 作为一个中断引脚、旨在发出信号、表明发生了一些非常糟糕的情况、系统需要关闭。 此时可能是电源正常信号变低、系统需要尝试保存有限状态、以便在复位或重启后进行恢复。

    当启用了额外的异常时、NMI 会变得更具破坏性、因为它可以在一个分支指令后在5个延迟时隙内中断流水线。 没有办法成功地从这种情况返回。

    我怀疑您测量的额外延迟是由于操作系统自动为可屏蔽中断保存大量寄存器、而不是为 NMI 保存大量寄存器、或者可能为 NMI 保存更少的寄存器。 根据您所做的工作以及您如何测量变化、还可能有许多其他解释。 平均差值不应太大、除非您有大量用于优化数学运算的中断禁用循环-并且这些循环很有可能通过从 NMI 返回而被破坏。

    请让您的工作更轻松、并让您的程序成功、然后切换到使用常规可屏蔽中断。

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

    感谢你的答复。 是同意的、当执行优化的数学运算时、NMI 可能会崩溃、并且我在我的系统上观察到这种行为。
    为了避免使用 NMI、我现在正在寻找和优化正常 GPIO 中断的延迟。 我将更新有关结果的信息。

    我对选项"--interrupt_threshold"有疑问,是否最好设置中断阈值1,以降低中断延迟? 它是否会帮助或导致任何其他问题?

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

    [引用 USER="Shrikrishna B"]NMI 对软件流水线(SPLOOP)指令的中断是否会导致某些不需要的行为? 如果是、我们是否需要采取任何预防措施/实施来避免这种情况?[/引述]

    如果在软件流水线从循环缓冲区中执行时发生中断、则循环将通过执行结语并处理中断来进行向下计数。 存储在 IRP 或 NRP 中的中断返回地址是包含 SPLOOP 指令的执行数据包的地址。 TSR (任务状态寄存器)被复制到 ITSR (用于中断)或 NTSR (用于 NMI 或检测)中、SPLX 位被设定为1。 当从中断返回并且 ITSR 或 NTSR 被复制回 TSR 且 SPLX 位被设定为1时、在 SPLOOP (D)指令的地址上恢复执行、并且通过执行一个 prolog 来将循环通过管道传递回路。 ILC 和 RILC 需要由中断服务例程保存/恢复。

    请注意、C6000 CGTools 7.4.x 的早期版本存在与编译器团队已解决的 SPLOOP 中断相关的已知问题。 有关详细信息,请参阅:

      

    希望这对您有所帮助。

    此致、

    Rahul

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

    您好 Rahul。

    感谢您的详细信息。 我将计划一个任务、使用编译器7.4.21更新来测试 NMI 崩溃行为、并将在此处更新。

    此致、

    Shri。