Dear friends:
1, 我现在用6748做开发,用TI默认的startwarer的MCASP的例程,可以正常跑起来
2,但是我们需要用两个AXRn data line 作为输入, AXR0和AXR1. 因此我做了最小的修改,只是增加AXRn的配置,同时也修改platform.lib中关于mcasp的配置:
// 设置串行器,设置12通道接收
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 0);
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 2);
// 初始化 McASP 引脚,和引脚输入输出方向
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
| MCASP_PIN_ACLKX
| MCASP_PIN_AXR(2)
| MCASP_PIN_AXR(0));
这样修改完以后,EDMA的RX通路就不工作了,没有McASPRxDMAComplHandler()接受中断上来。因此我的问题就是还需要配置什么吗?
3,我看了MCASP的文档: Table 23-8:
虽然使能了多个AXR,但是MCASP是自动去读每个AXR data line上的数据的,因此EDMA的配置不需要做修改(不知道我这样理解是否正确)。
这个问题对于我们十分着急,希望能尽快得到您的答复。
Thanks.
Shine:
用一个EDMA事件就可以了,一次EDMA的触发就要将所有通道数据搬完,有几个通道就搬几个,ACNT需要改成element_size*channel,处理需要算法自己将数据分开处理。
chenyu zhang2:
回复 Shine:
hi Shine:
感谢你的答复,那么我现在改成4个输入AXR data line,word size和slot size都是32bit,stereo,那么ACNT要填多少呢?我现在发现如果ACNT=16还是没有EDMA的中断,但是如果改成ACNT=32,就有EDMA的中断了。请问这是为什么?还有如果ACNT=32的话,我的数据会是正确的吗?
Thanks.
Shine:
回复 chenyu zhang2:
请问每条线上几个slot?
chenyu zhang2:
回复 Shine:
每条线上2个slot
Shine:
回复 chenyu zhang2:
2个slot的话,ACNT=4x2x4=32。