完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
目前采用的开发平台为L138,DSP端采用sy***ios,ARM端采用Linux,异常现象出现在DSP端,DSP端需要同时使用McBSP0、McBSP1作为射频数据收发和McASP作为音频数据的收发,相关参数如下所示,这些接口的收发均采用EDMA3 PingPongBuffer方式,DMA数据搬移采用A-sync,信道控制器0,事件队列均配置为队列0。
1、采集音频,处理后送入射频,McBSP1_Tx、McBSP0_Tx、McBSP1_Rx、McASP_Rx四个端口会同时开启; 2、射频接收,处理后送入音频播放,McBSP1_Rx、McASP_Tx两个端口会同时开启。 测试过程中发现如下现象: 1、在场景1中,同时开启McBSP0_Tx、McBSP1_Tx、McBSP1_Rx、McASP_Rx时,McBSP0_Tx、McBSP1_Tx两路输出的数据在长时间运行过程中会逐渐产生相对位移,且McBSP1_Tx相对慢于McBSP0_Tx(从DAC和TxPll的输出可以看出波形相对位移,正常情况下两路应该是同步输出的); 2、在现象1的基础上,关闭McBSP1_Rx后,同时运行McBSP0_Tx、McBSP1_Tx、McASP_Rx不会存在现象1所述的产生相对位移的问题; 3、在现象2的基础上,开启打印调试功能后,存在现象1所述的产生相对位移的问题。 针对该问题也进行了一系列的调试,例如: 1、以现象1为基础,观察到两路的FS是完全同步的,不存在时钟偏移问题,排除了McBSP0_Tx、McBSP1_Tx两路时钟的影响;因此,比较怀疑McBSP数据线送数过程存在delay。由于采用DMA送数方式,进一步分析EDMA的工作机制,考虑事件队列串行输出可能存在阻塞的问题,因此以现象1为基础,将McBSP1_Rx的事件队列安排在队列1(优先级较低),却不会产生现象1的问题,因此判断该问题可能与事件队列阻塞有关。但此时场景2下的McBSP1_Rx的接收似乎不再顺畅,音频播放卡顿,可能是该试验中降低所用事件队列优先级的原因。 2、以现象3为基础,在线仿真观察QxEy寄存器,发现事件队列一直被事件15(SPI0 Transmit)占据,排查后发现,arm端的打印调试功能会在log输出的过程中将log信息存储到flash,在这过程中使用到SPI0,关闭log存储功能后,现象3不再出现,这进一步验证了我们关于事件队列阻塞McBSP0_Tx、McBSP1_Tx数据输出的猜想。 3、为了进一步确认事件队列阻塞数据输出的猜想,我们以现象1为基础,同时开启log存储功能,在线查看了事件队列状态寄存器,发现QSTATn.WM寄存器为3,QSTATn.NUMVAL为0,QSTATn.THRXCD为0,考虑到事件队列长度为16,最多只用到3项,似乎不是之前以为的事件队列占用太多的问题,又或许,即便WM为3,还是会对McBSP数据线产生影响? 4、同时,为何调试过程1中将McBSP1_Rx转到事件队列1后在场景2下会不再顺畅?针对该问题,我们以现象1为基础,开启打印输出,但关闭log存储,并将McBSP1_Rx转到事件队列1进行在线调试,此时事件队列0仍然有较多的事件15(SPI0 Transmit),可能是arm端文件系统有写数据的任务需求,而事件队列1主要由事件4(McBSP1 Receive)占据,可见也确实是在接收,但从最终输出音频结果看却是卡顿的,此时音频McASP仍在队列0,所以应当不会是音频播放的问题,只能是放到队列1的McBSP接收的问题。 根据数据手册,事件队列的优先级不由QUEPRI决定,而是由SYSCFG.MSTPRI1决定,目前系统的EDMA3_0_TC0、EDMA3_0_TC1优先级都已经是最高的了,但两个队列之间的优先级会有多大影响?优先级的工作机制又是怎样的? 因此,结合上述现象和已有的调试过程,请各位帮忙分析测试过程中出现异常现象的根源在什么地方?是否是事件队列的阻塞问题?又是否与队列优先级有关?如果有关,那么队列优先级的工作机制又是如何?在该应用中如何合理安排?还有EDMA的吞吐量极限是多少? |
|||||
相关推荐
2个回答
|
|||||
非常感谢你对问题的详尽的描述。
如讨论,这个问题可能是underflow引起的。关于underflow的描述,请见下面截屏。 从上面看你的系统对于EDMA及MCBSP,MCASP的应用还是蛮复杂的。一旦系统负荷过高,很容易引起underflow, overflow之类的问题。 在产生这种问题时,就需要进行系统级的调整,从以下几个方面: #1. 如你所说MSTPRI的,用来调整各master之间的优先级。这里的主要作用是在EDMA与其它master之间的优先级调整。 #2. EDMA队列,L138上的EDMA有两个队列,一方面两个队列有优先级。这个优先级体现在当两个队列中的事件访问同一个端口时,比如两个队列的当前EDMA都是访问 DDR的,那么就存在竞争了,优级级高的队列一的事件先得到响应。否则是可以同时进行的。 #3. 事件与队列的分配原则:将短频快的事件与大块的EDMA传输分开到不同的队列,否则一量服务大块的传输,会占用过长的时间,从而导致短频快的事件受到实时性影响。 #4. McBSP或MCASP本身的调整: 在L138, C6748上的McBSP,McASP接口有FIFO,利用FIFO可以减少EDMA事件的个数,从而减少冲突的概率。 需要注意的是McASP, McBSP的FIFO是按32bit word访问的。比如配置的数据格式是16bit的,数据寄存器是从FIFO取一个32bit,只传低16bit,高16位忽略了。所以在代码的buffer与FIFO之间需要注意这一点。 希望以上几点能有所帮助。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
非常感谢您的回复,目前该问题已经解决。 之前由于多个外设使用EDMA的事件队列0,造成一定程度的资源竞争,根据您的建议,McBSP开启FIFO后,该问题得到有效改善。 目前,各个McBSP仍旧使用EDMA的事件队列0,SPI写Flash也依然开启,相之间均不会有影响,正如您所提到的,由于 McBSP的FIFO按32bit word,原16位的数组需要进行扩展到32位,系统的运算负荷略有提高,开启cache后也相应解决。 |
|
|
|
只有小组成员才能发言,加入小组>>
351 浏览 1 评论
546 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
790 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
660 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1140 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
85浏览 29评论
317浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
262浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
210浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
69浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 22:34 , Processed in 0.827675 second(s), Total 44, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号