请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28379D 工具/软件:Code Composer Studio
大多数时候、当我按下 DEBUG 并观察寄存 器时、我注意到、即使我的代码可以显式地将 ePWM 周期设置为5000次计数、寄存器也不会更新、只显示0。 有时、它将是未设置或同时设置的相位。 有时、CMPA 也不会置1。
我的 InitEPwm 代码是否有问题? 我在 main 函数中调用 InitEPwm()和 InitEPwmGpio()。
void InitEPwm2 (void) { EALLOW; //设置 TBCLK EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; //向上计数 EPwm2Regs.TBPRD = PWM5_PERIOD; //与 PWM5的周期相同 EPwm2Regs.TBCTL.bit.PHSEN = 1; //启用相位加载 EPwm2Regs.TBPHS.bit.TBPHS = 500; //相位 EPwm2Regs.TBCTR = 0x0000; //清除计数器 EPwm2Regs.TBCTL.bit.HSPCLKDIV=1; //时钟与 SYSCLKOUT 的比率 EPwm2Regs.TBCTL.bit.CLKDIV = 0; EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; CTR = 0时为//同步输出 //将影子寄存器加载设置为零 EPwm2Regs.CMPCTL.bit.SHDWAMODE = 0; EPwm2Regs.CMPCTL.bit.SHDWBMODE = 0; EPwm2Regs.CMPCTL.bit.LOADAMODE = 0; EPwm2Regs.CMPCTL.bit.LOADBMODE = 0; //设置比较值 EPwm2Regs.CMPA.bit.CMPA = dutyCycle; //设置比较 A 值 //设置操作 EPwm2Regs.AQCTLA.bit.ZRO = AQ_SET; //将 PWM2A 设置为零 EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR; //在事件 A 上清除 PWM2A,向上计数 EDIS; }