完善资料让更多小伙伴认识你,还能领取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个回答
|
|
用FIFO后,EDMA的参数要根据FIFO的配置来设置,即EDMA的A Count要设为FIFO的深度。当FIFO空出来所设置的FIFO阀值时,则产生EDMA Event,这时EDMA必需将FIFO阀值所需的数据一次性送给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 10:25 tony哥,打开FIFO的操作在配置MCBSP之前就调用了,深度为40words,每个words长度为32bits,对应的edma的配置如图,以前没有用FIFO的时候首地址为MCBSP_DRR,现在改为FIFO_DATA,A count值以前是4字节,就是DRR的宽度,现在改为4*40=FIFO的长度,对应的把B count缩短为原来的1/40,这样子写进不了EDMA的中断,帮我看看哪里有问题? 昨天调用使能FIFO的库函数接口,将FIFO深度设置为64words,源地址FIFO_DATA,a count = 4的时候都可以正常工作的。 |
|
|
|
lifei639156 发表于 2018-6-21 10:25 tony: 怎么保证EDMA将FIFO阀值所需的数据一次性送给FIFO?通过把a count的值跟FIFO的阈值配置一致还是有其他办法? |
|
|
|
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 10:32 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 11:16 刚才把配置打印出来,确认是采用A-sync,但是每次传送数据是640个words,所以虽然A-count改为4*40bytes了,但是B-count值不能为1,需要是16,这种配置我理解为就是每次传送4*40bytes时TC会给CC发送event,然后B-count的值减为0的时候EDMA控制器收到一起传送结束的标志,应用程序可以填新数据到传送完的640个words区域。 这里有一点不明白c-count值干嘛用的? |
|
|
|
lifei639156 发表于 2018-6-21 11:16 tony: 已经确认了是A-sync,但是只能进一次EDMA中断,ping-pong跑不起来了。 因为出现了mcbsp发不出来的问题,加上fifo为了event queue可以少点压力,不加FIFO的话,每4bytes就会产生一个FIFO,现在加了FIFO的话,应该是FIFO传输完再产生一个event,现在配置为a-count=fifo大小,b-count = (ping或者pong的长度/a-count),c-count = 1; 由于保密关系,代码拷贝不出来,之前不用FIFO的时候a-count=4, b-count = 640, c-count = 1, A-sync配置,这样是可以正常跑的,加上FIFO之后就是把目的地址从mcbsp的shift register改为FIFO_data,然后a-count=fifo大小,b-count = 640/FIFO深度,跑不起来了,还有哪里没有配置好嘛? |
|
|
|
lifei639156 发表于 2018-6-21 11:16 tony,我已经把代码改为可读性强一些的宏定义了,在mcbsp初始化之前把FIFO打开了,而且配置深度是32,DMA配置中目标地址也改为了FIFO_DATA地址,当BFIFO_DEEPTH=1时可以正常跑起来,而改为BFIFO_DEEPTH=20或者BFIFO_DEEPTH=32都没法正常跑,是不是哪里还没有配置好? 可以确定肯定是A-sync,因为opt寄存器的bit2位已经反复确认了,而且不用FIFO时能跑起来也证明了是A-sync。 |
|
|
|
lifei639156 发表于 2018-6-21 11:16 tony哥: 以下是完整的一个DMA PAR配置的代码,跟不用FIFO的区别就是a-count b-count bCntReload这三个地方要根据不同的FIFO深度进行修改,帮我看一下还要改哪里? |
|
|
|
leon2014xn 发表于 2018-6-21 11:58 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
怎么就不知道怎么配srcBIdx destBIdx,前面我已经截图了,如果是发送,srcBIdx则是aCnt,如果是接收,destBIdx则是aCnt,FIFO的地址只有一个,与它相关的Idx都是0。 DAM和SAM永远都是自增模式。 现在用了FIFO与你以前的只有两个区别。 #1. 地址变了。 #2. 一次Event传输的数据长度变了,以前是一个word,因为只有一个数据寄存器,一次只能收发一个word。现在用了FIFO,则一次传输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 12:35 好的,按照你的思路重新梳理一遍,再不行的话把发送和接收的配置都贴上来 |
|
|
|
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 13:04 Tony哥: 现在把打开FIFO的配置和MCBSPTX MCBSPRX的EDMA配置依次贴出来,请您帮我看一下,BFIFO_DEEPTH = 32,BFIFO的深度也是32,依次改变的地方就是:1.目标地址改为MCBSP_FIFO_DATA寄存器地址;2.发送时aCnt = 4*BFIFO_DEEPTH, bCnt = len/BFIFO_DEEPTH,srcBIdx = aCnt;3.接收时aCnt = 4*BFIFO_DEEPTH, bCnt = len/BFIFO_DEEPTH,destBIdx = aCnt。 按照上面说的配置把宏BFIFO_DEEPTH改为32就跑不起,改为1就可以正常跑,改为2就跑一两秒就没有了。 |
|
|
|
leon2014xn 发表于 2018-6-21 13:22 设成32跑不起来,你也可以看看paraset里的 Bcnt, 地址等有没有变化。 以及FIFO寄存器的状态显示FIFO里还有多少个数? 1能跑起来,说明EDMA配置没有问题了。2能跑2秒,也可以说明EDMA配置没啥问题,毕竟2秒对硬件来说时间不短了。32不行,是不是McBSP没在动作了? 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 13:37 tony哥:我先看看mcbsp这边 |
|
|
|
lifei639156 发表于 2018-6-21 13:37 tony:昨天半夜时我看到一个文档说用BFIFO的话,放数据的内存地址必须256位对齐,不知道这个要求对不对? |
|
|
|
lifei639156 发表于 2018-6-21 13:37 tony哥: 刚才我用示波器确认了一下,为什么BFIFO设置为2的深度可以跑2秒钟,BFIFO设置为1时可以完全跑起来,设置为4或者比4大的话完全跑跑不起来,发现设置为1的时候中断来的时间跟设计是一致的,4ms产生一个中断;但是设置BFIFO深度为2的时候发现中断时间变成了2ms; 但是MCBSP的帧同步和位同步时钟都采用从模式的,帧同步一直是160K,为什么BFIFO的改变会让速率提高了一倍呢?以下是在中断里面拉电平的记录: |
|
|
|
leon2014xn 发表于 2018-6-21 14:09 为什么在设为1时,不是1/160Hz=6.25ms,而4ms是对的? 我怎么觉得上面的间隔是搞反了,不可能FIFO加深中断间隔反而提高了。 http://processors.wiki.ti.com/index.php/Main_Page Think Over Before Asking. http://www.catb.org/~esr/faqs/smart-questions.html#goal |
|
|
|
只有小组成员才能发言,加入小组>>
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
672 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
599 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1052 浏览 1 评论
736 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
523 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
158浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
120浏览 14评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
124浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
122浏览 12评论
TPA6304-Q1: TPA6304 两片公用一组I2C的话,其中一片配置不成功怎么办
165浏览 10评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 08:02 , Processed in 1.092526 second(s), Total 86, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号