工具/软件:Code Composer Studio
我正在尝试使用 epwmregs 生成 spwm 波形。
Epwm1中断 似乎没有响应。 我不确定是由于 IQmath 段警告还是中断语法 错误。
PFA 以下代码:
/**
*生成三相50%占空比方波
*
#include "F28x_Project.h"//器件头文件和示例头文件
#define MATH_TYPE 1
#include "IQmathLib.h"
static unsigned int index;
#pragma DATA_SECTION (sine_table、"IQmathTables");
_iq30 sine_table[512];
void initepwm (void);
中断 void epwm1_ISR (void);
void main (void)
{
索引= 0;
InitSysCtrl();
Dint;
InitGpio();
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0=1;
GpioCtrlRegs.GPAGMUX1.bit.GPIO0 = 0;
GpioCtrlRegs.GPAGMUX2.bit.GPIO31 = 0;
GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO31 = 1;
EDIS;
InitPieCtrl();
CpuSysRegs.PCLKCR2.bit.EPWM1 = 1;
InitPieVectTable();
EALLOW;
PieVectTable.EPWM1_INT =&epwm1_ISR;
EDIS;
IER |= M_INT3;
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=0;
EDIS;
EPwm1Regs.ETSEL.bit.INTEN = 1;
EPwm1Regs.ETSEL.bit.INTSEL = 5;
//EPwm1Regs.ETPS.bit.INTCNT = 1;
EPwm1Regs.ETPS.bit.INTPRD = 1;
initepwm();
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
EDIS;
EINT;
ERTM;
while (1);
}
中断空 epwm1_isr()
{
GpioDataRegs.GPATOGGLE.bit.GPIO31 = 1;
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=0;
EDIS;
initepwm();
EALLOW;
CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1;
EDIS;
GpioDataRegs.GPATOGGLE.bit.GPIO31 = 1;
索引+=1;
if (index > 511) index = 0;
//EPwm1Regs.ETFlG.bit.INT = 0;
EPwm1Regs.ETCLR.bit.INT = 1;
PieCtrlRegs.PIEACX.ALL = PIEACK_Group3;
}
空 initepwm()
{
EALLOW;
//------------------------
//| 1 100MHz |对于 TBPRD = 2000、f_SW = 10kHz、
//| TBPRD =- x --- ;| CLKDIV = TB_DIV1且 HSPCLKDIV = TB_DIV1
//| 2 f_SW * CLKDIV * HSPCLKDIV |最大 TBPRD = 65535
//------------------------
EPwm1Regs.TBPRD = 5000;// 25KHz 的定时器周期
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;// CLKDIV = 1
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;// HSPCLKDIV = 1
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//三角载波的对称模式
EPwm1Regs.ETSEL.bit.INTEN = 1;
EPwm1Regs.ETSEL.bit.INTSEL = 5;
//EPwm1Regs.ETPS.bit.INTCNT = 1;
EPwm1Regs.ETPS.bit.INTPRD = 1;
EPwm1Regs.CMPA.bit.CMPA = EPwm1Regs.TBPRD -_IQsat (_IQ30mpy ((sine_table[index]+_IQ30 (0.9999)))/2、EPwm1Regs.TBPRD)、EPwm1Regs.TBPRD、0);
EPwm1Regs.AQCTLA.bit.CAU = 2;
EPwm1Regs.AQCTLA.bit.CAD = 1;
EDIS;
}
请帮助我解决这个问题。
谢谢。