完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
一直在omapl138平台上面使用mcbsp的TX和RX进行数据的收发,采用EDMA的pingpong模式,BFIFO功能都是关闭着的,随着EDMA_CC0通道使用多了, 需要打开MCBSP的FIFO功能,根据文档上面解释,只要在mcbsp跳出reset模式之前打开都可以,所以在mcbsp初始化的时候,讲mcbsp进入reset模式之后,添加配置BFIFO,enable BFIFO,讲串行位宽配置为1 word,缓存大小配置为32bits的整数倍,每种倍数都尝试过,只要打开BFIFO功能,EDMA就进不了中断了,之前默认没有使用BFIFO功能的时候mcbsp都可以正常工作;
网上没有找到关于打开BFIFO功能的mcbsp例程,ti的例子里面也是没有提到BFIFO这个功能,请tony哥帮我看看,出谋划策一下,其他有遇到此类问题的同行们请赐教一下。 多谢! |
|
相关推荐
31个回答
|
|
lifei639156 发表于 2018-6-21 14:29 tony哥: 因为帧同步信号160K是外部给MCBSP的,这个示波器测量过了,不管是2ms还是4ms帧同步信号都是160Khz,设计思路是640个数据发送完产生一个中断,640/160=4,所以当BFIFO深度设置为1的时候,4ms产生一个中断没有问题,当BFIFO_DEEPTH=1的时候a_count = 4, b_count = 640, c_count = 1; 而按照手册上的说法,a_count = 8时, b_count = 320,c_count = 1,这样每次产生的中断间隔应该是一样的,但是用示波器测出来中断间隔确实变成了2ms; 刚才又做了一个新测试,a_count = 8, b_count = 640,c_count = 1,这样就变成了4ms一个中断,但是还是工作了2秒钟后中断就么有了。 “为什么在设为1时,不是1/160Hz=6.25ms,而4ms是对的?”:可能是我表达的不清楚,帧同步时间是160KHz,我说的中断是一个frame传送完产生的中断,不是a_count值传送完TC产生event给CC的这个东西。 |
|
|
|
leon2014xn 发表于 2018-6-21 14:35 实在不想讨论再多了,我自己将原来的简单工程改成了FIFO模式,可以正常工作。你自己看看吧。 本来很简单的一件事情,越讨论越复杂。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
谢谢您的耐心回答! |
|
|
|
tony哥: 这个FIFO的问题已经解决了,参考了你给的示例代码之后发现跟我的逻辑次序不一致,我这边是MCBSP用的是外部时钟,开FIFO的时候已经有帧同步信号了,导致工作不起来,现在把配置放到开启外部时钟之前就可以了,不是edma的配置问题。 诶,搞了一个大乌龙。 |
|
|
|
leon2014xn 发表于 2018-6-21 15:06 恭喜你~~~ http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
lifei639156 发表于 2018-6-21 15:16 没有你的耐心解答根本完不成 |
|
|
|
首先FIFO是有个半满信号输出的,可以将它连到GPIO做为EDMA的触发信号。 触发一次,EDMA应该只送出FIFO一半深度的数据即4KB, 即以A同步方式,ACNT=4KB。 而BCNT=100K/4K =25即可。 EDMA中断设为传输完成中断。 这样每当FIFO空出一半,发出信号触发EDMA,EDMA搬4KB数据,当FIFO再空出一半,再触发EDMA搬4KB,一共25次完成100KB数据的搬运,然后触发EDMA完成中断。 至于ping-pong buffer的link则是另外要考虑的问题了。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
lifei639156 发表于 2018-6-21 16:00 tony哥: 也就是说,如果现在使用AB同步方式的话,一次搬移A*B个数据,那么A*B的大小也必须与FIFO半满大小一致?这个半满信号是必须的吗?感谢您这么晚还在回复我。 |
|
|
|
kaishengdianzi 发表于 2018-6-21 16:09 我认为必须,不然你如何知道什么时候可以发起数据传输,以及如何知道FIFO里有多少空余空间?FIFO一般都有半满信号,至于空或者满信号不一定有。这些信号的目的都是为了告知FIFO的状态。 你一次传100KB,结果就是8KB之后的都丢掉了。 你可以第一次传8KB,因为开始FIFO是空的,后面的EDMA传半FIFO的数据。看你EDMA怎么配置了。 如果你的FIFO有空信号,那么配置EDMA每次传8KB也可以,只是这样的效率不怎么优化,因为FIFO空到有数这段间隔是没有数据传输的空闲时间。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
lifei639156 发表于 2018-6-21 16:24 Tony哥: 抱歉昨天没有及时回复您,现在有一个现象一直困扰着我,正如您所说,我起初也是认为EDMA每次搬移的数据块大小应当满足于FIFO的深度,但是我目前所使用GPMC的EDMA方式搬移数据块大小是大于FIFO的,数据传输正常,并没有丢失,只是速度提高不明显。这里我猜测,是否是因为FPGA对FIFO读速度要远远大于ARM这边的写速度,使得即使搬移数据块大也并不会造成溢出的现象呢? |
|
|
|
kaishengdianzi 发表于 2018-6-21 16:35 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
leon2014xn 发表于 2018-6-21 15:06 你的mcbsp的接口是自己做的吗,能共享一下吗 |
|
|
|
只有小组成员才能发言,加入小组>>
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
672 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
599 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1052 浏览 1 评论
736 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
523 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
158浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
122浏览 14评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
124浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
122浏览 12评论
TPA6304-Q1: TPA6304 两片公用一组I2C的话,其中一片配置不成功怎么办
165浏览 10评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 12:42 , Processed in 0.850203 second(s), Total 67, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号