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.
工具/软件:Code Composer Studio
我正在尝试创建一个脉冲序列。 脉冲序列的跨度为1ms。 单个脉冲的时间周期为100 μ s。 我正在使用 timer0来生成 ePWM1的 CMPA 值。 代码如下所示
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#include "DSP280x_Device.h"
#include "DSP280x_examples.h"
int i=0;
typedef 结构
{
volatile struct ePWM_regs * EPwmRegHandle;
}ePWM_INFO;
void InitEPwm1Examples(void);
_interrupt void CPU_timer0_ISR (void);
void main (void)
{
InitSysCtrl();
InitEPwm1Gpio();
Dint;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.TINT0 =&CPU_timer0_ISR;
EDIS;
InitCpuTimer();
ConfigCpuTimer (&CpuTimer0、100、1000);\\时钟频率1kHz
CpuTimer0Regs.TCR.ALL = 0x4000;
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;
EDIS;
InitEPwm1Examples();
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1;
EDIS;
IER |= M_INT3;
IER |= M_INT1;
PieCtrlRegs.PIEIER1.bit.INTx7=1;
EINT;
ERTM;
for (;;)
{
_asm ("NOP");
}
}
_interrupt void CPU_timer0_ISR (void)
{
如果(i<1)
{
EPwm1Regs.CMPA.half.CMPA = 2110;
}
其他
{
EPwm1Regs.CMPA.half.CMPA = 0;
}
i=i+1;
if (i>19)
{
I=0;
}
PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;
}
空 InitEPwm1Examples()
{
EPwm1Regs.TBPRD = 2500;\\ PWM 频率10kHz
EPwm1Regs.TBPHS.Half.TBPHS = 0x0000;
EPwm1Regs.TBCTR = 0x0000;
EPwm1Regs.CMPA.half.CMPA = 0;
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm1Regs.AQCTLA.bit.CAD = AQ_SET;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
会发生一个特殊情况。 由于我的脉冲序列跨度为1msec、一个脉冲为100usec、因此我在1msec 内总共有10个脉冲。 由于我在这1ms 内具有恒定的 CMPA 值、因此脉宽应该相同、但最后一个脉冲的第10个脉冲具有100%占空比。 我不希望 PWM 中断更改 CMPA 值我有目的地希望计时器中断更改 CMPA 值。 有人可以帮助我解决这个问题吗?