Dear TI:
本项目I2S2 做Master RX,采集来自digital mic的音频信号,通过DAM传输到memory中,在DSP中对音频信号处理后,I2S0做Master TX,通过DAM传输到I2S0的Transmit Left/Right Data Register
目前碰到的问题是DMA从I2S2 Receive Left/Right Data Register传输到memory的buff拿到的数据全是0,示波器测量I2S2 RX管脚是有波形的;
我的设置如下,请帮忙看看:
/* Configure DMA channel for I2S0 Left write */
#if (defined(CHIP_C5505_C5515) || defined(CHIP_C5504_C5514) || defined (CHIP_C5517) || defined(CHIP_C5535) || defined(CHIP_C5545))
dmaConfig.pingPongMode = CSL_DMA_PING_PONG_DISABLE;
#endif
dmaConfig.autoMode = CSL_DMA_AUTORELOAD_DISABLE;
dmaConfig.burstLen = CSL_DMA_TXBURST_1WORD;
dmaConfig.trigger = CSL_DMA_EVENT_TRIGGER;
dmaConfig.dmaEvt = CSL_DMA_EVT_I2S0_TX;
dmaConfig.dmaInt = CSL_DMA_INTERRUPT_DISABLE;
dmaConfig.chanDir = CSL_DMA_WRITE;
dmaConfig.trfType = CSL_DMA_TRANSFER_IO_MEMORY;
dmaConfig.dataLen = 4;
dmaConfig.srcAddr = (Uint32)i2sDmaWriteLeftBuff;
dmaConfig.destAddr = (Uint32)(0x2808);
dmaLeftTxHandle = CSL_configDmaForI2s(CSL_DMA_CHAN0);
if(dmaLeftTxHandle == NULL)
{
printf("DMA Config for I2S Write Failed!\n!");
return(CSL_TEST_FAILED);
}
I2S_transEnable(hI2s, TRUE);
status = DMA_start(dmaLeftTxHandle);
if(status != CSL_SOK)
{
printf("I2S Dma Write Failed!!\n");
return(result);
}
while(DMA_getStatus(dmaLeftTxHandle));
/* Configure DMA channel for I2S0 Right write */
#if (defined(CHIP_C5505_C5515) || defined(CHIP_C5504_C5514) || defined(CHIP_C5517) || defined(CHIP_C5535) || defined(CHIP_C5545))
dmaConfig.pingPongMode = CSL_DMA_PING_PONG_DISABLE;
#endif
dmaConfig.autoMode = CSL_DMA_AUTORELOAD_DISABLE;
dmaConfig.burstLen = CSL_DMA_TXBURST_1WORD;
dmaConfig.trigger = CSL_DMA_EVENT_TRIGGER;
dmaConfig.dmaEvt = CSL_DMA_EVT_I2S0_TX;
dmaConfig.dmaInt = CSL_DMA_INTERRUPT_DISABLE;
dmaConfig.chanDir = CSL_DMA_WRITE;
dmaConfig.trfType = CSL_DMA_TRANSFER_IO_MEMORY;
dmaConfig.dataLen = 4;
dmaConfig.srcAddr = (Uint32)i2sDmaWriteRightBuff;
dmaConfig.destAddr = (Uint32)(0x280C);
dmaRightTxHandle = CSL_configDmaForI2s(CSL_DMA_CHAN1);
if(dmaRightTxHandle == NULL)
{
printf("DMA Config for I2S Write Failed!\n!");
return(CSL_TEST_FAILED);
}
I2S_transEnable(hI2s, TRUE);
status = DMA_start(dmaRightTxHandle);
if(status != CSL_SOK)
{
printf("I2S Dma Write Failed!!\n");
return(result);
}
while(DMA_getStatus(dmaRightTxHandle));
/* Configure DMA channel for I2S2 Left Read */
#if (defined(CHIP_C5505_C5515) || defined(CHIP_C5504_C5514) || defined(CHIP_C5517) || defined(CHIP_C5535) || defined(CHIP_C5545))
dmaConfig.pingPongMode = CSL_DMA_PING_PONG_DISABLE;
#endif
dmaConfig.autoMode = CSL_DMA_AUTORELOAD_DISABLE;
dmaConfig.burstLen = CSL_DMA_TXBURST_1WORD;
dmaConfig.trigger = CSL_DMA_EVENT_TRIGGER;
dmaConfig.dmaEvt = CSL_DMA_EVT_I2S2_RX;
dmaConfig.dmaInt = CSL_DMA_INTERRUPT_DISABLE;
dmaConfig.chanDir = CSL_DMA_READ;
dmaConfig.trfType = CSL_DMA_TRANSFER_IO_MEMORY;
dmaConfig.dataLen = 4;
dmaConfig.srcAddr = (Uint32)(0x2A28);
dmaConfig.destAddr = (Uint32)i2sDmaWriteLeftBuff;
dmaLeftRxHandle = CSL_configDmaForI2s(CSL_DMA_CHAN4);
if(dmaLeftRxHandle == NULL)
{
printf("DMA Config for I2S Read Failed!\n!");
return(CSL_TEST_FAILED);
}
I2S_transEnable(hI2s2, TRUE);
status = DMA_start(dmaLeftRxHandle);
if(status != CSL_SOK)
{
printf("I2S Dma Read Failed!!\n");
return(result);
}
while(DMA_getStatus(dmaLeftRxHandle));
/* Configure DMA channel for I2S Right Read */
#if (defined(CHIP_C5505_C5515) || defined(CHIP_C5504_C5514) || defined(CHIP_C5517) || defined(CHIP_C5535) || defined(CHIP_C5545))
dmaConfig.pingPongMode = CSL_DMA_PING_PONG_DISABLE;
#endif
dmaConfig.autoMode = CSL_DMA_AUTORELOAD_DISABLE;
dmaConfig.burstLen = CSL_DMA_TXBURST_1WORD;
dmaConfig.trigger = CSL_DMA_EVENT_TRIGGER;
dmaConfig.dmaEvt = CSL_DMA_EVT_I2S2_RX;
dmaConfig.dmaInt = CSL_DMA_INTERRUPT_DISABLE;
dmaConfig.chanDir = CSL_DMA_READ;
dmaConfig.trfType = CSL_DMA_TRANSFER_IO_MEMORY;
dmaConfig.dataLen = 4;
dmaConfig.srcAddr = (Uint32)(0x2A2C);
dmaConfig.destAddr = (Uint32)i2sDmaWriteRightBuff;
dmaRightRxHandle = CSL_configDmaForI2s(CSL_DMA_CHAN5);
if(dmaRightRxHandle == NULL)
{
printf("DMA Config for I2S Read Failed!\n!");
return(CSL_TEST_FAILED);
}
I2S_transEnable(hI2s2, TRUE);
status = DMA_start(dmaRightRxHandle);
if(status != CSL_SOK)
{
printf("I2S Dma Read Failed!!\n");
return(result);
}
while(DMA_getStatus(dmaRightRxHandle));
Thanks!