Part Number:TMS320F28379D
Tool/software: Code Composer Studio
I am trying to produce spwm waveform using epwmregs.
Epwm1interrupt doesn't seem to be responding . I am not sure whether it is due to the IQmath section warning or the interrupts syntax is wrong.
PFA the code below:
/**
* Generating 3 phase 50% duty cycle square wave
*/
#include "F28x_Project.h" // Device Header File and Examples Include File
#define MATH_TYPE 1
#include "IQmathLib.h"
static unsigned int index;
#pragma DATA_SECTION(sine_table, "IQmathTables");
_iq30 sine_table[512];
void initepwm(void);
interrupt void epwm1_isr(void);
void main(void)
{
index = 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);
}
interrupt void 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;
index +=1;
if( index > 511) index = 0;
//EPwm1Regs.ETFLG.bit.INT = 0;
EPwm1Regs.ETCLR.bit.INT = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}
void initepwm()
{
EALLOW;
// ---------------------------------------------
// | 1 100 MHz | f_sw = 10 kHz for TBPRD = 2000,
// | TBPRD = - x ------------------------- ; | CLKDIV = TB_DIV1 and HSPCLKDIV = TB_DIV1
// | 2 f_sw * CLKDIV * HSPCLKDIV | Max TBPRD = 65535
// ---------------------------------------------
EPwm1Regs.TBPRD = 5000; // timer period for 25KHz
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; // CLKDIV = 1
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // HSPCLKDIV = 1
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Symmetrical mode for triangular carrier
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;
}
Please help me overcome this problem.
Thankyou.