使用芯片DM3730,使用EDMA将一个buffer中的数据(假设只发送6个数据a, b, c, d, e, f, 均为unsigned int类型)通过McBSP的DXR进行发送(McBSP配置为slave模式,CLKX和FSX均由FPGA提供),但是fpga收到的数据却为(f, f, f, f, f, f,),请问各位这是什么原因?谢谢
Chris Meng:
你好,
我建议你示波器测量一下mcbsp输出的信号,看是不是发送数据的时候数据为都是为高(F)
Tinghao Zhang:
回复 Chris Meng:
感谢您的解答,不过可能是我没有表述清楚,mcbsp输出信号为(f, f, f, f, f, f),这里的f是表示某一个32bit数,而不是具体数值0xF。
Chris Meng:
回复 Tinghao Zhang:
你好,
1. 请确认不使用EDMA的时候mcbsp输出正常
2. 使用EDMA输出全0或者全1检查信号,看是否正确发出。
Tinghao Zhang:
回复 Chris Meng:
Chris Meng ,您好
按照您提供的思路
1、已确认不使用EDMA的时候,mcbsp输出正常;
2、我没有完全理解您的意思,您是不是建议使用EDMA分别将数据0x00000000和0x11111111搬移到mcbsp的DXR寄存器进行发送?
这里还有一个问题请教您:将mcbsp寄存器XCR1的XFRLEN1设置为0x0000110(每帧6个word),XCR1的XWDLEN1设置为0x5(每个word 32bit),发送使用的是Single-phase frame。发送(a, b, c, d, e , f)六个数据时,本意是想让mcbsp一个fsx到来时将这六个数据都发送出去,即对端应该收到的数据为abcdef,但实际上对端收到的数据却是aaaaaa.
根据问题的现象,我做了如下测试:
把EDMA搬移的源和目的地址都设置为一个buffer(这样可以方便查看数据搬移情况),在CCS里面将DSP的核暂停,通过手动向mcbsp的DXR寄存器写入一个数值发送,然后查看EDMA搬移的目的buffer,可以发现EDMA进行了一次搬移。这是不是可以说明mcbsp进行一次传输,会触发一次EDMA传输?按照我的理解,mcbsp应该是在这次写入DXR的数据完全发送出去之后才触发EDMA搬移,实际情况是这样么?
如果上面的情况属实,那么这个问题产生的原因是不是可以这样理解:EDMA将a数据写入DXR,但是此时FSX信号没有到来,所以这个数据就不能发送出去,EDMA就不能进行下一次搬移(即将数据b搬移到mcbsp的DXR),等到FSX信号到来时,仍然是a数据驻留在mcbsp的发送buffer中,而设置的帧长度是6*62bit,这时mcbsp就将a数据复制了5次,将aaaaaa发送给了对端,请您指教一下,实际情况是这样么?
谢谢