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.
大家好、我只是遇到了中断例程的问题。 我已经设置了 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。 我们非常感谢您的任何帮助
感谢您的回复、
中断和 SOC 的所有设置都很好、因为在大多数情况下我可以进入中断、我只是在更改 HSPCLKDIV 设置时遇到了问题。 我通过在进入中断时打开其中一个 LED 来检查它、当我设置 HSPCLKDIV = 1时、它不会打开、但当 HSPCLKDIV = 0时它会打开。 这是我在连续运行之间进行的唯一更改。
但是、我忽略了一点、然后继续工作、当我返回尝试重新创建问题时、我无法继续。 因此、我真的不知道发生了什么。 再次感谢您的回复和建议!