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:不工作50kHz ISR、而工作25kHz ISR 正常吗??????

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/665296/tms320f28069-does-not-work-50-khz-isr-but-25-khz-isr-ok

器件型号:TMS320F28069

您好!

我正在我的项目上使用 SYS/BIOS。 我想使用低通滤波器生成同步正弦波、因此我在 SolarLib 中使用 SPLL。

在我的25kHz ISR 中、即 adcTimerFxn 中、在 ADC EOC 向我的 adcHwiISR 发出信号后、我开始 ADC 会话。 但是、当我将频率增加到 adcTimerFxn 的50kHz 时、adcHwiISR 不起作用。

我将 adcHwiISR 的代码复制到 adcTimerFxn、它可以正常工作、但其他方法不起作用。 我现在该怎么办?

void adcTimerFxn (void)
{

AdcRegs.ADCSOCFRC1.ALL = 0xFFFF;
//AdcRegs.ADCINTFlG.bit.ADCINT1=1;

} 
void adcHwiISR()
{
静态无符号 int 索引= 0;

spll1.ac_input =((float32)(sine_table[索引]/1073741824.0);// SPLL 调用
SPLL_1ph_F_FUNC (&spll1);
temp =(((spll1.sin [1])+1.0)/2)*EPwm1Regs.TBPRD;
EPwm1Regs.CMPA.half.CMPA =EPwm1Regs.TBPRD -_IQsat (temp、EPwm1Regs.TBPRD、0);

如果(index++>511)索引=0;

AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
}

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

    您是否通过读取 ADCINTOVF 寄存器检查了 ADC 中断是否溢出?
    ADCINTFLG 似乎应该更加频繁地被清零。 如果这不会妨碍您的应用程序的其余部分,我认为您应该考虑在 adcTimerFxn()中像在 examples 和 TRM 中的代码那样清除此标志,因此在 ADCSOCFRC 写入之后添加以下代码:
    while (AdcaRegs.ADCINTFlG.bit.ADCINT1 = 0){}
    AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
    另一个选项是增加 adcHwiISR()的频率,以便随着 adcTimerFxn()的频率增加而缩放。

    此致、
    Elizabeth