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