TMS320C6748的demo
AUDIO_MIC_IN ——Mic In 音频输入( (EMDA 方式)中讲了一路音频传输过来然后通过EDMA3传输,输入直接copy到输出。
现在我需要传输4路音频,该怎么设置MCASP,类似SOC_MCASP_0_DATA_REGS的地址
Tony Tang:
在多路时,一个事件触发DMA一次搬运多个数据。简单来说,ACNT为channel数*4 (因为McASP的数据只能按32-bit访问)
user5324036:
回复 Tony Tang:
你好,我这几天又查看了相关资料,渐渐看懂了些,
就是说如果传输4路音频(8个声道)就需要配置4个接收串行器,4个发送串行器。每个串行器用I2S方式传输左右声道。
现在还有三个小疑问:1.看到一些程序中把I2S_SLOTS设置成3了,这是什么原因,按理说应该是2(左右2个声道)。2.EDMA这块只需要改一下ACNT么,因为我要对每一路音频做处理,怎么把这4路分开处理,相互之间不影响。
3.有时候只传输1路音频,有时候有2,3路,这样的话传输会不会受影响,会不会导致音频传输错乱或者混合了。
Tony Tang:
回复 user5324036:
user5324036就是说如果传输4路音频(8个声道)就需要配置4个接收串行器,4个发送串行器。每个串行器用I2S方式传输左右声道。
是的。
user53240361.看到一些程序中把I2S_SLOTS设置成3了,这是什么原因,按理说应该是2(左右2个声道)。
是2.
user53240362.EDMA这块只需要改一下ACNT么,因为我要对每一路音频做处理,怎么把这4路分开处理,相互之间不影响。
要在后续的处理中,软件来将它分开。
user5324036 3.有时候只传输1路音频,有时候有2,3路,这样的话传输会不会受影响,会不会导致音频传输错乱或者混合了。
只要软件在配EDMA时相应的配置就好了。处理软件也做相应处理。
user5324036:
回复 Tony Tang:
恩恩,明白了。
另外,不管是TDM格式还是I2S格式都要把ACNT改为channel数*4么?什么情况下改BCNT?
麻烦指点指点~
Tony Tang:
回复 user5324036:
B_CNT取决于你希望取多长数为一帧进行处理。在B减为0后,才会产生EDMA完成中断。它跟能不能正确收发多通道数据无关了。
user5324036:
回复 Tony Tang:
好的,好像明白了。那这样看来这四路音频的左声道是不是就连在一起ABCDABCD…..存放在一块,右声道也同样。
Trolong_support:
回复 user5324036:
您好,像前面讨论过的,确实是需要,根据硬件配置,再确认代码中,使用的是否为,对应的串行器,例如创龙的开发板,使用的串行器11和12,也是在代码中,有对应关系的,如果您需要多路音频,也是参考配置即可,请您参考。
Tony Tang:
回复 user5324036:
是的,顺序是:左ABCD右ABCD左ABCD右ABCD….
当用到FIFO时,可以考虑一下B,并用AB同步方式,以提高带宽。
user5324036:
回复 Tony Tang:
唐工,
用4个串行器配置成I2S模式,传输4路立体声。
按照EDMA的传输方式只是把这4路音频的左右声道分开了,左声道在一起按顺序ABCDABCD排列,右声道也是按顺序abcdabcd..排列。
但是我需要的是把这几个都要细分开,设置8个缓冲区,例如:AAAAAAA的在一起,aaaaaa的在一起。
EDMA能实现这样的划分吗?怎么设置
Tony Tang:
回复 user5324036:
#1. 直接实现不了,因为多路串行器时,一个event必需把所有串行器的数据读出来,所以ACnt是4x串行器数,那么这几个数必然是连续的,没办法用BIdx来排序。
#2. 可以尝试用Chain的方式来做,会有点复杂。大体上的思路是:在一帧EDMA完成后用Chain的方式触发新的EDMA parameter传输,而这个新的EDMA parameter配置为ITCCHEN,TCC配置为自己,即自己Chain自己,通过BIdx来将数据分开。