我们通过omapl138内的mcbsp模块来接收AK2401的AD转换后的数据时,发现偶尔有丢数据的情况。现在AK2401做主,138做从。clk以及fs均是从AK2401输入到138内,频率分别是4.608Mhz左右以及72kHz。AK2401的时钟,数据输出时序如下图:
现在配置的mcbsp大致情况是:
single phase,2 words,receive word length is 32bit,no delay,
clk以及fs都是选的从pin脚输入的时钟源,也就是2401给到138的,并且用示波器测量后频率都是对的(fs = 72kHz, fclk = 4.608MHz)。
现象是我们抓出这I,Q的数据并画出图形,发现有时候I,Q会互换,感觉像是丢了一个I或者Q,导致I,Q错位了,请问你们知道出现这种现象的原因以及有什么解决办法吗?
Shine:
接收时发生丢数据,可能是来不及接收数据,打开fifo+edma看能否解决,例程如下。
e2echina.ti.com/…/344301
user4755476:
回复 Shine:
你好,我昨天试了一下fifo+dma,dma的中断出不来了,可是我已经在配置mcbsp之前就把fifo的配置写进去了,除此之外还有什么需要注意的吗?目前我的fifo配置是:RFIFOCTL = (16<<8)|1,RFIFOCTL|= (1<<16),dma每次读取的数据长度是1440byte,这个长度和fifo里触发dma_event的数据长度是要有什么对应关系吗?
user4755476:
回复 Shine:
你好,我昨天试了一下fifo+dma,dma的中断出不来了,可是我已经在配置mcbsp之前就把fifo的配置写进去了,除此之外还有什么需要注意的吗?目前我的fifo配置是:RFIFOCTL = (16<<8)|1,RFIFOCTL|= (1<<16),dma每次读取的数据长度是1440byte,这个长度和fifo里触发dma_event的数据长度是要有什么对应关系吗?
user4755476:
回复 Shine:
再问一下,dma的A_CNT长度一定要和RFIFOCTL中的RNUMEVT相等吗?
user4755476:
回复 Shine:
现在dma+fifo的模式已经配置可以了,但是还是有丢数据的现象,怎么能验证fifo模式生效了呢?
user4755476:
回复 Shine:
现在dma+fifo的模式已经配置可以了,但是还是有丢数据的现象,怎么能验证fifo模式生效了呢?
user4755476:
回复 Shine:
你好,那个问题我已经找到原因了,是我时钟的有效沿配置错了,本来是上升沿,我配置成了下降沿,还是很谢谢你的建议
user4755476:
回复 Shine:
我现在还有一个问题想问问你,因为上次配置错了mcbsp的时钟有效沿,所以关于mcasp的时钟有效沿的配置想跟你确认一下,我现在用mcasp传输数据,时序要求如下:
上图中可以看出时钟是上升沿有效,那ACLKXCTL的CLKXP=1对吗?
还有,如果我只需要传LRCK为低时的那16bit数据,为高的时候不传,那XFMT的XSSZ和XROT应该是多少啊?一直不太理解XROT的意义是什么
Tony Tang:
回复 user4755476:
Wayne Lee上图中可以看出时钟是上升沿有效,那ACLKXCTL的CLKXP=1对吗?
到底是做接收还是发送?按上图时序来看,发送端配置为下降沿,接收端配置成上升沿。
Wayne Lee如果我只需要传LRCK为低时的那16bit数据,为高的时候不传,
为什么会有这样的要求,到底是左右两个时隙,还是只有一个时隙?
Wayne Lee那XFMT的XSSZ和XROT应该是多少啊?一直不太理解XROT的意义是什么
XSSZ就是指的一个时隙是多少个时钟或者数据位。XROT你没有需要就不用管,无非就是数据先右移多少位再发送。