This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CCS/TMS320F280049C: TMS320F280049C DMA can not move data from SPI to RAM

Part Number: TMS320F280049C
Other Parts Discussed in Thread: C2000WARE

Tool/software: Code Composer Studio

Hi,my project is work on CCS10, I import the example project "spi_ex2_dma_loopback",my F280049 board can run this project correctly.

I want make some datas from SPIB to SPIA by using DMA  base on this example project ,so i shut down loopback mode, add GPIOs configuration and changed some place,but DMA can not move datas from SPIRXBUF to RAM,my code below here:

#define BURST (FIFO_LVL - 1)              // burst size should be less than 8
#define TRANSFER 15             // [(MEM_BUFFER_SIZE/FIFO_LVL)-1]
#define FIFO_LVL 8               // FIFO Interrupt Level

#pragma DATA_SECTION(sdata, "ramgs0"); // map the TX data to memory

#pragma DATA_SECTION(rdata, "ramgs1"); // map the RX data to memory

uint16_t sdata[128]; // Send data buffer
uint16_t rdata[128]; // Receive data buffer

DMAInitialize();

DMASource = (volatile uint16_t *)sdata;
DMADest = (volatile uint16_t *)rdata;

//
// configure DMACH5 for TX
//
DMACH5AddrConfig(&SpibRegs.SPITXBUF,DMASource);

DMACH5BurstConfig(BURST,1,0); // Burst size, src step, dest step

DMACH5TransferConfig(TRANSFER,1,0); // transfer size, src step, dest step

DMACH5ModeConfig(DMA_SPIBTX,PERINT_ENABLE,ONESHOT_DISABLE,CONT_DISABLE,SYNC_DISABLE,SYNC_SRC,OVRFLOW_DISABLE,SIXTEEN_BIT,CHINT_END,CHINT_ENABLE);

//
// configure DMA CH2 for RX
//
DMACH6AddrConfig(DMADest,&SpiaRegs.SPIRXBUF);

DMACH6BurstConfig(BURST,0,1);

DMACH6TransferConfig(TRANSFER,0,1);

DMACH6ModeConfig(DMA_SPIARX,PERINT_ENABLE,ONESHOT_DISABLE,CONT_DISABLE,SYNC_DISABLE,SYNC_SRC,OVRFLOW_DISABLE,SIXTEEN_BIT,CHINT_END,CHINT_ENABLE);

SpiaRegs.SPIFFRX.all=0x2040; // RX FIFO enabled, clear FIFO int

SpiaRegs.SPIFFRX.bit.RXFFIL = FIFO_LVL; // Set RX FIFO level

SpibRegs.SPIFFTX.all=0xE040; // FIFOs enabled, TX FIFO released,

SpibRegs.SPIFFTX.bit.TXFFIL = FIFO_LVL; // Set TX FIFO level

GpioCtrlRegs.GPAPUD.bit.GPIO8 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO9 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO10 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0;
GpioCtrlRegs.GPAQSEL1.bit.GPIO8 = 3;
GpioCtrlRegs.GPAQSEL1.bit.GPIO9 = 3;
GpioCtrlRegs.GPAQSEL1.bit.GPIO10 = 3;
GpioCtrlRegs.GPAQSEL1.bit.GPIO11 = 3;
GpioCtrlRegs.GPAGMUX1.bit.GPIO8 = 1; // SPISIMOA
GpioCtrlRegs.GPAGMUX1.bit.GPIO9 = 1; // SPICLKA
GpioCtrlRegs.GPAGMUX1.bit.GPIO10 = 1; // SPISOMIA
GpioCtrlRegs.GPAGMUX1.bit.GPIO11 = 1; // SPISTEA
GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 3; // SPISIMOA
GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 3; // SPICLKA
GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 3; // SPISOMIA
GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 3; // SPISTEA

GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO27 = 0;
GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 3;
GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 3;
GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 3;
GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 3;
GpioCtrlRegs.GPAGMUX2.bit.GPIO24 = 1; // SPISIMOB
GpioCtrlRegs.GPAGMUX2.bit.GPIO25 = 1; // SPIS0MIB
GpioCtrlRegs.GPAGMUX2.bit.GPIO26 = 1; // SPICLKB
GpioCtrlRegs.GPAGMUX2.bit.GPIO27 = 1; // SPISTEB
GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 2; // SPISIMOB
GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 2; // SPIS0MIB
GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 2; // SPICLKB
GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 2; // SPISTEB

SpibRegs.SPICCR.bit.SPISWRESET = 0;

SpibRegs.SPICCR.bit.CLKPOLARITY = 0;

SpibRegs.SPICCR.bit.SPICHAR = (16-1);

SpibRegs.SPICTL.bit.MASTER_SLAVE = 1;

SpibRegs.SPICTL.bit.TALK = 1;

SpibRegs.SPICTL.bit.CLK_PHASE = 0;

SpibRegs.SPICTL.bit.SPIINTENA = 0;

SpibRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR;

SpibRegs.SPIPRI.bit.FREE = 1;

SpibRegs.SPICCR.bit.SPISWRESET = 1;

SpiaRegs.SPICCR.bit.SPISWRESET = 0;

SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;

SpiaRegs.SPICCR.bit.SPICHAR = (16-1);

SpiaRegs.SPICTL.bit.MASTER_SLAVE = 0;

SpiaRegs.SPICTL.bit.TALK = 1;

SpiaRegs.SPICTL.bit.CLK_PHASE = 0;

SpiaRegs.SPICTL.bit.SPIINTENA = 0;

SpiaRegs.SPIPRI.bit.FREE = 1;

SpiaRegs.SPICCR.bit.SPISWRESET = 1;

for(i=0; i<128; i++)
{
sdata[i] = i;
rdata[i]= 0;
}

PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
PieCtrlRegs.PIEIER7.bit.INTx5 = 1; // Enable PIE Group 7, INT 1 (DMA CH1)
PieCtrlRegs.PIEIER7.bit.INTx6 = 1; // Enable PIE Group 7, INT 2 (DMA CH2)
IER= M_INT7; // Enable CPU INT6
EINT; // Enable Global Interrupts

StartDMACH6(); // Start SPI RX DMA channel
StartDMACH5(); // Start SPI TX DMA channel

I connected GPIO8 TO GPIO24 ,  GPIO9 TO GPIO26 , GPIO10 TO GPIO25 , GPIO11 TO GPIO27,then run this new project,

I found the DMA can move sdata[] to SPIBTXBUF,and SPIARXBUF had correct data,but DMA can not move data from SPIARXBUF to rdata[].

Suspend and DEBUG , I found the RUNSTS bit of CH6 CONTROL is 1.

So DMA CH6 is run ,but can nor work?

Please help me to solve the problem,thanks!