Other Parts Discussed in Thread: C2000WARE
Hi I am trying to get DMA working , first I am trying to transfer from one array to another. I can see SRC_ADDR_ACTIVE and DST_ADDR_ACTIVE are incremented but I do not see the values changed.
Can anyone help me if anything is wrong in the below code
Below is the code
Init:
===================
DMASource = (volatile Uint16 *)dutyCyclePercentSine;
DMADest = (volatile Uint16 *)result;
EALLOW;
DmaRegs.DMACTRL.bit.HARDRESET = 1;
__asm(" NOP");
DmaRegs.DEBUGCTRL.bit.FREE = 1;
DmaRegs.CH1.SRC_ADDR_SHADOW = (Uint32)DMASource;
DmaRegs.CH1.SRC_BEG_ADDR_SHADOW = (Uint32)DMASource;
DmaRegs.CH1.DST_ADDR_SHADOW = (Uint32)DMADest;
DmaRegs.CH1.DST_BEG_ADDR_SHADOW = (Uint32)DMADest;
// Channel 1
DmaRegs.CH1.BURST_SIZE.all = 0;
DmaRegs.CH1.SRC_BURST_STEP = 1;
DmaRegs.CH1.DST_BURST_STEP = 1;
DmaRegs.CH1.TRANSFER_SIZE = 9;
DmaRegs.CH1.SRC_TRANSFER_STEP = 1;
DmaRegs.CH1.DST_TRANSFER_STEP = 1;
DmaClaSrcSelRegs.DMACHSRCSEL1.bit.CH1 = 0;
DmaRegs.CH1.MODE.bit.PERINTSEL = 1;
DmaRegs.CH1.MODE.bit.PERINTE = 1;
DmaRegs.CH1.MODE.bit.CHINTE = 0;
DmaRegs.CH1.MODE.bit.ONESHOT = 0;
DmaRegs.CH1.MODE.bit.CONTINUOUS = 0;
DmaRegs.CH1.MODE.bit.DATASIZE = 0;
DmaRegs.CH1.MODE.bit.CHINTMODE = 0;
DmaRegs.CH1.MODE.bit.CHINTE = 0;
CpuSysRegs.SECMSEL.bit.PF2SEL = 1;
CpuSysRegs.SECMSEL.bit.PF1SEL = 1;
DmaRegs.CH1.CONTROL.bit.RUN = 1;
EDIS;
========================
in main.c I do
int count = 0;
while(1)
{
count++;
if(count == 0xFFFF)
{
EALLOW;
DmaRegs.CH1.CONTROL.bit.PERINTFRC = 1;
// EPwm1Regs.CMPA.bit.CMPA = 1500;
EDIS;
count = 0;
// RunSPWM();
}
}