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.

[参考译文] TMS320F28069:高优先级 ISR 调用中的低优先级中断引入的中断延迟抖动

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1233830/tms320f28069-interrupt-latency-jitter-introduced-by-low-priority-interrupt-in-high-priority-isr-call

器件型号:TMS320F28069

随附代码使用 PWM2来生成一些固定频率、10kHz 和固定占空比(40%)的测试脉冲。

在 GPIO13上读取这些脉冲。 XINT1在 GPIO13上启用、上升沿检测打开。 因此、只要 PWM2脉冲变为高电平、就应该触发 XINT1中断。

我还启用了固定频率为500Hz 的 PWM1模块。  当 CNT=COMPA 时、PWM 引脚被驱动为高电平、 当 CNT=COMPB 时、PWM 引脚被驱动为低电平。

还在 XINT1中断中具有测试 GPIO21切换。

只要 XINT1中断被触发、它就会把 PWM1CNT 复位为0。 因此、基本而言、只要 PMW2正在生成脉冲、PWM1应该永远不会看到 CNT=PRD。

现在、如果我必须启用其他中断、那么以上所有操作都很好。 我在 XINT1中断 ISR 调用中看到了固定延迟、该延迟反映在 PWM1脉冲上、并在测试 GPIO21中看到。

只要我在附加的代码中引入另外一个中断、它的 Timer1中断就会开始变得糟糕。 与 XINT1中断优先级(5)、PIE 组1相比、CPU 优先级(17)非常低。

我看到 XINT1中断延迟中存在抖动、扩展时间大约为300ns。 在连接的 PWM1中看到的抖动是从 XINT1传播的抖动。 PMW1CNT 在 XINT 中复位为0、因此 XINT1 ISR 中的任何抖动都将显示在 PWM1脉冲中。

我在用于在 XINT1 ISR 中进行切换的测试 GPIO 输出引脚21中看到了相同的抖动。

我的问题是、为什么低优先级中断会导致高优先级中断延迟发生抖动? 附件是示波器上展示我的读数的一些视频。

源码:

/cfs-file/__key/communityserver-discussions-components-files/171/Example_5F00_2806xEPwmUpAQ.c

示波器视频:   

D12上的 PMW1、D9上的 PWM2、D8上的 GPIO21

/cfs-file/__key/communityserver-discussions-components-files/171/JitterInPWM.MOV

 /cfs-file/__key/communityserver-discussions-components-files/171/JitterInGpio21.MOV