大家好,
目前,在使用EDMA传输的时候遇到个奇怪的问题,问题描述如下:
1、采用Link方式发送数据包,使能传输完成中断。在每次完成中断中在进行触发下一包数据的传输。
2、当发送数据包为46个之内时,程序运转正常,发送数据包增加一个或者是多触发一次edma传输 时,程序运行就会出现规律的延迟。
3、增大和减小发送数据包的大小并不会对程序有任何影响。
这个不符合我对EDMA的认知啊,望各位大侠指点!!!!!!
注:因为实际使用时是一个连续的音频流,所以稍有一点时间的延迟都会对音频听觉效果产生影响。
Tony Tang:
#1. 怎么在中断中触发?Link不是自动的么?应该由音频接口的事件来触发啊。
#2. 程序延时是什么意思?还是听到的声音有延时?
#3. 整个数据流是什么样的?
join join:
回复 Tony Tang:
1、linK传输完成后,进入中断,在中断中继续触发发送。采用A同步传输,源地址更新,传输数据,音频接口事件触发每次传输。在中断中触发的是下一个包的数据发送。
2、就是说输出音频文件能够听到规律的噪音,由延时造成。
3、数据流就是一个包一个包传输,一次传输只传输一包数据。
问题就是在多发一个包就会造成音频输出的噪音,改变包的大小对音频没有影响。
这到底是怎么回事?
望多多指教,谢谢
Tony Tang:
回复 join join:
那么在中断中更新EDMA参数时,此时是没有正确数据给音频口的,这时音频输出什么呢?
不明白你说的在中断中触发下一个包的数据发送是什么意思。EDMA的触发应该是I2S口事件自动触发的。
join join:
回复 Tony Tang:
中断中更新EDMA参数时,此时音频口无数据输出。
edma的触发是由mcasp产生事件触发的,当我将数据传输完成后,在中断中触发的是下一包数据的触发。
Tony Tang:
回复 join join:
join joinedma的触发是由mcasp产生事件触发的,当我将数据传输完成后,在中断中触发的是下一包数据的触发
这句话是否有点矛盾呢?到底是事件触发,还是在中断中鉵发,你说的的在中断中鉵发是指软件触发,还是说配置EDMA参数?
join join:
回复 Tony Tang:
事件触发啊,并不矛盾,我在中断中主要还是从新配置了一些EDMA的参数。
Tony Tang:
回复 join join:
Link模式用Ping-Pong buffer应该不用动态更新参数表的。在中断里应该是通知应用去处理数据。
假如更新参数,我理解这时EDMA已经停了,如果这样,此时怎么响应McBSP接口呢?等配完EDMA,不是就over flow/underrun了吗?
join join:
回复 Tony Tang:
1.更新参数是EDMA停止,MCASP没有数据过来,其保持事件触发状态。另一方面,中断处理中继续触发传输。可以说这块使用的LINK并不起作用,中断处理完毕后(时间很快50个周期),程序继续执行,由mcasp的事件触发新的传输。问题是edma中断中触发49之后,再没多一个都会引起固定频率的噪音。
TI中文支持网
