Tony Tang:
#1. 你原来的McASP是在ARM上操作的是吧。
#2. 请问FIFO的深度配置是多少?
#3. Buffer是放在DDR上,还是片上内存?
#4. 建议将DDR的PBBPR寄存器改为0x20或更小试试。
我较怀疑是因为DDR访问冲突导致EDMA没有及时响应McASP的请求,导致underrun了。你可以查看一下McASP寄存器的状态。
user1705012:
回复 Tony Tang:
你好,
我对mcasp的操作是在ARM端完成的 ,
mcasp fifo的深度我根据数据量大小有两种选择:1各字或64个字(两种配置大小,在加入了c6accel_creat这个函数后,mcasp edma收数都会出问题)
buffer是放在DDR上
我有几个疑问:只要一添加c6accel_creat这个函数后,mcasp edma接收就会出问题,dsp端并未进行其它操作
添加c6accel_creat这个函数后,只有mcasp edma接收会出问题,mcasp edma发送没有任何问题
在添加c6accel_creat这个函数后,我打印过mcasp edma接收对应的param表里的值,发现都变了
感觉是c6accel引擎的dma部分与mcasp接收edma部分什么地方有冲突
Tony Tang:
回复 user1705012:
Xujie,
#1. ARM端的McASP是在调用c6accel_creat之前就运行了吗?
#2. Pararam里的值是完全变了,还是只是count之类的变了。我没有研究过c6accel,我理解c6accel_creat应该只是加载DSP,还没有运行DSP,所以也不存在EDMA的冲突。DSP的程序也在DDR是吗?
#3. 如果怀疑有冲突,也就可能是paraset的冲突,可尝试改变McASP接收的Paraset位置。
user1705012:
回复 Tony Tang:
Tony Tang,
是啊,我也很奇怪,只是创建了一个c6accel的引擎,问题就出现了,是不是在创建过程中有跟EDMA相关的申请
MCASP 接收的Paraset位置是固定的吧,它是所有Paramset里的第一张表(mcasp edma发送是第二张),当mcasp edma接收要使用多个Paramset表时可以申请32个之后的位置,但最终都是load到第一张表的位置被mcasp接收的EDMA使用
Tony Tang:
回复 user1705012:
试一下:将DDR的PBBPR寄存器改为0x20或更小
另外,查看一下McASP的寄存器,看是否有错误状态?
你说的paramset的改变,前后对比是什么样子的变化?
user1705012:
回复 Tony Tang:
Tony Tang:
如果要修改DDR的PBBPR寄存器应该在u-boot里修改吧,我找了下,没找到相应的位置,应该在哪修改呢
Tony Tang:
回复 user1705012:
默认没有对这个寄存器的配置。
你可以在UBOOT的初始化代码的任意地方加。
TI中文支持网


