TI中文支持网
TI专业的中文技术问题搜集分享网站

询问oampl138在同时使用MCASP接口和C6accel引擎时遇到的问题

你们好:
      我原本MCASP接收发数功能一切正常,使用的EDMA传输以及使能了FIFO。
      但现在为了使用DSP功能,增加了C6accel的使用,此时发现MCASP接收出现了异常,但发送仍然正常。调试发现一调用c6accel_create函数,MCASP接收就不正常了。想问下这可能是什么原因了,现在一头雾水
       谢谢大家!
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的初始化代码的任意地方加。

赞(0)
未经允许不得转载:TI中文支持网 » 询问oampl138在同时使用MCASP接口和C6accel引擎时遇到的问题
分享到: 更多 (0)