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.

[参考译文] TMS320F28379D:期间匹配问题上的 SOCA

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/593448/tms320f28379d-soca-on-period-match-issue

器件型号:TMS320F28379D

大家好、我只是遇到了中断例程的问题。 我已经设置了 ePWM 来触发 ADC 的 SOC、然后在完成后设置中断。

void ConfigureADC (void)
{
EALLOW;

// ADC-A
AdcaRegs.ADCCTL2.bit.prescale = 6;//将 ADCCLK 分频器设置为/4
AdcaRegs.ADCCTL2.bit.resolution = 0;// 12位分辨率
AdcaRegs.ADCCTL2.bit.SIADC1000
= 1;ADCCTL1.bit.ADCCTL1.ADC1/ ADCCTL1.ADC12/ ADCULES.ADCMOS.ADCMPOS/ ADC12/ ADC12/ ADCCTL1.ADC12/ ADCCTL1.ADC12/ ADC12/ ADCCTL1.ADCES.ADC12/ ADCMPOS/ ADC12/ ADD/ ADC12/ ADCES.ADC12/ ADC12/ ADCCTL1.AD


//延迟1ms 以允许 ADC 加电

时间}


void SetupADCepwm (void)
{
//选择要转换的通道并结束转换标志
EALLOW;
AdcaRegs.ADCSO0CTL.bit.CHSEL = 0;// SOC0将转换引脚 A0
AdcocRegs.ADCOC0CTL.bit.ADCSCTRCSEL = 0x14周期;// ADCSCTRCSCTRL = 0x15个周期;ADCSCTRIGB.CL=0x7个周期;
// ADCSCTRCSC0SEL = 0x14个周期 //在 ePWM2 SOCA/C
AdcaRegs.ADCINTSEL1N2.bit.INT1SEL 上触发= 0;// SOC0结束将设置 INT1标志
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;//启用 INT1标志
AdcaRegs.ADCINTFLGCLR.BIT


= 1;确保清除}/ INT1标志 

我还按如下方式配置了 PWM:

空 InitEPwm2 (空)

EALLOW;
//假设 ePWM 时钟已启用
EPwm2Regs.TBCTL.bit.CTRMODE = 3;//冻结计数器
EPwm2Regs.TBCTL.bit.HSPCLKDIV = 1;// TBCLK 预分频器=/2
EPwm2Regs.TBPRD =周期2;//将周期设置为50000计数(2kHz)
EPwm2Regs.ETSEL.bit.SOCAEN = 0;//禁用组上的 SOC
EPwm2Regs.ETSEL.bit.SOCASEL = 2;//在周期匹配时选择 SOCA
EPwm2Regs.ETSEL.bit.SOCAEN = 1;//启用 SOCA
EPwm2Regs.ETPS.bit.SOCAPRD = 1;//在发生第一个事件时生成脉冲
EPwm2Regs.TBCTL.bit.SYNCOSEL = 0;//同步输出
EPwm2Regs.TBCTL.bit.PHSEN = 1;//启用相位加载
EPwm2Regs.TBCTL.bit.PHSDIR = 1;//设置相位方向
EPwm2Regs.TBPHS.bit.TBPHS = 0x0000;//相位为0

EDIS;

因此、我的问题是当  EPwm2Regs.TBCTL.bit.HSPCLKDIV = 0 时、代码将进入我的中断服务例程、当它= 1时、代码将不会进入 ISR。  我们非常感谢您的任何帮助  

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

    我认为调试的第一步是确定为什么不进入 ISR。 您可以在代码运行时(启用实时模式)检查表达式窗口、以便可能对源代码进行故障排除:
    - ePMW 寄存器是否与配置的相同? 具体而言、计数器模式、周期和事件触发器设置的值是多少?
    -->您是否看到 ePWM 时基寄存器发生变化?
    - ADC 寄存器是否与配置的相同? 具体而言、SOC0 TRIGMSEL 的值是什么以及中断选择和启用设置是什么?
    -->您看到 ADC 结果寄存器发生变化了吗? 是否设置了 ADC INT 标志?
    -ePIE 配置是否与配置的配置相同? 是否启用了中断? 是否启用了 ADCA 中断? 中断矢量是否正确?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复、  

    中断和 SOC 的所有设置都很好、因为在大多数情况下我可以进入中断、我只是在更改 HSPCLKDIV 设置时遇到了问题。 我通过在进入中断时打开其中一个 LED 来检查它、当我设置 HSPCLKDIV = 1时、它不会打开、但当 HSPCLKDIV = 0时它会打开。 这是我在连续运行之间进行的唯一更改。  

    但是、我忽略了一点、然后继续工作、当我返回尝试重新创建问题时、我无法继续。 因此、我真的不知道发生了什么。 再次感谢您的回复和建议!

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

    很高兴听到您能够让您的计划正常工作!