您好!
我在 DSP F28335上使用免费的 Modbus。
DSP 项目中有一些不想被中断的关键中断(ADC ISR)、 我应该怎么做
"#define ENTER_critical SECTION () "
"#define EXIT_CRITICE_SECTION () "
谢谢!
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.
您好!
我在 DSP F28335上使用免费的 Modbus。
DSP 项目中有一些不想被中断的关键中断(ADC ISR)、 我应该怎么做
"#define ENTER_critical SECTION () "
"#define EXIT_CRITICE_SECTION () "
谢谢!
实际上,如果我定义 enter_critical section() DINT, DSP 处理 sci 通信将花费几百 us 的时间。
应每50us 执行一次的 ADC 中断被强制推迟、并且在 ADC 中断中执行的 PWM 更新可能会带来一些安全风险。 所以如果我不想这种隐藏的危险、也不想中断 ADC 中断、我该怎么办?
顺便说一下,我 有一个长期困扰我的问题,关于 ePWM:
如上所示、高级表示 ADC ISR、如果我在此 ADC ISR 中的每个周期更新 PWM 寄存器值、并且我使用 PWM 比较影子寄存器、 C 代码就像这样:
中断空 ADCISC (空)
{
…
EPwm1Regs.CMPA.half.CMPA = A1;
EPwm4Regs.CMPA.half.CMPA = A2;
EPwm2Regs.CMPA.half.CMPA = B1; ///<--------------------
EPwm5Regs.CMPA.half.CMPA = B2;
EPwm3Regs.CMPA.half.CMPA = C1;
EPwm6Regs.CMPA.half.CMPA = C2;
(笑声)
}
是否存在这样的可能性: 当 DSP 完成 “EPwm2Regs.CMPA.half.CMPA = B1;”后 ,PWM 将所有影子寄存器的值传输到 PWM 操作寄存器,这会导致“EPwm2Regs.CMPA.half.CMPA”的值成为新周期计算的结果,而“EPwm5Regs.CMPA.CMPA”的值仍是前一半周期计算结果。 如果这两个 PWM 控制同一电桥的上管和下管,是否可以 直接连接上桥和下桥?
正如我说过的、除非您在 ISR 中放入代码以重新启用中断、否则在 C28x 上 ISR 默认不会被中断。 您的意思可能是 ADC ISR 的执行被 enter_critical SECTION ()延迟?
如果希望 ADC ISR 不受 enter_critical section()影响,则可以清除 IER 寄存器中除与 ADC 中断对应的位外的所有位,然后在退出临界区时恢复原始 IER 值,从而禁用更具针对性的中断。 您需要在 ADC ISR 中小心谨慎、不要接触任何需要受临界区保护的内容。 您的想法是这样吗?
对于您的 ePWM 问题、请创建一个单独的线程、以便我们将其分配给我们的 ePWM 专家之一。
惠特尼