Hi everybody,
I'm trying to use DMA to transfer some data from a RAM location placed on a vector in L6 section RAM to another RAM vector still placed in the L6 section RAM. I would like to do it not using any DMA event but by software using the PERINTFRC command.
Basically on pag 807 of the manual I would like to use the red path.
For this reason I initialize the DMA using the following code:
SysCtrlRegs.PCLKCR3.bit.DMAENCLK = 1; // DMA in InitPeripheralClocks()
DmaRegs.DMACTRL.bit.HARDRESET = 1;
__asm(" NOP");
DmaRegs.CH1.MODE.bit.PERINTSEL = 0;
DmaRegs.CH1.MODE.bit.PERINTE = 1;
DmaRegs.CH1.MODE.bit.CHINTE = 0;
DmaRegs.CH1.MODE.bit.ONESHOT = 0;
DmaRegs.CH1.MODE.bit.CONTINUOUS = 1;
DmaRegs.CH1.MODE.bit.DATASIZE = 0;
DmaRegs.CH1.MODE.bit.CHINTMODE = 0;
DmaRegs.CH1.MODE.bit.CHINTE = 0;
// Channel 1, McBSPA transmit
DmaRegs.CH1.BURST_SIZE.all = 0;
DmaRegs.CH1.SRC_BURST_STEP = 0;
DmaRegs.CH1.DST_BURST_STEP = 0;
DmaRegs.CH1.TRANSFER_SIZE = 2;
DmaRegs.CH1.SRC_TRANSFER_STEP = 1;
DmaRegs.CH1.DST_TRANSFER_STEP = 1;
DmaRegs.CH1.SRC_ADDR_SHADOW = (unsigned long int) &gs_FRAMinterface.ucVec2write[0];
DmaRegs.CH1.SRC_BEG_ADDR_SHADOW = (unsigned long int) &gs_FRAMinterface.ucVec2write[0];
DmaRegs.CH1.DST_ADDR_SHADOW = (unsigned long int) &gs_FRAMinterface.u16Vec2read[0];
DmaRegs.CH1.DST_BEG_ADDR_SHADOW = (unsigned long int) &gs_FRAMinterface.u16Vec2read[0];
DmaRegs.CH1.DST_WRAP_SIZE = 0xFFFF;
DmaRegs.CH1.SRC_WRAP_SIZE = 0xFFFF;
DmaRegs.CH1.SRC_WRAP_STEP = 0;
DmaRegs.CH1.DST_WRAP_STEP = 0;
DmaRegs.CH1.CONTROL.bit.PERINTCLR = 1;
DmaRegs.CH1.CONTROL.bit.SYNCERR = 1;
DmaRegs.CH1.CONTROL.bit.ERRCLR = 1;
DmaRegs.CH1.CONTROL.bit.RUN = 1;
After this initialization I use the command
DmaRegs.CH1.CONTROL.bit.PERINTFRC = 1;
to start the transfer, but nothing happen. I'm debugging the DSP using Blackhawk.
Can someone tell-me why this code is not working ?
Thank you.