您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> SPI DMA问题
本帖共有4383个阅读者
发表帖子 发表投票 回复主题
SPI DMA问题
liuhai2200(论坛新手)
liuhai2200
头衔:社区公民
帮派:无帮无派
帖数:69
金钱:636
积分:84
注册时间:2012/8/12
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
SPI DMA问题

目前DSP作主SPI,从SPI设备有3个,用DMA作数据搬移。DMA数据搬移是不占用CPU的,但有可能是第1个SPI从设备数据搬移还没结束时,我却开始第二个SPI从设备的初始化,那么第1个数据搬移有可能被终止,有什么判别的办法吗?

谢谢!


完成梦想
等级:论坛新手 参考IP地址:*.*.*.*
2014/3/9 21:38:45
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
如果你的处理器SPI用的是一个接口,就做个标志位,等第一个搬完了再启动第二个。
如果是三个不同的SPI接口,则不会影响。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/3/11 22:50:53
liuhai2200(论坛新手)
liuhai2200
头衔:社区公民
帮派:无帮无派
帖数:69
金钱:636
积分:84
注册时间:2012/8/12
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
andy你好,我是用一个SPI接口挂3个外设,其中一个用dma搬数据,其他2个用SPI硬中断,现在有个问题:当用dma搬完数据后,再用SPI硬中断搬数据,进不了中断服务程序,我在dma搬完之后关掉了SPI及相应的DMA通道,其他2个SPI外设用硬中断进行通信都没有问题,都不会有相互影响。所以想问一下用dma搬完数据后,对dma及外设还需要什么其他复位操作?谢谢!

完成梦想
等级:论坛新手 参考IP地址:*.*.*.*
2014/6/21 18:54:04
liuhai2200(论坛新手)
liuhai2200
头衔:社区公民
帮派:无帮无派
帖数:69
金钱:636
积分:84
注册时间:2012/8/12
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
When using DMA for SPI transmit, the DMA_DONE interrupt signifies that the DMA FIFO is empty. However, at this point there may still be data in the SPI DMA FIFO waiting to be transmitted. Therefore, software needs to poll TXS in the SPI_STAT register until it goes low for 2 successive reads, at which point the SPI DMA FIFO will be empty. When the SPIF bit subsequently goes high, the last word has been transferred.

那个SPI DMA FIFO对应的是哪个寄存器,有什么办法可以使其为空吗?



完成梦想
等级:论坛新手 参考IP地址:*.*.*.*
2014/6/23 16:45:03
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
DMAFIFO无法通过寄存器访问到,你可以根据DMA状态寄存器,判断其FIFO是否为空,或者传输是否完成。
通常DMA传输完成后,将接口的使能关闭,将DMA的使能关闭即可。再次传输时,可以再次为其使能。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/6/30 14:26:22
liuhai2200(论坛新手)
liuhai2200
头衔:社区公民
帮派:无帮无派
帖数:69
金钱:636
积分:84
注册时间:2012/8/12
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

谢谢andy。

现在还有一个问题: 我同样的SPI代码,在BF561 0.3上跑SPI_STAT不会提示MODF错误,为什么在0.5的板子上跑就提示MODF错误(不是焊接问题,芯片也没问题,板子是一样的,只是硅版本不一样),我硬件上的PF0是悬空的,没有与其他的管教连接,有什么办法可以避免MODF问题吗?我目前挂了3个SPI外设。


完成梦想
等级:论坛新手 参考IP地址:*.*.*.*
2014/7/1 16:19:34
liuhai2200(论坛新手)
liuhai2200
头衔:社区公民
帮派:无帮无派
帖数:69
金钱:636
积分:84
注册时间:2012/8/12
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

问题解决,SPI Control Register (SPI_CTL)中PSSE (Slave Select Enable)Disable。


完成梦想
等级:论坛新手 参考IP地址:*.*.*.*
2014/7/2 21:07:36
高春芳123(论坛新手)
高春芳123
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:125
积分:5
注册时间:2014/11/12
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
如何从SPI DMA FIFO中读取数据?


恒爱心价格
等级:论坛新手 参考IP地址:*.*.*.*
2014/11/20 10:54:21
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
8信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
FIFO数据没有办法直接访问到,你只能通过定义DMA传输数据地址,方式,工作模式等,DMA工作后,会将读取的数据送到你指定的地址中。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/11/22 13:24:52
高春芳123(论坛新手)
高春芳123
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:125
积分:5
注册时间:2014/11/12
9信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
如果我这样写程序。。
*pDMA6_START_ADDR = (unsigned long)start_addr;
那么传输过来的数据就直接放在了,,,以start_addr为起始地址的一段存储空间中了,,

恒爱心价格
等级:论坛新手 参考IP地址:*.*.*.*
2014/11/24 16:08:47
14
1
1/2
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159273 Call, 1 Queries, Processed in 0.015137 second(s),