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.

How to set up EDMA3 with BFIFO

Other Parts Discussed in Thread: OMAP-L138

Hi,

I am working on to set up OMAP-L138 MCBSP1 to working with a telecom codec, that codec working on 2.048MHZ PCM clock, 8KHZ SYNC, each channel is 8 bits, totoal 32 channels for one frame. i want to set EDMA3 and BFIFO to working as following requires

1. continue to send and receive pcm

2. PING-PONG buffer serviced

3. SYNCDIM is AB type

4. when received in 8 frames(that is 8*(32 * 8bits)) and the EDMA report a interrupt and send to other program to process

here is my Edma3ccParam Setting

---------------------

#define MCBSP_PARAM_OPT PARAM_OPT_DEFAULT | TCINTEN_ENABLE | STATIC_NO | FWID_8BIT 

#define NUM_ELEMENTS_PER_DMA_EVENT 32 //BCNT
#define MCBSP_ELEMENT_BYTES 1 //ACNT

#define BUFFER_SIZE 256 

#define SAMPLES_SIZE 8 

uint8_t mcbsp1_tx_ping[BUFFER_SIZE], mcbsp1_tx_pong[BUFFER_SIZE];
uint8_t mcbsp1_rx_ping[BUFFER_SIZE], mcbsp1_rx_pong[BUFFER_SIZE];

CSL_Edma3ccParamSetRegs PaRAMSetMCBSP1RxPing = {
(MCBSP_PARAM_OPT | TCC_4 | SYNCDIM_AB),
(Uint32)0x01F11000, // McBSP1 FIFO Data
(NUM_ELEMENTS_PER_DMA_EVENT<<16 | MCBSP_ELEMENT_BYTES),
(Uint32)mcbsp1_rx_ping, // Ping Buffer
(MCBSP_ELEMENT_BYTES<<16 | 0), // DSTBIDX=MCBSP_ELEMENT_BYTES, SRCBIDX=0
(MCASP_PARAM_BCNTRLD | PaRAM_ENTRY_119_OFFSET), //Link to Rx Pong Parameter Set
((NUM_ELEMENTS_PER_DMA_EVENT*MCBSP_ELEMENT_BYTES)<<16 | 0),
(SAMPLES_SIZE)
};

//McBSP1 Rx Pong PaRAM Set
CSL_Edma3ccParamSetRegs PaRAMSetMCBSP1RxPong = {
(MCBSP_PARAM_OPT | TCC_12 | SYNCDIM_AB),
(Uint32)0x01F11000, // McBSP1 FIFO Data
(NUM_ELEMENTS_PER_DMA_EVENT<<16 | MCBSP_ELEMENT_BYTES),
(Uint32)mcbsp1_rx_pong, // Ping Buffer
(MCBSP_ELEMENT_BYTES<<16 | 0), // DSTBIDX=MCBSP_ELEMENT_BYTES, SRCBIDX=0
(MCASP_PARAM_BCNTRLD | PaRAM_ENTRY_118_OFFSET), //Link to Rx Ping Parameter Set
((NUM_ELEMENTS_PER_DMA_EVENT*MCBSP_ELEMENT_BYTES)<<16 | 0), // DSTCIDX=ACNT*BCNT, SRCCIDX=0
(SAMPLES_SIZE)
};

//McBSP1 Tx Ping PaRAM Set
CSL_Edma3ccParamSetRegs PaRAMSetMCBSP1TxPing = {
(MCBSP_PARAM_OPT  | TCC_5 | SYNCDIM_AB), 
(Uint32)mcbsp1_tx_ping, //Ping Buffer
(NUM_ELEMENTS_PER_DMA_EVENT<<16 | MCBSP_ELEMENT_BYTES),
(Uint32)0x01F11000, // McBSP1 FIFO Data
(0<<16 | MCBSP_ELEMENT_BYTES), // DSTBIDX=0, SRCBIDX=MCBSP_ELEMENT_BYTES
(MCASP_PARAM_BCNTRLD | PaRAM_ENTRY_121_OFFSET), //Link to Tx Pong Parameter Set
(0<<16 | NUM_ELEMENTS_PER_DMA_EVENT*MCBSP_ELEMENT_BYTES), // DSTCIDX=0, SRCCIDX=ACNT*BCNT
(SAMPLES_SIZE)
};

//McBSP1 Tx Pong PaRAM Set
CSL_Edma3ccParamSetRegs PaRAMSetMCBSP1TxPong = {
(MCBSP_PARAM_OPT  | TCC_13 | SYNCDIM_AB), 
(Uint32)mcbsp1_tx_pong, //Ping Buffer
(NUM_ELEMENTS_PER_DMA_EVENT<<16 | MCBSP_ELEMENT_BYTES),
(Uint32)0x01F11000, // McBSP1 FIFO Data
(0<<16 | MCBSP_ELEMENT_BYTES), // DSTBIDX=0, SRCBIDX=MCBSP_ELEMENT_BYTES
(MCASP_PARAM_BCNTRLD | PaRAM_ENTRY_120_OFFSET), //Link to Tx Ping Parameter Set
(0<<16 | NUM_ELEMENTS_PER_DMA_EVENT*MCBSP_ELEMENT_BYTES), // DSTCIDX=0, SRCCIDX=ACNT*BCNT
(SAMPLES_SIZE)
};

 ---------------------------------------------

BFIFO define as following

----------------------------------------------

CSL_FINST(hMcbspFifo->WFIFOCTL, BFIFO_WFIFOCTL_WNUMDMA, 1WORDS);
CSL_FINS(hMcbspFifo->WFIFOCTL, BFIFO_WFIFOCTL_WNUMEVT,
NUM_ELEMENTS_PER_DMA_EVENT);
CSL_FINST(hMcbspFifo->WFIFOCTL, BFIFO_WFIFOCTL_WENA, ENABLED);

CSL_FINST(hMcbspFifo->RFIFOCTL, BFIFO_RFIFOCTL_RNUMDMA, 1WORDS);
CSL_FINS(hMcbspFifo->RFIFOCTL, BFIFO_RFIFOCTL_RNUMEVT,
NUM_ELEMENTS_PER_DMA_EVENT);
CSL_FINST(hMcbspFifo->RFIFOCTL, BFIFO_RFIFOCTL_RENA, ENABLED);

while (CSL_FEXT(hMcbspFifo->WFIFOSTS, BFIFO_WFIFOSTS_WLVL) == 0)
;

DELAY_MICROSEC(5);

CSL_FINST(hMcbsp->SPCR, MCBSP_SPCR_XRST, ENABLE);

-----------------------------

and the WFIFO - RFIFO status is (printf("WFIFOSTS-RFIFOSTS  %x-%x\n", hMcbsp1Fifo->WFIFOSTS, hMcbsp1Fifo->RFIFOSTS);)

[C674X_0] Enter mcbsp1
[C674X_0] WFIFOSTS-RFIFOSTS 40-0
[C674X_0] WFIFOSTS-RFIFOSTS 3f-0
[C674X_0] WFIFOSTS-RFIFOSTS 3f-1
[C674X_0] WFIFOSTS-RFIFOSTS 3f-1
[C674X_0] WFIFOSTS-RFIFOSTS 3f-1
[C674X_0] WFIFOSTS-RFIFOSTS 3f-1
[C674X_0] WFIFOSTS-RFIFOSTS 3f-1
[C674X_0] WFIFOSTS-RFIFOSTS 3f-1
[C674X_0] WFIFOSTS-RFIFOSTS 3f-1
[C674X_0] WFIFOSTS-RFIFOSTS 3f-1

------------------------------------------

but i can not get any output from DX port, please help to figure out where is wrong of setting. btw, the SYNC and PCM CLOCK is working as expected.

Thank you