您好!
我需要有关在 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);
。
。
我们需要有关该情形的帮助、这里是我们的问题、
- 是否建议在嵌入式应用中将 NMI 中断用作功能中断?
- 我们能否同时使用 NMI 中断和异常、并使用 EFR、IERR 寄存器确定中断/复位的原因?
- NMI 对软件流水线(SPLOOP)指令的中断是否会导致某些不需要的行为? 如果是、我们是否需要采取任何预防措施/实施来避免这种情况?
- 中断延迟和正常中断延迟的变化是否可以降低到与 NMI 中断延迟和延迟变化相似的水平(例如、通过使用编译器选项、如-interrupt_threshold)?
当 CPU 时钟频率为450MHz 时、我们观察到 NMI 中断的典型延迟为~500毫微秒、正常中断的延迟为~1微秒。
谢谢你。
Shri
