Part Number: TMS320F28379D
Tool/software: Code Composer Studio
I'm trying to setup a DMA transfer of four 32-bit words, one word per burst, from RAMGS0 table to ePWM1 CMPA all.
#define NN 4
Uint32 ATable[NN]={327680L,655360L,983040L,655360L}; // mid wide mid narrow
But the HRPWM output repeats each one like 327680L,327680L, 655360L,655360L, 983040L,983040L, 655360L,655360L.
So I get 8 : // mid mid wide wide mid mid narrow narrow
instead of 4 like I want.
void HRPWM_Config(PwmRegs *regs, int period) {
(*regs).TBPRD = period; // PWM frequency = 1 / period
(*regs).ETSEL.bit.SOCASEL=1; //
(*regs).ETPS.bit.SOCAPRD=1; // on first event
(*regs).ETSEL.bit.SOCAEN=1; // enable
(*regs).ETSEL.bit.SOCBSEL=1; //
(*regs).ETPS.bit.SOCBPRD=1; // on first event
(*regs).ETSEL.bit.SOCBEN=1; // enable
(*regs).TBCTL.bit.CTRMODE = TB_COUNT_UP;
(*regs).TBCTL.bit.HSPCLKDIV = TB_DIV1;
(*regs).TBCTL.bit.CLKDIV = TB_DIV1;
(*regs).TBCTL.bit.FREE_SOFT = 11;
(*regs).CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; //
(*regs).CMPCTL.bit.SHDWAMODE = CC_SHADOW;
(*regs).CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; //
(*regs).CMPCTL.bit.SHDWBMODE = CC_SHADOW;
(*regs).AQCTLB.bit.ZRO = AQ_SET; // go hi at zero,
(*regs).AQCTLB.bit.CAU = AQ_CLEAR; // go lo at CMPA
(*regs).AQCTLA.bit.ZRO = AQ_SET;
(*regs).AQCTLA.bit.CAU = AQ_CLEAR;
(*regs).HRCNFG.all = 0x0;
(*regs).HRCNFG.bit.EDGMODE = HR_FEP;
(*regs).HRCNFG.bit.CTLMODE = HR_CMP;
(*regs).HRCNFG.bit.HRLOAD = HR_CTR_ZERO;
(*regs).HRCNFG.bit.EDGMODEB = HR_REP;
(*regs).HRCNFG.bit.CTLMODEB = HR_CMP;
(*regs).HRCNFG.bit.HRLOADB = HR_CTR_ZERO;
(*regs).HRCNFG.bit.AUTOCONV = 0;
(*regs).HRPCTL.bit.HRPE=0;
(*regs).TBCTL.bit.SWFSYNC=1;
}
void dma_init() {
EALLOW;
PieVectTable.DMA_CH4_INT= &local_D_INTCH4_ISR;
EDIS;
DMAInitialize();
DMACH4AddrConfig32bit(&EPwm1Regs.CMPA.all,ATable);
DMACH4BurstConfig(1,0,0); // burst size, src step, dest step
DMACH4TransferConfig((2*NN-1),1,0); // transfer size, src step, dest step
DMACH4WrapConfig(0xFFFF,0,0xFFFF,0); // src size, step, dest size, step
DMACH4ModeConfig(DMA_EPWM1A,PERINT_ENABLE,ONESHOT_DISABLE,CONT_ENABLE,
SYNC_ENABLE,SYNC_SRC,OVRFLOW_DISABLE,THIRTYTWO_BIT,
CHINT_BEGIN,CHINT_ENABLE);
EALLOW;
CpuSysRegs.SECMSEL.bit.PF1SEL = 1;
EDIS;
}